日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

APP加固攻防梳理

 長(zhǎng)沙7喜 2021-11-23
背景
圖片

現(xiàn)在市面上對(duì)APP的安全合規(guī)管控越來(lái)越嚴(yán)格了,也就要求了APP在上架之前一定要做合規(guī)檢測(cè)和加固處理。對(duì)APP就是加固的好處,可以提高APP的安全性,提高APP被逆向分析破解的門檻,同時(shí)通過(guò)加固保護(hù)可以提高過(guò)安全合規(guī)的檢測(cè)。由于APP加固技術(shù)不斷被攻破情況,因此加固技術(shù)也是不斷在快速迭代的過(guò)程。現(xiàn)在市面上的加固產(chǎn)品的還是比較多的,并且各個(gè)加固技術(shù)產(chǎn)品都有其各自優(yōu)缺點(diǎn),但是加固產(chǎn)品的所采用技術(shù)去有很多共性的地方。下面就對(duì)加固和脫殼對(duì)抗方案做些梳理總結(jié)。

圖片

加固準(zhǔn)備

圖片

APP加固主要是對(duì)APP中的dex文件、so文件、資源文件等進(jìn)行保護(hù),因此這邊對(duì)這APP中的關(guān)鍵文件結(jié)構(gòu)做簡(jiǎn)短梳理總結(jié)。

App文件的結(jié)構(gòu)

圖片

Dex文件結(jié)構(gòu)

圖片

SO文件結(jié)構(gòu)

圖片

簡(jiǎn)單的APP加固原理的流程

  • 加固的代碼先運(yùn)行,進(jìn)行初始化工作;

  • 加固的代碼開始解密被保護(hù)的核心代碼;

  • 加固的代碼開始加載解密后的核心代碼;

  • 加固的代碼把控制權(quán)轉(zhuǎn)交給核心代碼。

圖片

第一代加固和脫殼

圖片

第一代加固技術(shù)主要做了進(jìn)行對(duì)app的dex文件進(jìn)行保護(hù)和做了一些簡(jiǎn)單的反調(diào)試保護(hù)。

Dex保護(hù):

Dex文件整體加密、字符串加密、自定義DexClassLoader。

動(dòng)態(tài)防護(hù):

ptrace反調(diào)試、TracePid值校驗(yàn)反調(diào)試。

第一代加固的出現(xiàn)也同時(shí)出現(xiàn)各種對(duì)加固技術(shù)的攻破。從而出現(xiàn)了各種對(duì)抗加固的脫殼方法。

最突出的是直接從內(nèi)存dump出dex完整結(jié)構(gòu)脫殼原理:

程序在啟動(dòng)過(guò)程中,要保證程序正常運(yùn)行,那么加固殼會(huì)自動(dòng)解密受保護(hù)的dex文件并完成加載,基于這個(gè)子解密的原理,我可以選擇在dex加載完成這個(gè)時(shí)機(jī)點(diǎn),將其dump下來(lái)。從而實(shí)現(xiàn)第一層防護(hù)殼、加密殼的脫殼。

下面羅列幾個(gè)脫殼方案

  1. 緩存脫殼法:

第一代的某些加固產(chǎn)品,安裝包是加密壓縮的,安裝后回在data/dalvik-cache目錄下生成解密的odex文件,這時(shí)候只需要獲取odex文件進(jìn)行做為分析的突破點(diǎn)。

  1. 內(nèi)存 dump脫殼法

通過(guò)工具:IDA Pro + dumpDEX

1、通過(guò)/proc/%d/maps獲取內(nèi)存映射

2、在內(nèi)存中查找關(guān)鍵字 dex.035或dex.036

3、手動(dòng)dump查找到的數(shù)據(jù)。

  1. 動(dòng)態(tài)調(diào)試脫殼法

1、通過(guò)基于IDA的android_server的代理方式進(jìn)行附加app。

2、再IDA中下dvmDexFileOpenPartial 斷點(diǎn),確認(rèn)要dump的起始地址和大小。

3、用ida的腳本方式進(jìn)行dump出原始數(shù)據(jù)。

  1. HOOK脫殼法

Hook脫殼法一般都是基于frida和xposed這兩個(gè)框架進(jìn)行做hook操作的。

這種hook脫殼法:先需要進(jìn)行分析app應(yīng)用,找到可以進(jìn)行hook的函數(shù),

然后在選擇用的順手的、適用的frida或xposed框架進(jìn)行 hook。

(xposed是java編譯,適用于java層hook;frida適用于java層和native層hook)。

通過(guò)對(duì)關(guān)鍵函數(shù)dvmDexFileOpenPartial進(jìn)行hook實(shí)現(xiàn)脫殼。

也可以通過(guò)xposed框架hook ClassLoader的loadClass函數(shù)實(shí)現(xiàn)脫殼。

  1. 定制系統(tǒng)脫殼法

主要是通過(guò)修改系統(tǒng)源碼中的關(guān)鍵函數(shù),接著將修改后的源碼重新編譯并進(jìn)行刷機(jī)。

例如通過(guò)修改系統(tǒng)dvmdexfileopenpartial函數(shù)的關(guān)鍵邏輯。在函數(shù)里面修改寫入我們想要實(shí)現(xiàn)的功能。

圖片

第二代加固和脫殼

圖片

由于第一代加固是整體性加固的,因此只要dump到關(guān)鍵點(diǎn)后,就可以完整的獲取到dex整個(gè)內(nèi)容。由于第一代殼的缺點(diǎn),隨之而來(lái)的就是進(jìn)行對(duì)APP中關(guān)鍵類的抽取技術(shù)。那么第二代加固主要進(jìn)行如下的功能點(diǎn)。

  1. DEX保護(hù): DEX類抽取、DEX動(dòng)態(tài)加載、SO動(dòng)態(tài)加載

  2. So保護(hù):SO加密

  3. 動(dòng)態(tài)防護(hù): 反調(diào)試,防HOOK

  4. 資源文件保護(hù):本地?cái)?shù)據(jù)庫(kù)保護(hù)、本地文件保護(hù)

脫殼技術(shù)方案

脫殼原理:

主動(dòng)調(diào)用類中的每一個(gè)方法,并實(shí)現(xiàn)函數(shù)指令的還原

常見的加固廠商的指令抽取的實(shí)現(xiàn)方式主要又兩大類,一種是指令代碼在dex文件原便宜位置處還原,另外一種就是隨機(jī)分配,通過(guò)修訂偏移的方式,使程序在執(zhí)行過(guò)程中通過(guò)修定的便宜找到函數(shù)指令;android程序在執(zhí)行過(guò)程,使用到類時(shí)候,都需要進(jìn)行加載,而在加載過(guò)程中,函數(shù)指令就會(huì)進(jìn)行指令還原或修訂函數(shù)指令指向的位置,我們可以利用這個(gè)時(shí)機(jī),將代碼拷貝到原代碼位置,進(jìn)而實(shí)現(xiàn)類抽取殼的脫殼。

下面羅列針對(duì)第二代加固的脫殼法

  1. 內(nèi)存重組脫殼法

通過(guò)內(nèi)存中dex文件的格式,找到完整的dex文件,將其組合到一起。

  1. 內(nèi)存dump脫殼法

通過(guò)工具:IDA Pro + dumpDEX

1、通過(guò)/proc/%d/maps獲取內(nèi)存映射

2、在內(nèi)存中查找關(guān)鍵字 dex.035或dex.036

3、手動(dòng)dump查找到的數(shù)據(jù)。

也可以直接用frida中的dump腳本進(jìn)行內(nèi)存dump脫殼。

  1. 動(dòng)態(tài)調(diào)試脫殼法

1、通過(guò)基于IDA的android_server的代理方式進(jìn)行附加app。

2、再IDA中下dvmDexFileOpenPartial 斷點(diǎn),確認(rèn)要dump的起始地址和大小。

3、用ida的腳本方式進(jìn)行dump出原始數(shù)據(jù)。

  1. HOOK脫殼法

Hook脫殼法一般都是基于frida和xposed這兩個(gè)框架進(jìn)行做hook操作的。

這種hook脫殼法:先需要進(jìn)行分析app應(yīng)用,找到可以進(jìn)行hook的函數(shù),

然后在選擇用的順手的、適用的frida或xposed框架進(jìn)行 對(duì)關(guān)鍵函數(shù)hook。

(xposed是java編譯,適用于java層hook;frida適用于java層和native層hook)。

通過(guò)對(duì)關(guān)鍵函數(shù)memcmp、dexFileParse進(jìn)行hook實(shí)現(xiàn)脫殼。

也可以通過(guò)hook ClassLoader的loadClass函數(shù)實(shí)現(xiàn)脫殼。

  1. 定制系統(tǒng)脫殼法

主要是通過(guò)修改系統(tǒng)源碼中的關(guān)鍵函數(shù),接著將修改后的源碼重新編譯并進(jìn)行刷機(jī)。

例如通過(guò)修改系統(tǒng)memcmp、dexFileParse函數(shù)的關(guān)鍵邏輯。在函數(shù)里面修改寫入我們想要實(shí)現(xiàn)的功能。

圖片

第三代加固和脫殼

圖片

第三代加固方案主要進(jìn)行對(duì)函數(shù)進(jìn)行做抽取,并進(jìn)行做動(dòng)態(tài)加解密方式,下面羅列關(guān)鍵的加固技術(shù)點(diǎn)

  1. DEX保護(hù): DEX Method代碼抽取、Dex Method動(dòng)態(tài)解密

  2. SO保護(hù):SO加殼

  3. 動(dòng)態(tài)防護(hù):防內(nèi)存dump、防系統(tǒng)核心庫(kù)HOOK

  4. 資源文件保護(hù):H5文件保護(hù)

APP函數(shù)抽取指令流程:

1、解析原始dex文件格式,保存所有方法的代碼結(jié)構(gòu)體信息。

2、通過(guò)傳入需要置空指令的方法和類名,檢索到其代碼結(jié)構(gòu)體信息。

3、通過(guò)方法的代碼結(jié)構(gòu)體信息獲取指令個(gè)數(shù)和偏移地址,構(gòu)造空指令集,然后覆蓋原始指令。

4、重新計(jì)算dex文件的checksum和signature信息,回寫到頭部信息中。

脫殼方法:

  1. HOOK脫殼法

通過(guò)利用frida框架進(jìn)行hook關(guān)鍵函數(shù)DexFile,OpenFile、dexFindClass等關(guān)鍵函數(shù)實(shí)現(xiàn)脫殼。

  1. 定制系統(tǒng)脫殼法

通過(guò)修改系統(tǒng)源碼中的關(guān)鍵函數(shù)如DexFile、OpenFile、dexFindClass函數(shù)的關(guān)鍵邏輯,然后進(jìn)行重編系統(tǒng)。

在ART中通過(guò)修改定制dex2oat法進(jìn)行脫殼。

圖片

第四代加固和脫殼

圖片

現(xiàn)在市面上強(qiáng)度最強(qiáng)加固方案實(shí)屬代碼虛擬化保護(hù)的方案。通過(guò)將程序的代碼編譯為虛擬機(jī)指令也就是虛擬機(jī)代碼(也就是自定義的代碼集),通過(guò)虛擬機(jī)cpu解釋并執(zhí)行的一種方式。

下面羅列下關(guān)鍵的加固技術(shù)點(diǎn)

  1. DEX保護(hù):代碼VMP虛擬化保護(hù)

  2. SO保護(hù):基于llvm的SO文件保護(hù)(ELF VMP)

脫殼方案

  • HOOK脫殼法

    可以基于frida框架進(jìn)行針對(duì)不同虛擬機(jī)(dalvik和art)實(shí)現(xiàn)進(jìn)行hook。

  • 定制系統(tǒng)脫殼法

圖片

總結(jié)

圖片

利用frida脫殼方法:

1、通過(guò)找到DexFile對(duì)象(art虛擬機(jī)是DexFile對(duì)象,dalvik虛擬機(jī)下是DexFile結(jié)構(gòu)體),獲取到DEX文件的起始地址和大小,然后dump下來(lái)。

常見能夠找到DexFile對(duì)象的函數(shù)有LoadMethod、ResolveMethod函數(shù)等,能直接獲取到DEX起始地址和大小的常見函數(shù)有openMemory、dexparse、dexFileParse、dvmDexFileOpenPartial等函數(shù)。frida_unpack便是其中的代表作。

2、利用frida的搜索內(nèi)存,通過(guò)匹配DEX文件的特征,例如DEX文件的文件頭中的魔法值---dex.035或dex.036這個(gè)特征。frida-Dexdump便是這種脫殼方法的代表作。

自定義系統(tǒng)和定制的android設(shè)備方法:

1、采用定制的android的rom,可以有效對(duì)抗市場(chǎng)中所有的加密殼、類抽取類型的殼;相比開源的脫殼工具,大體都是基于hook框架,例如frida、Xposed;目前大多加固廠商已經(jīng)對(duì)hook框架,以及脫殼框架的特征進(jìn)行了安全檢測(cè),這會(huì)導(dǎo)致app啟動(dòng)失敗,從而實(shí)現(xiàn)脫殼失敗,而通過(guò)自定義的rom,沒(méi)有依賴hook框架,也就沒(méi)有相關(guān)框架特征代碼標(biāo)志,所以脫殼成功率會(huì)比較高。

2、采用定制android硬件設(shè)備優(yōu)勢(shì),基于android的開源性,google公司每次發(fā)布新版的rom,都會(huì)率先在Pixel、Nexus系列的設(shè)備上最早應(yīng)用,這也導(dǎo)致大部分安全從業(yè)者為了提升工作效率,間隔的采用自定義ROM實(shí)現(xiàn)方式,在市場(chǎng)中開源脫殼ROM,大多是需要刷Nexus、Pixel系列機(jī)型,這也使得大多加固廠商對(duì)這Nexus、Pixel系列機(jī)型做特殊,更深層次的安全防護(hù)檢測(cè),以此保證程序在運(yùn)行過(guò)程中的安全性。通過(guò)定制android硬件設(shè)備,沒(méi)有Nexus、pixel設(shè)備相關(guān)特征,更能提高脫殼的成功率。

圖片

E N D

圖片

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多