年前我们的App iOS端被破解了,产生了一笔不小的经济损失,在老板的强烈要求下准备给我们的iOS App上个加固。由于网上对于iOS的加固讨论比较少,产品也不多,所以前段时间花了点时间调研了几种加固工具,整理了一下简单的评测。
Obfuscator-LLVM
Obfuscator-LLVM是由HEIG-VD于2010年6月发起的一个项目,可能是目前最让人熟知的iOS保护方案了,但是长期停留在llvm3.4时代,去年刚更新了个4.0,依然有很多bug。
Obfuscator-LLVM提供了如下功能:
- [Instructions Substitution]
-mllvm -sub
- [Bogus Control Flow]
-mllvm -bcf
- [Control Flow Flattening]
-mllvm -fla
安装
由于llvm4.0不支持iOS 11的SDK中引入的一些新的语法,所以官方的obfuscator-llvm 4.0版本是没办法直接使用的,需要自己port到5.0以上版本的llvm中,好在ollvm的代码非常简单,照着llvm-4.0分支里的commits做一遍就行了,主要是lib/Transforms/Obfuscation
下的一堆文件和lib/Transforms/IPO/PassManagerBuilder.cpp
测试的时候开启bcf编译会crash,参考了这个pull request进行修复,看了一眼代码,好像是在某种不支持的情况下跳过了bcf..... 编译完,需要在Xcode里配置一下,具体步骤可参考这里。
使用
在工程目录里修改默认编译器为Obfuscator。
保护的范围可以通过两种方式选择,
- 通过添加C Flags开启全局保护。
- 通过函数注解的方式针对特定函数开启
int foo() __