之前听过代码混淆的概念,但公司不要求这个,所以当时也没有在意,现在有时间就简单看了一下,真的只是简单的看了一下,虽然看不懂。。。
由于 class-dump 可以导出程序的头文件,对于 APP 的安全考虑,我们需要混淆自己的代码。
混淆代码有多种方式:
字符串加密、符号混淆、别名、C 重写、脚本处理 等等....
防止 class-dump 导出可读信息的有效方法是易读字符替换,接下来我们就来看一下吧。 ###
这是念茜女神写的一个脚本,以下代码来自念茜女神的博客
// 数据库名 TABLENAME=symbols SYMBOL_DB_FILE="symbols" // 存放混淆方法、属性的list的路径 STRING_SYMBOL_FILE="$PROJECT_DIR/项目名/func.list" CONFUSE_FILE="$PROJECT_DIR/项目名" // 存放混淆方法、属性的.h的路径 HEAD_FILE="$PROJECT_DIR/项目名/codeObfuscation.h" // 剩下的代码看不懂啦。。。 export LC_CTYPE=C
以下代码是来自另一位大大的博客,那位大大实现了自动混淆(方法名字不能一个一个的添加到 func.list 中,所以只能从.m 和.h 文件中抽取了,但是如何屏蔽系统的方法名,暂行的策略是:将自己定义的方法名全部添加一个前缀例如:sss_),但只是混淆了方法名,我加上了属性名的混淆(因为看不懂 Linux 命令,只是一个简单的小问题弄了好久)
# 取以.m或.h结尾的文件以+号/-号/@property开头的行 |去掉所有+号或-号|用空格代替符号|n个空格跟着<号 替换成 <号|开头不能是IBAction|用空格split字串取第二部分|排序|去重复|删除空行|删掉以init开头的行>写进func.list grep -h -r -I "^[-+@property]" $CONFUSE_FILE --include '*.[mh]' |sed "s/[+-]//g"|sed "s/[();,: *\^\/\{]/ /g"|sed "s/[ ]*</</"| sed "/^[ ]*IBAction/d"|awk '{lens=split($0,b," "); print b[lens]; }'| sort|uniq |sed "/^$/d"|sed -n "/^sss_/p" >$STRING_SYMBOL_FILE
// 维护数据库方便日后作排重,以下代码来自念茜女神的博客 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 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
1.新建文件,将后缀改为 aaa.sh 如图:
把上面的代码粘贴到 aaa.sh 中,编译一下报错啦吧
解决办法:切换到工程目录下,输入命令行:
chmod 755 aaa.sh
给我们的脚本授权
2.我们再编译一下项目,然后在工程目录下,我们会多出一个 codeObfuscation.h 文件,右键 add...加到项目中
3.放到 pch 文件中
4.在 Xcode-->Target--->Build Phases---> 添加 Run Script
将 aaa.sh 拖到下图的黑框中,会自动生成路径
5.最后打包,用 class-dump 导出就可以看到效果啦
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于