Android dex的加載流程以及加固脫殼時機點簡單總結

原文鏈接:https://blog.csdn.net/feibabeibei_beibei/article/details/77161743

1.Dex文件優化與驗證:
 把dex文件轉化爲odex的過程,填補一些加載依賴的類。這裏存在一代脫殼時機點,比如早期的愛加密在dvmdexfileopen函數下斷點。
 
2.Dex文件解析:
將優化後得dex文件(也就是odex文件)通過mmap映射到內存中,並通過mprotect修改它的映射內存爲只讀權限,映射爲只讀的這塊dex數據中的內容全部提取到DexFile這個數據結構中去,然後開始解析dex文件。
這裏存在二代脫殼的時機點:在dvmDexFileOpenFromFd下斷點,比如百度加固,參考鏈接:http://bbs.pediy.com/thread-218891.htm
或者在dexFileParse下斷點。


3.Dex的類加載過程:
主要是完成整個類的加載過程,返回一個ClassObject結構體。
這裏存在着第三代的脫殼時機點:比如在dvmDefineClass()類加載的時候,進行主動的類加載並完成重構然後進行dump,可以通過HOOK這個關鍵函數或者patch系統源碼來完成。


4.實際指令執行:
主要尋找對應的類方法進行實際的指令運行解釋。
這裏要進行第四代加固的話也就是目前比較熱的VMP,抽取指令,變形,映射然後進行自解釋。


總結:
其實可以看到加固和脫殼是相對應的,加固從修改早期的上層系統函數到目前比較火熱的代碼抽取自解釋,也可以說是從整體加解密到部分加解密到虛擬解釋的過程,都是從上層到底層的一個過程,越往底層加固的效果會好一些,但是隨之帶來的兼容性問題可能就比較大。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章