之前听过代码混淆的概念,但公司不要求这个,所以当时也没有在意,现在有时间就简单看了一下,真的只是简单的看了一下,虽然看不懂。。。
由于 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
把上面的代码粘贴到 aaa.sh 中,编译一下报错啦吧
解决办法:切换到工程目录下,输入命令行:
chmod 755 aaa.sh
给我们的脚本授权
2.我们再编译一下项目,然后在工程目录下,我们会多出一个 codeObfuscation.h 文件,右键 add...加到项目中
3.放到 pch 文件中
4.在 Xcode-->Target--->Build Phases---> 添加 Run Script
将 aaa.sh 拖到下图的黑框中,会自动生成路径
5.最后打包,用 class-dump 导出就可以看到效果啦
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于