Objective-C代码混淆


前言

本方法参考CSDN博主念茜iOS安全攻防(二十三):Objective-C代码混淆,为深度理解,自己按照步骤做了一遍。并写下收获和体会。

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

这里我不多说了,可以参考念茜的iOS安全攻防系列博客。

二、混淆代码原理

操作过程中,我使用的是#define,将工程中的类中所有的方法名替换成随机字符串,当然,字符串需保证不是关键字。这里的替换方法是由博主念茜写的一段脚本。这里就不贴代码了,可以直接去她的iOS安全攻防(二十三):Objective-C代码混淆博文中参阅。

三、操作步骤

1.将混淆脚本 confuse.sh 放到工程目录下。

2.添加头文件"codeObfuscation.h"到pch文件中最前面的位置

#ifdef __OBJC__ 
    //添加混淆作用的头文件(这个文件名是脚本confuse.sh中定义的)  
    #import "codeObfuscation.h"  
    ....
#endif 

3.配置 Build Phase,在工程 Build Phase 中添加执行脚本操作,执行 confuse.sh 脚本,(路径名一定要写对!)如图:

4.创建函数名列表 func.list ,写入待混淆的函数名。

5.跑起工程。

四、一路走来,遇到的问题

1.confuse.sh: No such file or directory;

解决办法:先看看你Build Phases中的Run Script中写的路径是否跟你confuse.sh的路径一致。

2.confuse.sh: Permission denied;

解决办法:chmod a+x confuse.sh //对confuse.sh文件增加可执行权限

3.func.list: No such file or directory;

解决办法:确保func.list文件与confuse.sh文件在同一个文件夹里面,然后修改念茜的脚本文件: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 ....demo.app -o ..../dump-head

-H后面是app文件路径,-o后面导出头文件的文件夹

导出头文件后,查找func.list中替换的类中的函数名如下图:

这样下来,就算拿到分析出头文件,也不太好判断方法是干什么用的。从而又一步提高了app的安全性。

六、建议

如果一个是一个庞端的工程,我想大家都会觉得,自己还需要一个一个将方法名列入到func.list文件中,这可不是一个小的工作量,这里我看到有人优化了这个操作(详见),无需自己亲手去填充func.list文件,自动将工程中的所有.m对应的.h文件的函数名导入到func.list,确实是个不做的做法,但我在使用过程中,跑到到自动导入的那段代码,总会遇到奔溃。还望作者能多测试一下。

猜你喜欢

转载自blog.csdn.net/u012498386/article/details/80164005
今日推荐