通過這幾年的發(fā)展APP加固技術(shù),不斷得到快速迭代發(fā)展,加固的強(qiáng)度也在不斷的提升。加固技術(shù)的發(fā)展主要經(jīng)歷:動態(tài)加載、內(nèi)存不落地加載、指令抽取、指令轉(zhuǎn)換、虛擬機(jī)保護(hù)。下面就分別對這些技術(shù)實(shí)現(xiàn)進(jìn)行解析。
五代App加固技術(shù)的發(fā)展
第一代動態(tài)加載技術(shù):Android動態(tài)加載加固技術(shù)用于保護(hù)App應(yīng)用的邏輯不被逆向與分析,最早普遍在惡意軟件中使用,它主要基于Java虛擬機(jī)提供的動態(tài)加載技術(shù)。由于動態(tài)加載技術(shù)主要依賴于java的動態(tài)加載機(jī)制,所以要求關(guān)鍵邏輯部分必須進(jìn)行解壓,并且釋放到文件系統(tǒng)。這種動態(tài)加載技術(shù)不足之處在于:1.這一解壓釋放機(jī)制就給攻擊者留下直接獲取對應(yīng)文件的機(jī)會;2.可以通過hook虛擬機(jī)關(guān)鍵函數(shù),進(jìn)行dump出原始的dex文件數(shù)據(jù)。
第二代不落地加載技術(shù):Android不落地加載技術(shù),它是在動態(tài)加載技術(shù)的基礎(chǔ)進(jìn)行改進(jìn)。它通過借鑒第一代加固的動態(tài)加載技術(shù)中,關(guān)鍵邏輯部分必須釋放到文件系統(tǒng)的缺陷,它主要新增文件級別的加解密。文件級別的加解密技術(shù)主要有兩種實(shí)現(xiàn)方案:1.通過攔截系統(tǒng)的IO相關(guān)函數(shù),在這些系統(tǒng)的函數(shù)中進(jìn)行透明加解密。2.直接調(diào)用虛擬機(jī)提供的函數(shù),進(jìn)行不落地的加載。這種文件級別的加解密不足之處在于:1.由于在App啟動時需處理大量加解密操作,它會造成App啟動卡頓假死或黑屏現(xiàn)象,用戶體驗(yàn)感較差;2.由于它的內(nèi)存是連續(xù)的,通過hook關(guān)鍵函數(shù)就可以獲取到連續(xù)完整的dex數(shù)據(jù)。
第三代指令抽取技術(shù):android的指令抽取,主要在于函數(shù)基本的抽取保護(hù)。通過使用android虛擬機(jī)自帶的解釋器進(jìn)行執(zhí)行代碼。將原始App中dex文件的函數(shù)內(nèi)容進(jìn)行清除,并將單獨(dú)移動到一個加密文件中,在App運(yùn)行的時候,再將函數(shù)內(nèi)容重新恢復(fù)到對應(yīng)的函數(shù)體。這一指令抽取技術(shù)的不足之處在于:1.使用大量的虛擬機(jī)內(nèi)部結(jié)構(gòu),會出現(xiàn)兼容性問題;2.使用android虛擬機(jī)進(jìn)行函數(shù)內(nèi)容的執(zhí)行,無法對抗自定義虛擬機(jī);3.它跟虛擬機(jī)的JIT優(yōu)化出現(xiàn)沖突,達(dá)不到最佳的性能表現(xiàn)。
第四代指令轉(zhuǎn)換/VMP技術(shù):它主要通過實(shí)現(xiàn)自定義Android虛擬機(jī)的解釋器,由于自定義解釋器無法對Android系統(tǒng)內(nèi)的其他函數(shù)進(jìn)行直接調(diào)用,所有必須使用java的jni接口進(jìn)行調(diào)用。這種實(shí)現(xiàn)技術(shù)主要有兩種實(shí)現(xiàn):1.dex文件內(nèi)的函數(shù)被標(biāo)記為native,內(nèi)容被抽離并轉(zhuǎn)換為一個符合jni要求的動態(tài)庫。2.dex文件內(nèi)的函數(shù)被標(biāo)記為native,內(nèi)容被抽離并轉(zhuǎn)換為自定義的指令格式。并通過實(shí)現(xiàn)自定義接收器,進(jìn)行執(zhí)行代碼。它主要通過虛擬機(jī)提供的jni接口和虛擬機(jī)進(jìn)行交互。這一指令轉(zhuǎn)換技術(shù)實(shí)現(xiàn)方案不足之處在于:在攻擊者面前,攻擊者可以直接將這個加固技術(shù)方案當(dāng)做黑盒,通過實(shí)現(xiàn)自定義的jni接口對象進(jìn)行內(nèi)部調(diào)試分析,從而得到完整的原始dex文件。
第五代虛擬機(jī)源碼保護(hù)技術(shù):通過利用虛擬機(jī)技術(shù)保護(hù)App中的所有代碼,包括java、Kotlin、C/C++等多種代碼,虛擬機(jī)技術(shù)主要是通過把核心代碼編譯成中間的二進(jìn)制文件,隨后生成獨(dú)特的虛擬機(jī)源碼,保護(hù)執(zhí)行環(huán)境和只有在該環(huán)境下才能執(zhí)行的運(yùn)行程序。通過基于llvm工具鏈實(shí)現(xiàn)ELF文件的vmp保護(hù)。通過虛擬機(jī)保護(hù)技術(shù),讓ELF文件擁有獨(dú)特的可變指令集,大大提高了指令跟蹤,逆向分析的強(qiáng)度和難度。
App加固后的功能實(shí)現(xiàn)
字符串加密:將App的源代碼中敏感字符串做隨機(jī)加密處理。在運(yùn)行時進(jìn)行對字符串動態(tài)解密,這樣就可以避免攻擊者,通過利用工具進(jìn)行靜態(tài)逆向分析發(fā)現(xiàn)關(guān)鍵字符串信息,從而快速定位到應(yīng)用中的業(yè)務(wù)代碼。
控制流平坦化:將so文件中CC++代碼中的執(zhí)行控制邏輯變換為平坦的控制邏輯,從抽象語法樹層面進(jìn)行深度混淆,使得其在常用反編譯工具中,極大的降低反編譯逆向代碼的可讀性,增加逆向代碼的分析難度。
指令替換:對代碼中的運(yùn)算表達(dá)式進(jìn)行等效轉(zhuǎn)換,使其在常用反編譯工具中,提高破解者逆向分析門檻,有效的保護(hù)核心算法的原始邏輯。
局部變量名稱混淆:對源代碼中的變量名稱進(jìn)行做混淆操作,混淆后變量名稱變成無任何意義的名稱。這給分析者加大了分析強(qiáng)度。
符號混淆:對App應(yīng)用中的類名稱、函數(shù)名稱進(jìn)行混淆操作,增大直接用工具分析難度,讓反編譯逆向工具,無法直接通過類名稱、函數(shù)名稱進(jìn)行快速定位App的核心代碼。
混淆多樣化:采用在混淆過程中引入隨機(jī)性技術(shù),在相同的混淆策略下,每次混淆后的代碼均不一致,進(jìn)一步提升攻擊者通過利用工具進(jìn)行靜態(tài)分析的難度。
不透明謂詞:將代碼中分支跳轉(zhuǎn)判斷條件,由原來的確定值變?yōu)楸磉_(dá)式,增加程序邏輯的復(fù)雜性、降低代碼的可讀性。
防動態(tài)調(diào)試:對App應(yīng)用進(jìn)行防調(diào)試保護(hù)、檢測到配置防動態(tài)調(diào)試功能的類、方法、函數(shù)被IDA逆向工具進(jìn)行動態(tài)調(diào)試時候,App應(yīng)用進(jìn)行自動退出運(yùn)行操作,有利于保護(hù)App應(yīng)用直接被動態(tài)調(diào)試,從而提高攻防對抗的門檻。
防動態(tài)注入:對App應(yīng)用進(jìn)行防動態(tài)注入保護(hù),當(dāng)利用zygote或ptrace技術(shù)進(jìn)行App應(yīng)用的注入操作時,App應(yīng)用進(jìn)行自動退出運(yùn)行操作,以此進(jìn)行防御攻擊方對App應(yīng)用的非法操作,避免動態(tài)分析執(zhí)行代碼,從而達(dá)到動態(tài)保護(hù)App應(yīng)用安全。
HOOK檢測:對App進(jìn)行防HOOK保護(hù),檢測到配置防hook保護(hù)功能的類名、方法名、函數(shù)名在被frida、xposed等工具動態(tài)hook時候,App進(jìn)行自動退出操作,以此進(jìn)行提高防御App安全性,保護(hù)App不被注入攻擊,抵御惡意侵入。
代碼段檢驗(yàn):對App應(yīng)用中的代碼段進(jìn)行完整性校驗(yàn),發(fā)現(xiàn)代碼段被篡改,App應(yīng)用進(jìn)行自動退出運(yùn)行,防止App應(yīng)用中的代碼邏輯被篡改,以此進(jìn)行動態(tài)保護(hù)App的源代碼安全性。
完整性校驗(yàn):對App中指定的函數(shù)級進(jìn)行完整性校驗(yàn),當(dāng)應(yīng)用被重新簽名和代碼的完整性遭到破壞時候,檢測點(diǎn)進(jìn)行觸發(fā)App程序閃退,以此抵御主流的調(diào)試器調(diào)試分析,從而達(dá)到動態(tài)保護(hù)程序安全。
通過實(shí)現(xiàn)源到源的虛擬化保護(hù),加強(qiáng)了源代碼的安全性;通過多樣化靜態(tài)防護(hù)手段,實(shí)現(xiàn)控制流混淆;字符串加密;符號混淆等多樣化手段全方位保護(hù)代碼,大大的提高代碼靜態(tài)逆向能力,讓被逆向的代碼無法被理解。通過強(qiáng)大動態(tài)防護(hù)手段,防止代碼邏輯被篡改;保護(hù)源代碼對抗主流調(diào)試器,避免源代碼被動態(tài)分析執(zhí)行,防HOOK技術(shù)保護(hù)代碼不被注入攻擊,提高動態(tài)逆向分析的門檻。
頂象App加固介紹
頂象App加固技術(shù)是經(jīng)過市場考驗(yàn)的成熟技術(shù),它是基于目前領(lǐng)先的加固技術(shù),虛機(jī)源碼保護(hù)技術(shù),良好兼容Java、Kotlin、C/C++等多種語言。可以保護(hù)Android的DEX、配置、SO等16 種數(shù)據(jù)和文件安全,可有效偵測對抗動態(tài)調(diào)試、代碼注入、內(nèi)存dump、root環(huán)境、多開環(huán)境、模擬器、重打包等風(fēng)險。
頂象App加固提供了一套完整的工具鏈,首先把App代碼編譯成中間的二進(jìn)制文件,隨后生成獨(dú)特的虛機(jī)源碼保護(hù)執(zhí)行環(huán)境以及只能在該環(huán)境下執(zhí)行的運(yùn)行程序。也就是虛機(jī)源碼保護(hù)會在App內(nèi)部隔離出獨(dú)立的執(zhí)行環(huán)境,該核心代碼的運(yùn)行程序在此獨(dú)立的執(zhí)行環(huán)境里運(yùn)行。即便App本身被破解,這部分代碼仍然不可見。
頂象App加固自帶“蜜罐”功能(一種針對攻的欺騙的術(shù),誘使攻擊方實(shí)施攻擊,從而可以有效捕獲攻擊行為并對其機(jī)型分析,進(jìn)而通過技術(shù)和管理手段來增強(qiáng)實(shí)際系統(tǒng)的安全防護(hù)能力),可以通過自身的探針感知到環(huán)境的變化,實(shí)時探測到外界對本環(huán)境的調(diào)試、注入等非正常執(zhí)行流程變化,將調(diào)試動作引入程序陷阱,并發(fā)出警報(bào),進(jìn)而進(jìn)行實(shí)時更新,進(jìn)一步提高安全強(qiáng)度。
此外,頂象App加固率先支持對iOS免源碼加固,提供代碼混淆、字符串混淆、符號混淆、指令虛化、防調(diào)試、反編譯、防Class dump的保護(hù),并支持Bitcode輸出。
App加固技術(shù)總結(jié)
通過App加固技術(shù)不僅可以提高對逆向后的代碼閱讀難度、而且有利于降低App被破解、插入病毒、木馬、后門程序等惡意代碼的風(fēng)險,同時也能增強(qiáng)用戶隱私數(shù)據(jù)、交易數(shù)據(jù)的安全性。通過App加固技術(shù),也是為了更好應(yīng)對國家對App安全合規(guī)監(jiān)管檢測的標(biāo)準(zhǔn),降低App被第三方媒體曝光,從而嚴(yán)重影響企業(yè)品牌形象和信譽(yù),為企業(yè)和開發(fā)者的業(yè)務(wù)正常發(fā)展保駕護(hù)航。
隨著加固技術(shù)的快速發(fā)展和攻防對抗技術(shù)的快速迭代,而虛擬機(jī)源碼保護(hù)技術(shù)作為當(dāng)前主流的加固技術(shù),相信在未來很長一段時間,它會一直占據(jù)主導(dǎo)且領(lǐng)先的地位,因?yàn)橥ㄟ^對源碼的虛擬化保護(hù),從而能夠?yàn)锳pp提供足夠強(qiáng)度的保護(hù)。