年前咱们的App iOS端被破解了,产生了一笔不小的经济损失,在老板的强烈要求下准备给咱们的iOS App上个加固。因为网上对于iOS的加固讨论比较少,产品也很少,因此前段时间花了点时间调研了几种加固工具,整理了一下简单的评测。ios
Obfuscator-LLVM是由HEIG-VD于2010年6月发起的一个项目,多是目前最让人熟知的iOS保护方案了,可是长期停留在llvm3.4时代,去年刚更新了个4.0,依然有不少bug。git
Obfuscator-LLVM提供了以下功能:github
-mllvm -sub
-mllvm -bcf
-mllvm -fla
安装shell
因为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里配置一下,具体步骤可参考这里。xcode
使用bash
在工程目录里修改默认编译器为Obfuscator。app
保护的范围能够经过两种方式选择,函数
int foo() __attribute((__annotate__(("fla"))));
int foo() {
return 2;
}
复制代码
而后直接编译,整个保护过程并不算复杂。工具
效果学习
这个是某个函数混淆全开的效果,能够清晰地看出fla的结构,代码膨胀了数倍。
小结
网易易盾iOS应用加固不是免费的,从朋友那里蹭了一个网易易盾加固的试用版测了一下。
安装 易盾的加固工具是独立的编译器,不须要安装,解压就好了,可是以后须要安装一个插件xcpretty 里面内置了一个clang-5.0和xcodebuild
$ ~/Downloads/ntescstool_ef_1/tool/ntescs/bin/clang --version
clang version 5.0.0 (tags/RELEASE_500/final)
复制代码
使用
纯命令行工具,能够像xcodebuild同样使用,经过ntescstool命令完成加固功能,例如 ./ntescstool -project xxx.xcodeproj -scheme xxx -mode Archive -string-encryption
至关于将xcodebuild命令替换成ntescstool,而后再后面添加加固的参数。 加固范围的选择,提供了三种方式。
效果
易盾加固包含如下功能:
小结
顶象iOS加固有一个免费的lite版,注册就能下载,可是有一些限制,联系客服咨询了一些问题,软磨硬泡要了个企业版试用。
安装
顶象的iOS加固提供的是一套编译器插件,下载解压后,放在~/Library/Developer/Toolchains/
下便可完成安装,里面也带了一个clang,版本显示居然是Apple LLVM 9.0,不知道是什么黑科技。
$ ~/Library/Developer/Toolchains/DX-VM.xctoolchain/usr/bin/clang --version
Apple LLVM version 9.0.0 (clang-900.0.39.2)
复制代码
使用
安装后须要在Xcode菜单栏 Xcode
-> Toolchains
里选择 dx-vm
启用加固工具,若是想用回自带的编译器,再切换回去便可,不安装的时候,是没这个菜单的。若是要使用xcodebuild进行编译,则须要添加一个命令行参数 -toolchain dx-vm
。 加固范围的选择,跟网易的差很少,也提供了三种方式,
效果
顶象的加固有如下功能:
Il1
三个字符混淆,能够自定义修改小结
## 360加固
[360iOS加固]jiagu.360.cn/qcms/help.h…为在线加固,现阶段是免费内测,不须要安装相关程序,只须要在工程中进行相关的配置便可。
使用
Generate Debug Symbol
,这个选项是去除调试信息, 并将Optimization Level
设为-O0
效果 官方宣称有如下三个功能:
小结
最后,放上一个横向对比供你们参考:
从安装使用,到加固的效果,整体来讲,顶象和易盾的加固都是很不错的,特别是顶象企业版里的代码虚拟化功能,是个绝对的亮点。后续若是接触到其余加固工具,我会补充进来。