收藏iosiOS开发iOS相关

iOS的反编译和代码混淆

2018-08-24  本文已影响223人  yks慷

在 iOS APP 开发过程中,可能以为疏忽或者是工程时间赶,安全性这一方面往往会被忽视

只需要拿到 ipa 文件,那么就可以获取很多数据,比如:

(1)反编译就可以获取你的.h 文件的各种公开方法名,甚至可以拿到你加密的方法,这样黑客就可以直接模仿用户行为,造成不必要的损失

(2)分析APP 里包含的一些资源,如:图片、plist文件、静态wap页、.bundle 等。所以一些保密的不能放到这些文件中

(3)通过软件查看 APP 的沙盒,查看里面存储的 文件:sqlite、plist(NSUserdefault会存到Library下的Preferences中 的 plist文件中)、图片等,在做登录功能时大部分的人都把用户信息放到NSUserdefault,如果是一些比较重要的,则需要进行加密在存储

还有很多是需要我们继续向下学习的,这篇文章主要是说一下反编译和代码混淆

反编译

反编译有很多种方法,大致都是使用各种辅助工具来进行剖解 ipa 文件,主要的步骤就不一一细说,链接到的文章里都很详细,下面的文章是对比之后写的比较详细的,有兴趣的可以试试反编译

(1)使用 class-dump 

https://www.jianshu.com/p/2cd9636f9b37

(2)使用 IDA

https://www.jianshu.com/p/b36d5a2f3c60

https://blog.csdn.net/wqt925497045/article/details/79062405

(3)使用 Hopper

https://www.jianshu.com/p/384dc5bc1cb4

代码混淆

防止反编译的方法有很多,比如本地数据加密,URL编码加密,网络传输数据加密,借助第三方APP加固,代码混淆等,本文主要讲的是代码混淆方法.

先附上自己做的 demo ,是使用 swift 制作的,原理和 OC 语言的一样

(一)现在工程中建两个文件confuse.sh和func.list,第一个文件是用来放脚本,第二个文件是放需要加密的方法名字

(二)将confuse.sh的脚本填充好,直接复制就好,如下

#!/usr/bin/env bash

TABLENAME=symbols

SYMBOL_DB_FILE="symbols"

STRING_SYMBOL_FILE="func.list"

HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"

exportLC_CTYPE=C

#维护数据库方便日后作排重

createTable()

{

echo "create table $TABLENAME(src text, des text);" | sqlite3 $SYMBOL_DB_FILE

}

insertValue()

{

echo "insert into $TABLENAME values('$1' ,'$2');" | sqlite3 $SYMBOL_DB_FILE

}

query()

{

echo "select * from $TABLENAME where src='$1';" | sqlite3 $SYMBOL_DB_FILE

}

ramdomString()

{

openssl rand -base6464| tr -cd'a-zA-Z'|head -c16

}

rm -f $SYMBOL_DB_FILE

rm -f $HEAD_FILE

createTable

touch $HEAD_FILE

echo '#ifndef Demo_codeObfuscation_h

#define Demo_codeObfuscation_h' >> $HEAD_FILE

echo "//confuse string at `date`" >> $HEAD_FILE

cat "$STRING_SYMBOL_FILE" | while read -ra line; do

if[[ ! -z"$line"]];then

ramdom=`ramdomString`

echo $line $ramdom

insertValue $line $ramdom

echo "#define $line $ramdom" >> $HEAD_FILE

fi

done

echo"#endif">> $HEAD_FILE

sqlite3 $SYMBOL_DB_FILE .dump 

(三)填入脚本的路径

注意:脚本的路径一定要对,不对的话会出现两个错误,可以运行,但是最后是没有代码混淆的,如下图,是放置的位置

(四)最后在 func.list 中写入你需要混淆的方法,运行即可,第一次运行会自动生成一个文件codeObfuscation.h, 如果有对应的# define 生成,说明你已经成功了!

到此为止已经成功把你的代码混淆了,如果不懂的或者有什么建议,可以留言,参考自念茜大婶

参考地址:http://blog.csdn.net/yiyaaixuexi/article/details/29201699

上一篇下一篇

猜你喜欢

热点阅读