1. 程式人生 > 其它 >從第一代到第五代,App加固技術詳解

從第一代到第五代,App加固技術詳解

App加固技術功能發展

通過這幾年的發展APP加固技術,不斷得到快速迭代發展,加固的強度也在不斷的提升。加固技術的發展主要經歷:動態載入、記憶體不落地載入、指令抽取、指令轉換、虛擬機器保護。下面就分別對這些技術實現進行解析。

動態載入

Android動態載入加固技術用於保護App應用的邏輯不被逆向與分析,最早普遍在惡意軟體中使用,它主要基於Java虛擬機器提供的動態載入技術。由於動態載入技術主要依賴於java的動態載入機制,所以要求關鍵邏輯部分必須進行解壓,並且釋放到檔案系統。這種動態載入技術不足之處在於:1.這一解壓釋放機制就給攻擊者留下直接獲取對應檔案的機會;2.可以通過hook虛擬機器關鍵函式,進行dump出原始的dex檔案資料。

不落地載入

Android不落地載入技術,它是在動態載入技術的基礎進行改進。它通過借鑑第一代加固的動態載入技術中,關鍵邏輯部分必須釋放到檔案系統的缺陷,它主要新增檔案級別的加解密。

檔案級別的加解密技術主要有兩種實現方案:1.通過攔截系統的IO相關函式,在這些系統的函式中進行透明加解密。2.直接呼叫虛擬機器提供的函式,進行不落地的載入。這種檔案級別的加解密不足之處在於:1.由於在App啟動時需處理大量加解密操作,它會造成App啟動卡頓假死或黑屏現象,使用者體驗感較差;2.由於它的記憶體是連續的,通過hook關鍵函式就可以獲取到連續完整的dex資料。

指令抽取

android的指令抽取,主要在於函式基本的抽取保護。通過使用android虛擬機器自帶的直譯器進行執行程式碼。將原始App中dex檔案的函式內容進行清除,並將單獨移動到一個加密檔案中,在App執行的時候,再將函式內容重新恢復到對應的函式體。

這一指令抽取技術的不足之處在於:1.使用大量的虛擬機器內部結構,會出現相容性問題;2.使用android虛擬機器進行函式內容的執行,無法對抗自定義虛擬機器;3.它跟虛擬機器的JIT優化出現衝突,達不到最佳的效能表現。

指令轉換/VMP

它主要通過實現自定義Android虛擬機器的直譯器,由於自定義直譯器無法對Android系統內的其他函式進行直接呼叫,所有必須使用java的jni介面進行呼叫。

這種實現技術主要有兩種實現:1.dex檔案內的函式被標記為native,內容被抽離並轉換為一個符合jni要求的動態庫。2.dex檔案內的函式被標記為native,內容被抽離並轉換為自定義的指令格式。並通過實現自定義接收器,進行執行程式碼。它主要通過虛擬機器提供的jni介面和虛擬機器進行互動。這一指令轉換技術實現方案不足之處在於:在攻擊者面前,攻擊者可以直接將這個加固技術方案當做黑盒,通過實現自定義的jni介面物件進行內部除錯分析,從而得到完整的原始dex檔案。

虛擬機器原始碼保護

通過利用虛擬機器技術保護(www.dingxiang-inc.com)App中的所有程式碼,包括java、Kotlin、C/C++等多種程式碼,虛擬機器技術主要是通過把核心程式碼編譯成中間的二進位制檔案,隨後生成獨特的虛擬機器原始碼,保護執行環境和只有在該環境下才能執行的執行程式。通過基於llvm工具鏈實現ELF檔案的vmp保護。通過虛擬機器保護技術,讓ELF檔案擁有獨特的可變指令集,大大提高了指令跟蹤,逆向分析的強度和難度。

App加固後的功能實現

字串加密:將App的原始碼中敏感字串做隨機加密處理。在執行時進行對字串動態解密,這樣就可以避免攻擊者,通過利用工具進行靜態逆向分析發現關鍵字串資訊,從而快速定位到應用中的業務程式碼。

控制流平坦化:將so檔案中C\C++程式碼中的執行控制邏輯變換為平坦的控制邏輯,從抽象語法樹層面進行深度混淆,使得其在常用反編譯工具中,極大的降低反編譯逆向程式碼的可讀性,增加逆向程式碼的分析難度。

指令替換:對程式碼中的運算表示式進行等效轉換,使其在常用反編譯工具中,提高破解者逆向分析門檻,有效的保護核心演算法的原始邏輯。

區域性變數名稱混淆:對原始碼中的變數名稱進行做混淆操作,混淆後變數名稱變成無任何意義的名稱。這給分析者加大了分析強度。

符號混淆:對App應用中的類名稱、函式名稱進行混淆操作,增大直接用工具分析難度,讓反編譯逆向工具,無法直接通過類名稱、函式名稱進行快速定位App的核心程式碼。

混淆多樣化:採用在混淆過程中引入隨機性技術,在相同的混淆策略下,每次混淆後的程式碼均不一致,進一步提升攻擊者通過利用工具進行靜態分析的難度。

不透明謂詞:將程式碼中分支跳轉判斷條件,由原來的確定值變為表示式,增加程式邏輯的複雜性、降低程式碼的可讀性。

防動態除錯:對App應用進行防除錯保護、檢測到配置防動態除錯功能的類、方法、函式被IDA逆向工具進行動態除錯時候,App應用進行自動退出執行操作,有利於保護App應用直接被動態除錯,從而提高攻防對抗的門檻。

防動態注入:對App應用進行防動態注入保護,當利用zygote或ptrace技術進行App應用的注入操作時,App應用進行自動退出執行操作,以此進行防禦攻擊方對App應用的非法操作,避免動態分析執行程式碼,從而達到動態保護App應用安全。

HOOK檢測:對App進行防HOOK保護,檢測到配置防hook保護功能的類名、方法名、函式名在被frida、xposed等工具動態hook時候,App進行自動退出操作,以此進行提高防禦App安全性,保護App不被注入攻擊,抵禦惡意侵入。

程式碼段檢驗:對App應用中的程式碼段進行完整性校驗,發現程式碼段被篡改,App應用進行自動退出執行,防止App應用中的程式碼邏輯被篡改,以此進行動態保護App的原始碼安全性。

完整性校驗:對App中指定的函式級進行完整性校驗,當應用被重新簽名和程式碼的完整性遭到破壞時候,檢測點進行觸發App程式閃退,以此抵禦主流的偵錯程式除錯分析,從而達到動態保護程式安全。

通過實現源到源的虛擬化保護,加強了原始碼的安全性。通過多樣化靜態防護手段,實現控制流混淆;字串加密;符號混淆等多樣化手段全方位保護程式碼,大大的提高程式碼靜態逆向能力,讓被逆向的程式碼無法被理解。通過強大動態防護手段,防止程式碼邏輯被篡改;保護原始碼對抗主流偵錯程式,避免原始碼被動態分析執行,防HOOK技術保護程式碼不被注入攻擊,提高動態逆向分析的門檻。

App加固技術總結

通過App加固技術不僅可以提高對逆向後的程式碼閱讀難度、而且有利於降低App被破解、插入病毒、木馬、後門程式等惡意程式碼的風險,同時也能增強使用者隱私資料、交易資料的安全性。通過App加固技術,也是為了更好應對國家對App安全合規監管檢測的標準,降低App被第三方媒體曝光,從而嚴重影響企業品牌形象和信譽,為企業和開發者的業務正常發展保駕護航。

隨著加固技術的快速發展和攻防對抗技術的快速迭代,而虛擬機器原始碼保護技術作為當前主流的加固技術,相信在未來很長一段時間,它會一直佔據主導且領先的地位,因為通過對原始碼的虛擬化保護,從而能夠為App提供足夠強度的保護。