簡介
ArkGuard是一款源碼混淆工具,提供基礎(chǔ)混淆功能。當(dāng)軟件發(fā)布后,其代碼很容易被他人獲取分析,通過閱讀清晰的變量名、函數(shù)名,攻擊者或競爭者可以非常輕松地理解代碼的邏輯結(jié)構(gòu)、業(yè)務(wù)核心算法和關(guān)鍵流程。代碼混淆(Obfuscation)就是一種重要的技術(shù)應(yīng)對手段。它通過像“重命名”這樣的方式,將代碼中原本有意義的標(biāo)識(shí)符變成簡短、無規(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混淆工具:
① 開啟混淆開關(guān):
在模塊的build-profile.json中配置。
"arkOptions":{ "obfuscation":{ "ruleOptions":{ "enable":true, "files":["./obfuscation-rules.txt"] } } }
② 配置混淆規(guī)則:
從DevEco Studio 5.0.3.600版本開始,新建工程時(shí)混淆規(guī)則配置文件obfuscation-rules.txt中默認(rèn)會(huì)配置以下四項(xiàng)混淆規(guī)則,開發(fā)者可根據(jù)實(shí)際需求進(jìn)行自定義修改。
-enable-property-obfuscation -enable-toplevel-obfuscation -enable-filename-obfuscation -enable-export-obfuscation
混淆選項(xiàng)如下所示:
默認(rèn)混淆(不同版本默認(rèn)配置不一致) | 開啟混淆后生效 |
關(guān)閉混淆 | -disable-obfuscation |
開啟屬性名稱混淆 | -enable-property-obfuscation |
開啟字符串屬性名稱混淆 | -enable-string-property-obfuscation |
開啟頂層作用域名稱混淆 | -enable-toplevel-obfuscation |
開啟導(dǎo)入導(dǎo)出名稱混淆 | -enable-export-obfuscation |
開啟文件名混淆 | -enable-filename-obfuscation |
代碼壓縮 | -compact |
聲明文件注釋刪除 | -remove-comments |
刪除console.*語句 | -remove-log |
名稱緩存輸出 | -print-namecache |
名稱緩存復(fù)用 | -apply-namecache |
輸出未混淆名單 | -print-kept-names |
縮減語言預(yù)置白名單 | -extra-options strip-language-default |
縮減系統(tǒng)預(yù)置白名單 | -extra-options strip-system-api-args |
保留聲明文件參數(shù) | -keep-parameter-names |
合并依賴模塊選項(xiàng) | -enable-lib-obfuscation-options |
通過注釋在源碼中標(biāo)記白名單 | -use-keep-in-source |
③ 配置混淆保留選項(xiàng)
開啟混淆后,代碼中的方法、屬性或路徑被混淆。但是在程序運(yùn)行時(shí),如果訪問未混淆的對象時(shí),可能會(huì)導(dǎo)致功能不可用。
保留選項(xiàng)如下所示:
指定保留屬性名稱 | -keep-property-name |
指定保留頂層作用域或?qū)雽?dǎo)出元素名稱 | -keep-global-name |
指定保留文件/文件夾名稱 | -keep-file-name |
指定保留注釋 | -keep-comments |
指定保留聲明文件中的所有名稱 | -keep-dts |
指定保留源碼文件中的所有名稱 | -keep |
④ 指定release編譯
源碼混淆僅支持release編譯,不支持debug編譯。
點(diǎn)擊DevEco Studio界面右上角圖標(biāo)選擇構(gòu)建模式:
debug模式的構(gòu)建產(chǎn)物會(huì)包含大量調(diào)試信息,例如變量名、函數(shù)名、行號等。在經(jīng)過混淆后,這些調(diào)試信息將沒有意義,甚至報(bào)錯(cuò)。
混淆助手工具(ObfuscationHelper)
我們誠邀廣大開發(fā)者一起參與 HarmonyOS 技術(shù)生態(tài)建設(shè),共建更開放、更智能的未來世界!一個(gè)可以對模塊和場景進(jìn)行掃描,快速識(shí)別需要配置的保留選項(xiàng)和白名單字段,一鍵生成白名單混淆規(guī)則文件Hm-recommend-keep-list.txt。
① 開啟混淆工具
菜單欄:Tools->ObfuscationHelper
在模塊欄點(diǎn)擊鼠標(biāo)右鍵:
② 選擇掃描的模塊和場景
可以選擇要掃描的模塊。如果模塊之前已經(jīng)生成過白名單,則會(huì)生成相應(yīng)的歷史記錄。選擇歷史記錄后,會(huì)在本次掃描后自動(dòng)關(guān)聯(lián)歷史的排查記錄,歷史排查過的白名單字段將不再被重復(fù)排查。
生成推薦白名單,會(huì)在對應(yīng)模塊下生成推薦白名單文件。
③ 手動(dòng)排查白名單
使用DevEco Studio 6.0.0 Beta1及以上版本,按以下步驟操作:
待排查白名單中顯示的是掃描出來不能自動(dòng)生成推薦白名單,需要開發(fā)者根據(jù)業(yè)務(wù)進(jìn)一步排查,識(shí)別白名單字段并配置到文件中。
如果排查后不需要配置白名單,點(diǎn)擊待排查,選擇已排查,標(biāo)記該項(xiàng)已經(jīng)排查。
如果排查后需要配置白名單,電子添加白名單,在輸入框中輸入保留選項(xiàng)和白名單字段,點(diǎn)擊保存白名單。
排查完成后,點(diǎn)擊生成排查白名單按鈕,ObfuscationHelper會(huì)在對應(yīng)模塊下生成排查白名單文件Hm-manual-keep-list.txt/Hm-manual-consumer-keep-list.txt,并提示對應(yīng)的文件路徑。同時(shí)在工程根目錄下生成對應(yīng)的白名單Excel表格obfuscation-helper-xxx.xlsx。如果勾選合并白名單文件,點(diǎn)擊OK,會(huì)在工程根目錄下生成合并后的白名單文件Hm-merge-manual-keep-list.txt。
使用DevEco Studio 6.0.0 Beta1以下版本,按類似步驟操作:
需要手動(dòng)填寫混淆規(guī)則和白名單,且不支持關(guān)聯(lián)歷史記錄。
④ 在混淆配置中添加白名單文件
方式一:
在各模塊的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ā)者在開啟屬性混淆情況下,調(diào)用系統(tǒng)api接口使用了類型為Record的對象,對象key被混淆導(dǎo)致編譯報(bào)錯(cuò)。
分析:系統(tǒng)api接口不會(huì)被混淆,當(dāng)key值被混淆后,在系統(tǒng)api側(cè)獲取不到原來的key值。
解決方案:將Record類型的key值加入屬性白名單
場景二:引入三方的har包,如何忽略這個(gè)三方har包
解決方案:在使用這個(gè)三方har的模塊里配置-keep ./oh_modules/三方庫名
-
算法
+關(guān)注
關(guān)注
23文章
4738瀏覽量
96686 -
代碼
+關(guān)注
關(guān)注
30文章
4921瀏覽量
72197 -
編譯
+關(guān)注
關(guān)注
0文章
682瀏覽量
34763
原文標(biāo)題:ArkGuard混淆工具使用指南
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Synplify工具使用指南
Synplify工具使用指南
凌陽DMC工具的使用指南

AirSync Debugger使用指南_微信藍(lán)牙協(xié)議調(diào)試工具
Rockchip RKDevInfoWriteTool工具及使用指南

評論