混淆代码之前class-dump下代码。如图,发现方法名称完美的暴露了。
![](http://upload-images.jianshu.io/upload_images/2324526-a889aede6b2a4273.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
混淆之后,发现syn_loginWithName:password:方法名变成了毫无意义的名称。
![](http://upload-images.jianshu.io/upload_images/2324526-29de30c06b5dc1e0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
好,混淆的作用已经演示清楚。那么接下来就说说如何实现混淆。
方式一
第一步:建立测试项目,同时新建一个confuse.sh、一个func.list文件。如图:
![](http://upload-images.jianshu.io/upload_images/2324526-70e64d6b38a446f3.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
第二步:将新建的两个文件拖到项目中。如图:
![](http://upload-images.jianshu.io/upload_images/2324526-da4114766ae4fbb5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/518)
第三步:将iOS安全攻防(二十三):Objective-C代码混淆 - 博客频道 - CSDN.NET 这篇文章中的脚本代码拷贝到confuse.sh文件中。如图:
![](http://upload-images.jianshu.io/upload_images/2324526-746675b1887b12e3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
第四步:建立一个.pch文件,并添加代码。(现在的项目都不会自动创建这个文件了)
一:新建一个Header File文件,如图:
![](http://upload-images.jianshu.io/upload_images/2324526-1be9218648669fcc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
二:在项目中配置一下:
![](http://upload-images.jianshu.io/upload_images/2324526-9127bbb6323cb74d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
三:在.pch文件中添加如下代码:(这个头文件的引入要写在最上面)
![](http://upload-images.jianshu.io/upload_images/2324526-c438370e87654694.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
第五步:配置 Build Phase,并添加 Run Script
![](http://upload-images.jianshu.io/upload_images/2324526-f57bb62aaa8593d5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
添加完成后要赋予该文件权限。打开终端,cd到项目根目录并执行该命令:
chmod 755 confuse.sh
好了,回到项目command + b 编译一下,会发现报错。
![](http://upload-images.jianshu.io/upload_images/2324526-c1f1856a669dc457.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
这时要注释.pch文件中 刚刚添加的那句话:
![](http://upload-images.jianshu.io/upload_images/2324526-7157faa3abb36750.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
再编译一下,会发现编译成功。编译成功后,在把刚刚注释的地方打开,再次编译,提示编译成功。
大功告成,混淆代码要做的准备工作已经完成。接下来就是配置你要混淆的函数名和变量名了。
第六步:混淆
假设我们要混淆图中的两个地方,那么我们就要在func.list文件中配置好。
![](http://upload-images.jianshu.io/upload_images/2324526-29f30b0e4214a365.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![](http://upload-images.jianshu.io/upload_images/2324526-496e6e957a6db301.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
编译项目,如图:
![](http://upload-images.jianshu.io/upload_images/2324526-7caf0a02de2b547b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
接着验证一下是否真的混淆成功了。
将项目打包,并class-dump下,发现方法名和属性名变了。
![](http://upload-images.jianshu.io/upload_images/2324526-47a99703d3b01616.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
来源:CSDN
作者:Kun虚心学习的小伙子
链接:https://blog.csdn.net/box_kun/article/details/80729440