前段时间,根据公司安排,研究了移动应用的加固与安全方面的知识,为了避免忘记,本篇文章主要记载使用步骤。
如果只是想在项目里进行代码混淆,阅读OLLVM代码混淆移植与使用这篇博客就行了。如果想实战操作,多理解一些原理和过程,推荐《iOS应用逆向与安全》这本书
代码混淆的大概流程是了解LLVM的架构,下载并编译LLVM,开发和调试Pass,LLVM Pass的源代码分析,替换Xcode编译器,大概研究了若干星期。。。。
终于在Xcode上集成了Toolchains,正常的Xcode上应该是没有这个选项的。我们首先用系统默认的Toolchains编译一下,并且把编译包另存一个地方。
然后我们再选择我们自己添加的Toolchains,并且设置Build Setting-->Build Options-->Enable Index-While-Building Functionality设置为No
设置混淆方式Apple Clang - Custom Compiler Flags -->Other C Flag 设置为-mllvm -sub -mllvm -sobf -mllvm -fla -mllvm -bcf
好了,打开Hopper或IDA ,把两个包放进去,找到ViewController.m文件的viewDidLoad方法观察
观察上面两张图,差距很明显。未混淆的代码,使用逆向工具,里面的业务逻辑基本能看懂,而混淆后的代码,通过增加一些无用的代码,拆分代码块,并使代码扁平化。提高了静态分析的难度。
静态库混淆以上同样适用。