年前咱們的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
效果 官方宣稱有如下三個功能:
小結
最後,放上一個橫向對比供你們參考:
從安裝使用,到加固的效果,整體來講,頂象和易盾的加固都是很不錯的,特別是頂象企業版裏的代碼虛擬化功能,是個絕對的亮點。後續若是接觸到其餘加固工具,我會補充進來。