swiftiOS知识收藏常用开发工具🛠

iOS 混淆代码方式一(swift篇)

2018-07-24  本文已影响26人  cafei

混淆代码是为了防止别人反编译代码之后,根据函数名或者变量名来窥探你的app,从而了解app的内部实现。

在代码混淆之前,使用class-dump进行逆向,可以看出逆向出了所有的属性和方法,如图:

混淆的原理

这里使用的混淆的原理是,用一串随机生成的字符串来替换相应的函数名和变量名

如何实现混淆?

以下混淆方式通用于OC和swift,纯OC的项目可以使用已经封装好的ios-class-guard https://github.com/Polidea/ios-class-guard

第一步:在相应的项目工程下新建一个confuse.sh 和 func.list文件

$ cd /Users/cafei/Desktop/SwiftTest 

$ touch confuse.sh

$ touch func.list

第二步:将新建的两个文件拖到项目工程中

第三步:将以下脚本拷贝到刚新建的confuse.sh文件中

(此脚本源头来源于https://blog.csdn.net/yiyaaixuexi/article/details/29201699)

以下是代码截图,复制黏贴confuse.sh文本请见https://www.jianshu.com/writer#/notebooks/13159521/notes/31357519

以上是代码截图,复制黏贴confuse.sh文本请见https://www.jianshu.com/writer#/notebooks/13159521/notes/31357519

第四步:新建一个.pch文件并添加相应的配置(如果项目中已经存在pch文件则不需要再新建,直接使用即可)

第五步:添加Run Script,并写入脚本 $PROJECT_DIR/confuse.sh

第六步:给confuse.sh文件添加权限

$ cd /Users/cafei/Desktop/SwiftTest 

$ chmod 755 confuse.sh

此时build项目工程,如果报错"CodeObfuscation.h" file not found

解决方案:

(1)将pch文件中刚添加的头文件注释掉,如图

(2)再次build项目工程,发现可以编译成功了

(3)将pch文件中刚注释掉的头文件再打开,再次build,就可以编译成功了

第五步:在func.plist文件中配置需要混淆的函数名和变量名

假设我现在需要混淆LoginViewController文件中的部分函数名和变量名,如图配置即可

第六步:编译项目工程看混淆结果

如上图所示,混淆成功,函数名和变量名都已经变成了随机生成的字符串,并且在symbols中可以查找到两者之间的对应关系,方便后续查找bug等

二次更新:如何查看symbols中的内容

$ cd /Users/cafei/Desktop/SwiftTest

$ sqlite3 symbols.sqlite3

$ .databases

$ select * from symbols;

这时混淆前后的函数名和变量名对应关系就出现在你眼前啦

上一篇 下一篇

猜你喜欢

热点阅读