安卓逆向第八篇:脫殼原理分析

如果你是想直接用

FART github
直接裝完一用就行了。
本文完!

如果想繼續(xù)了解

注意點(diǎn):

1、多dex:

使用脫完之后,可能會有很多dex文件。fart脫出來的dex文件會伴隨著同名的txt文件。如果有想找的類名,可以grep類名到txt文件找,然后再找同名的dex。

2、打開異常:

可能是dex的開頭魔數(shù)故障
https://blog.csdn.net/sinat_18268881/article/details/55832757
這里有解釋魔數(shù)是什么。大概意思是用010Editor打開。開頭是dex.035開頭的。
問題的出現(xiàn)可能是魔數(shù)沒了,或者開頭不是dex.035開頭的,比如

image.png

圖里要把dex035前面的都刪了。
如果沒有魔數(shù)的,開頭全是00000000,就把別的有魔數(shù)的直接粘過來就行

image.png
擴(kuò)展一下

https://github.com/lasting-yang/frida_dump/blob/master/dump_dex.js
這里yang的脫殼代碼也是通過掃內(nèi)存然后通過魔數(shù)來判斷存不存的,當(dāng)然缺陷也很明顯,抹頭的dex dump不出來。

image.png

這個是葫蘆娃的frida脫殼
https://github.com/hluwa/frida-dexdump/blob/master/frida_dexdump/agent/agent.js
image.png

加殼原理:

安卓有很多類加載器:(主要看后兩個)

  • BootClassLoader:其他加載器父類。
  • PathClassLoader:默認(rèn)的類加載器。
  • DexClassLoader: 可以加載任意地方的類的加載器。所以也是插件化、熱修復(fù)、加殼的重點(diǎn)
  • InMemoryDexClassLoader: 這個是安卓8之后的內(nèi)存加載dex
    還有很多其他的。暫不考慮。用到再說。還有什么雙親委派機(jī)制能。不講那么細(xì)了。說多了不容易理解

這里因?yàn)槟軇討B(tài)加載類,只要?dú)S商能自定義DexClassLoader,然后在殼想用的時候加載就ojbk了。

幾代殼:

  • 一代殼:dex整體套起來了
  • 二代殼:類、函數(shù)啥的還在,里面代碼為空,比如:func main(){}
  • 三代殼:java的native化。代碼不dex,跑so里去了,主要兩類:vmp、dex2c

vmp、dex2c

開源代表作:
分辨:
  • 函數(shù)的 注冊地址相同 , 并且 函數(shù)邏輯相似 , 則使用的是 VMP 加殼 ;
  • 函數(shù)的 注冊地址不同 , 并且 函數(shù)邏輯不相似 , 則使用的是 Dex2C 加殼 ;
方法:

adb logcat | grep Acticity.onCreate
看一下每次切換Acticity。日志里FromJni:0X地址 看一下每次地址是否相同。

通用脫殼法:

因?yàn)閯偛盘岬搅薎nMemoryDexClassLoader和DexClassLoader
然后去源碼里看http://www.aospxref.com/android-8.1.0_r81

image.png

就像這樣 一層一層往上找,一直找到C代碼。找到這些。

一、InMemoryDexClassLoader 類加載器脫殼點(diǎn)總結(jié)
  1. dalvik_system_DexFile.cc#CreateSingleDexFileCookie
  2. dalvik_system_DexFile.cc#CreateDexFile
  3. dex_file.cc#DexFile::Open
  4. dex_file.cc#DexFile::OpenCommon
  5. dex_file.cc#DexFile::DexFile
二、ART 虛擬機(jī)下 DexClassLoader 類加載器脫殼點(diǎn)總結(jié)
  1. file_magic.cc#OpenAndReadMagic 函數(shù)
  2. dex_file.cc#DexFile::OpenCommon
  3. dex_file.cc#DexFile::DexFile

這兩種方式都有dex_file.cc#DexFile::OpenCommon和dex_file.cc#DexFile::DexFile

總結(jié):

加固廠商可能使用 InMemoryDexClassLoader 類加載器 , 也可能使用 DexClassLoader 類加載器 , 這里為了保證不管使用什么類加載器 , 都可以進(jìn)行脫殼 , 選擇 2個類加載器都有的脫殼點(diǎn) , 可以兼容兩種類加載器 ;這兩種方式都有dex_file.cc#DexFile::OpenCommon和dex_file.cc#DexFile::DexFile,就可以選擇他倆。把傳進(jìn)來的dex保存下來就ojbk了

修改系統(tǒng)源碼式的脫殼代碼編寫:↓

https://hanshuliang.blog.csdn.net/article/details/121964509?spm=1001.2014.3001.5502

找到上面說的那些時候還有一點(diǎn)提一下:

【Android 逆向】ART 函數(shù)抽取加殼 ( ART 下的函數(shù)抽取恢復(fù)時機(jī) | 禁用 dex2oat 機(jī)制源碼分析 )
這篇文章講的主要的點(diǎn)是art下的時候,Dalvik虛擬機(jī)下沒這么多事而且由于系統(tǒng)有點(diǎn)老這里就不談了。
首先它給app加殼了,用的時候總要恢復(fù)。找恢復(fù)的時機(jī)是個比較重要的點(diǎn)。art虛擬機(jī)為了讓app運(yùn)行的更快搞了個預(yù)編譯也就是dex2oat。
如文章所說

ART 下的函數(shù)抽取恢復(fù)時機(jī) :

  • 恢復(fù)抽取函數(shù)早于 oat 文件編譯 : 在 ART 虛擬機(jī)下 , 需要將 dex 文件編譯生成為 oat 文件 , 將 dex 文件中的 函數(shù)指令 抽取出來 , 必須 在 生成 oat 文件之前 , 將從 抽取的函數(shù)指令恢復(fù) ;
  • 禁用 dex2oat 機(jī)制 : 如果 禁用 dex2oat 的編譯過程 , 則 恢復(fù) 被抽取的 函數(shù)指令 , 不在受 該條件限制 , 不是必須在 dex2oat 之前恢復(fù) , 可以稍晚一些再恢復(fù)函數(shù)指令 ;

如果選擇第一種方案 , 在 dex2oat 之前進(jìn)行恢復(fù) , 這沒有任何意義 , dex2oat 編譯后 , 生成的 oat 文件是完整的 , 此時 可以 完整的將 oat 文件 dump 到 SD 卡中 , 基本等于沒有加固 , 還是一個一代殼 ;
因此 , 大部分加固廠商 , 選擇 禁用 dex2oat 機(jī)制 ; 這樣處于安全考慮 , 犧牲了應(yīng)用的運(yùn)行效率 ;
此人博客2021年12月12日--20日有多篇脫殼加殼詳細(xì)文章,感興趣可讀。

——————————————————
暫時更新此處,本周內(nèi)在此篇繼續(xù)更

參考文獻(xiàn):
https://blog.51cto.com/u_15101562/2622410

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內(nèi)容