在 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