簡介
ArkGuard是一款源碼混淆工具,提供基礎混淆功能。當軟件發(fā)布后,其代碼很容易被他人獲取分析,通過閱讀清晰的變量名、函數名,攻擊者或競爭者可以非常輕松地理解代碼的邏輯結構、業(yè)務核心算法和關鍵流程。代碼混淆(Obfuscation)就是一種重要的技術應對手段。它通過像“重命名”這樣的方式,將代碼中原本有意義的標識符變成簡短、無規(guī)律的字符,極大地增加了人工閱讀和理解代碼的難度與成本。
使用指南
ArkGuard混淆開啟指南
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/source-obfuscation-guide
混淆加固
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-build-obfuscation#section19439175917123
ArkGuard混淆工具:
① 開啟混淆開關:
在模塊的build-profile.json中配置。
"arkOptions":{
"obfuscation":{
"ruleOptions":{
"enable":true,
"files":["./obfuscation-rules.txt"]
}
}
}
② 配置混淆規(guī)則:
從DevEco Studio 5.0.3.600版本開始,新建工程時混淆規(guī)則配置文件obfuscation-rules.txt中默認會配置以下四項混淆規(guī)則,開發(fā)者可根據實際需求進行自定義修改。
-enable-property-obfuscation -enable-toplevel-obfuscation -enable-filename-obfuscation -enable-export-obfuscation
混淆選項如下所示:
| 默認混淆(不同版本默認配置不一致) | 開啟混淆后生效 |
| 關閉混淆 | -disable-obfuscation |
| 開啟屬性名稱混淆 | -enable-property-obfuscation |
| 開啟字符串屬性名稱混淆 | -enable-string-property-obfuscation |
| 開啟頂層作用域名稱混淆 | -enable-toplevel-obfuscation |
| 開啟導入導出名稱混淆 | -enable-export-obfuscation |
| 開啟文件名混淆 | -enable-filename-obfuscation |
| 代碼壓縮 | -compact |
| 聲明文件注釋刪除 | -remove-comments |
| 刪除console.*語句 | -remove-log |
| 名稱緩存輸出 | -print-namecache |
| 名稱緩存復用 | -apply-namecache |
| 輸出未混淆名單 | -print-kept-names |
| 縮減語言預置白名單 | -extra-options strip-language-default |
| 縮減系統(tǒng)預置白名單 | -extra-options strip-system-api-args |
| 保留聲明文件參數 | -keep-parameter-names |
| 合并依賴模塊選項 | -enable-lib-obfuscation-options |
| 通過注釋在源碼中標記白名單 | -use-keep-in-source |
③ 配置混淆保留選項
開啟混淆后,代碼中的方法、屬性或路徑被混淆。但是在程序運行時,如果訪問未混淆的對象時,可能會導致功能不可用。
保留選項如下所示:
| 指定保留屬性名稱 | -keep-property-name |
| 指定保留頂層作用域或導入導出元素名稱 | -keep-global-name |
| 指定保留文件/文件夾名稱 | -keep-file-name |
| 指定保留注釋 | -keep-comments |
| 指定保留聲明文件中的所有名稱 | -keep-dts |
| 指定保留源碼文件中的所有名稱 | -keep |
④ 指定release編譯
源碼混淆僅支持release編譯,不支持debug編譯。
點擊DevEco Studio界面右上角圖標選擇構建模式:

debug模式的構建產物會包含大量調試信息,例如變量名、函數名、行號等。在經過混淆后,這些調試信息將沒有意義,甚至報錯。
混淆助手工具(ObfuscationHelper)
我們誠邀廣大開發(fā)者一起參與 HarmonyOS 技術生態(tài)建設,共建更開放、更智能的未來世界!一個可以對模塊和場景進行掃描,快速識別需要配置的保留選項和白名單字段,一鍵生成白名單混淆規(guī)則文件Hm-recommend-keep-list.txt。
① 開啟混淆工具
菜單欄:Tools->ObfuscationHelper

在模塊欄點擊鼠標右鍵:

② 選擇掃描的模塊和場景
可以選擇要掃描的模塊。如果模塊之前已經生成過白名單,則會生成相應的歷史記錄。選擇歷史記錄后,會在本次掃描后自動關聯歷史的排查記錄,歷史排查過的白名單字段將不再被重復排查。

生成推薦白名單,會在對應模塊下生成推薦白名單文件。

③ 手動排查白名單
使用DevEco Studio 6.0.0 Beta1及以上版本,按以下步驟操作:
待排查白名單中顯示的是掃描出來不能自動生成推薦白名單,需要開發(fā)者根據業(yè)務進一步排查,識別白名單字段并配置到文件中。
如果排查后不需要配置白名單,點擊待排查,選擇已排查,標記該項已經排查。
如果排查后需要配置白名單,電子添加白名單,在輸入框中輸入保留選項和白名單字段,點擊保存白名單。

排查完成后,點擊生成排查白名單按鈕,ObfuscationHelper會在對應模塊下生成排查白名單文件Hm-manual-keep-list.txt/Hm-manual-consumer-keep-list.txt,并提示對應的文件路徑。同時在工程根目錄下生成對應的白名單Excel表格obfuscation-helper-xxx.xlsx。如果勾選合并白名單文件,點擊OK,會在工程根目錄下生成合并后的白名單文件Hm-merge-manual-keep-list.txt。

使用DevEco Studio 6.0.0 Beta1以下版本,按類似步驟操作:
需要手動填寫混淆規(guī)則和白名單,且不支持關聯歷史記錄。

④ 在混淆配置中添加白名單文件

方式一:
在各模塊的build-profile.json5中,將Hm-manual-keep-list.txt加入到混淆配置files字段下,將Hm-manual-consumer-keep-list.txt加入到consumerFiles字段下。
方式二:
將合并后的文件Hm-merge-manual-keep-list.txt配置在entry模塊build-profile.json5的files字段下。
常見問題
場景一:開發(fā)者在開啟屬性混淆情況下,調用系統(tǒng)api接口使用了類型為Record的對象,對象key被混淆導致編譯報錯。
分析:系統(tǒng)api接口不會被混淆,當key值被混淆后,在系統(tǒng)api側獲取不到原來的key值。
解決方案:將Record類型的key值加入屬性白名單
場景二:引入三方的har包,如何忽略這個三方har包
解決方案:在使用這個三方har的模塊里配置-keep ./oh_modules/三方庫名
-
算法
+關注
關注
23文章
4744瀏覽量
96924 -
代碼
+關注
關注
30文章
4927瀏覽量
72530 -
編譯
+關注
關注
0文章
682瀏覽量
34872
原文標題:ArkGuard混淆工具使用指南
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
Synplify工具使用指南
Synplify工具使用指南
凌陽DMC工具的使用指南
AirSync Debugger使用指南_微信藍牙協(xié)議調試工具
Rockchip RKDevInfoWriteTool工具及使用指南

ArkGuard混淆工具使用指南
評論