什么是代码混淆?
代码混淆就是保持代码原逻辑不变的情况下搞得别人就算拿到你的代码也看不懂。一来是加大别人反编译你打出来的包后对你的代码的理解程度,或者要把代码发给别人时不想让他们看懂代码。
一般java、Object-c、python编译后还保留命名信息的才需要混淆代码,像C这种编译后完成失去源码命名信息的就没必要混淆了。
至于好多人说混淆没必要,程序员写代码自带混淆之类的话语,那是他们的项目不重要,缺乏安全意识,还没有遇到重要项目被破解欲哭无泪的情况。
怎么混淆oc代码?
网上搜一下讲xcode代码混淆的基本都是与念茜的这篇文章一样的流程:传送门。
我照上面的文章搞过,明白他的思路后感觉有点冗余,其实核心步骤就两个,做完就能混淆同工程下的oc代码了:
- 创建一个xxx.h文件,拖进xcode工程,在这xxx.h文件里面通过#define的方式定义要替换的变量名。
- 找到工程的.pch文件,在文件里面添加#import “xxx.h”,这样在编译开始里就会进行xxx.h文件里面的预编译。(若项目没有.pch文件自行搜索xcode的.pch文件生成教程)
由于通过预编译时#define统一替换变量名,上面这样混淆方案存在的问题:
- 名字冲突:可能导致一些同名的底层封装方法找不到了。
- InitXXXX方法不能替换。
- 有些底层写死心的调用的函数声明不小心被替换就gg了。
- 通过字符串动态调用的函数也会gg。