前言
一、为什么需要对工程代码进行混淆
二、混淆代码原理
三、操作步骤
1.将混淆脚本 放到工程目录下。
2.添加头文件"codeObfuscation.h"
到pch文件中最前面的位置
#ifdef __OBJC__
//添加混淆作用的头文件(这个文件名是脚本中定义的)
#import "codeObfuscation.h"
....
#endif
3.配置 Build Phase,在工程 Build Phase 中添加执行脚本操作,执行 脚本,(路径名一定要写对!)如图:
4.创建函数名列表 func.list ,写入待混淆的函数名。
5.跑起工程。
四、一路走来,遇到的问题
1.: No such file or directory
;
解决办法:先看看你Build Phases中的Run Script中写的路径是否跟你的路径一致。
2.: Permission denied
;
解决办法:chmod a+x //对文件增加可执行权限
3.func.list: No such file or directory
;解决办法:确保func.list文件与文件在同一个文件夹里面,然后修改念茜
的脚本文件:STRING_SYMBOL_FILE="func.list"
为STRING_SYMBOL_FILE="$PROJECT_DIR/$PROJECT_NAME/func.list"
,其实就是改为相对路径,注意这个路径是否对应你的func.list文件路径。
五、享受一下成果
1.首先我func.list中写的要混淆的函数名如下图:
2.使用class-dump查看分析app头文件
class-dump命令:
class-dump -H .... -o ..../dump-head
-H后面是app文件路径,-o后面导出头文件的文件夹
导出头文件后,查找func.list中替换的类中的函数名如下图:
这样下来,就算拿到分析出头文件,也不太好判断方法是干什么用的。从而又一步提高了app的安全性。
六、建议
如果一个是一个庞端的工程,我想大家都会觉得,自己还需要一个一个将方法名列入到func.list文件中,这可不是一个小的工作量,这里我看到有人优化了这个操作(详见),无需自己亲手去填充func.list文件,自动将工程中的所有.m对应的.h文件的函数名导入到func.list,确实是个不做的做法,但我在使用过程中,跑到到自动导入的那段代码,总会遇到奔溃。还望作者能多测试一下。