之所以混淆代码是为了防止别人反编译代码后,根据方法名称来窥探你的APP。从而了解APP内部实现或者破解APP。
混淆代码之前class-dump下代码。如图,发现方法名称完美的暴露了。
混淆之后,发现syn_loginWithName:password:方法名变成了毫无意义的名称。
好,混淆的作用已经演示清楚。那么接下来就说说如何实现混淆。
方式一
第一步:建立测试项目,同时新建一个confuse.sh、一个func.list文件。如图:
第二步:将新建的两个文件拖到项目中。如图:
第三步:将iOS安全攻防(二十三):Objective-C代码混淆 - 博客频道 - CSDN.NET 这篇文章中的脚本代码拷贝到confuse.sh文件中。如图:
第四步:建立一个.pch文件,并添加代码。(现在的项目都不会自动创建这个文件了)
一:新建一个Header File文件,如图:
二:在项目中配置一下:
三:在.pch文件中添加如下代码:(这个头文件的引入要写在最上面)
第五步:配置 Build Phase,并添加 Run Script
添加完成后要赋予该文件权限。打开终端,cd到项目根目录并执行该命令:
chmod 755 confuse.sh
好了,回到项目command + b 编译一下,会发现报错。
这时要注释.pch文件中 刚刚添加的那句话:
再编译一下,会发现编译成功。编译成功后,在把刚刚注释的地方打开,再次编译,提示编译成功。
大功告成,混淆代码要做的准备工作已经完成。接下来就是配置你要混淆的函数名和变量名了。
第六步:混淆
假设我们要混淆图中的两个地方,那么我们就要在func.list文件中配置好。
编译项目,如图:
接着验证一下是否真的混淆成功了。
将项目打包,并class-dump下,发现方法名和属性名变了。
Demo地址:
github.com/LarkNan/TestConfusion.git
参考文章:
iOS安全攻防(二十三):Objective-C代码混淆 - 博客频道 - CSDN.NET