代码混淆就是将原有程序中方法名 、类名或者属性名通过自定义方式给予改变,以增加app的安全性或者是为了通过AppStore的审核。
经过查看资料针对修改方法名写了一个简单的demo,如有不对的地方,请各位大神不吝赐教~~
参考的大神地址:https://www.jianshu.com/p/66bb2d45b3c2
混淆文件解释
confuse.sh 脚本文件
func.list 需要混合的方法或者属性名
codeObfuscation.h 混淆后代码的对比显示
混淆步骤
一、创建文件
两种方式:
1、工程中手动创建:
创建个文件夹方便管理文件
image
创建shell文件 confuse.sh:
image
image
同样创建func.list文件:
image
image
同理创建头文件 codeObfuscation.h
image
2、终端命令行创建:
cd 到项目中:
创建文件夹: mkdir CondeObfuscation
创建.sh:touch confuse.sh
创建.list: touch func.list
创建.h:touch codeObfuscation.h
image
二、配置sh相关环境
屏幕快照 2019-04-10 下午5.24.48.png
添加.sh路径:$PROJECT_DIR/CodeObfuscation/confuse.sh
屏幕快照 2019-04-10 下午5.27.20.png
在.sh 中添加代码
TABLENAME=symbols
SYMBOL_DB_FILE="$PROJECT_DIR/CodeObfuscation/symbols"
STRING_SYMBOL_FILE="$PROJECT_DIR/CodeObfuscation/func.list"
HEAD_FILE="$PROJECT_DIR/CodeObfuscation/codeObfuscation.h"
export LC_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 -base64 64 | tr -cd 'a-zA-Z' |head -c 16
}
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
三、将codeObfuscation.h头文件添加到pch文件中
工程中添加pch文件参考:[地址]https://blog.csdn.net/iven_ma/article/details/64439436
添加头文件
四、开始运行项目
可能报错的地方:
1.找不到.sh文件
报错1
改为绝对地址
2.sh文件权限问题
报错2
修改方法:给.sh文件授权
授权
3.symbols报错
报错2
修改方法将confuse.sh文件中symbols的地址改为:
修改symbols地址
五、开始测试
激动人心的时候到啦,终于可以开始测试啦
1.在func.list文件中添加要修改的方法名:functionCodefuscationTest
测试
2.终端中运行脚本. confuse.sh
运行脚本报错
emmm...可以看到报错啦 找不到codeObfuscation.h和func.list文件。同理在confuse.sh文件中将codeObfuscation.h地址改为绝对地址
修改方法
再次运行
. confuse.sh
查看结果:
被混淆的方法名颜色变了哦
codeObfuscation.h中记录
大功告成啦!!
我是参考大牛的代码, 然后自己走了一遍,出现的问题以及解决方法都在上方,如有不对的地方请各位大牛赐教!!万分感谢~~