前言


一、为什么需要对工程代码进行混淆






二、混淆代码原理


三、操作步骤



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,确实是个不做的做法,但我在使用过程中,跑到到自动导入的那段代码,总会遇到奔溃。还望作者能多测试一下。