【Android 逆向】Dalvik 函数抽取加壳 ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )
文章目錄
- 前言
- 一、Dalvik 下的函數指令抽取與恢復
- 二、dex 函數指令恢復時機點
- 1、dex 函數指令恢復
- 2、Android 源碼中搜索 dexFindClass 函數
- 3、類加載流程 : 加載、鏈接、初始化
前言
函數抽取 加殼 , 是 二代殼 技術 ;
一、Dalvik 下的函數指令抽取與恢復
函數指令 抽取 : 進行函數抽取加殼 , 首先要熟悉 dex 文件的結構 , 需要定位 dex 字節碼文件中 , 函數指令 的偏移地址 ; 將 dex 文件中的函數指令 , 先抽取出來 ;
- 參考博客 : Android中實現「類方法指令抽取方式」加固方案原理解析 , 作者 姜維 , 同時也是《Android應用安全防護和逆向分析》 作者 ;
函數指令恢復 : 可以選擇在 下面的 222 個時間點 , 恢復函數指令 ;
- 類加載之前恢復 : 在類加載到內存之前 , 將之前抽取出來的指令 恢復 回去 ; ( 比較簡單 ) ;
- 參考博客 : Android中實現「類方法指令抽取方式」加固方案原理解析 , 作者 姜維 , 同時也是《Android應用安全防護和逆向分析》 作者 ;
- 運行時恢復 : 函數運行時 , 通過 HOOK 修改運行時的函數的指令邏輯 ;
- 參考博客 : Android免Root權限通過Hook系統函數修改程序運行時內存指令邏輯 , 作者 姜維 , 同時也是《Android應用安全防護和逆向分析》 作者 ;
- 推薦的 HOOK 框架 : https://github.com/ele7enxxh/Android-Inline-Hook , 注意該框架只支持 323232 位模式 ;
二、dex 函數指令恢復時機點
1、dex 函數指令恢復
將 dex 中的函數指令 , 抽取出來后 , 還要在合適的時機 , 將抽取出來的函數指令恢復回去 ;
如果要針對 函數 抽取 加殼 的 應用 , 進行 脫殼 , 需要 找準 函數指令 恢復的時機點 ;
在 《Android中實現「類方法指令抽取方式」加固方案原理解析 | 作者 : 姜維》 博客中 , 選擇的指令還原的時機是 native 層的 dexFindClass 時 ;
( 圖片來自 《Android中實現「類方法指令抽取方式」加固方案原理解析 | 作者 : 姜維》 博客 )
2、Android 源碼中搜索 dexFindClass 函數
在 Android 源碼路徑中 , 搜索上述 dexFindClass 函數 ;
進入 http://androidxref.com/4.4.4_r1 頁面 , 搜索 dexFindClass 函數 , 該函數定義在 dalvik/libdex/DexFile.cpp#dexFindClass 中 ;
3、類加載流程 : 加載、鏈接、初始化
這里在回顧下之前的 類加載 流程 博客 : 【Java 虛擬機原理】Java 類加載過程 ( 加載 | 連接 - 驗證 準備 解析 | 初始化 | 使用 | 卸載 ) , 類加載的過程涉及到 加載 , 鏈接 , 初始化 操作 ;
在上述類加載流程中 , 有很多時機點可以選擇 ;
總結
以上是生活随笔為你收集整理的【Android 逆向】Dalvik 函数抽取加壳 ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Git】IntelliJ IDEA 提
- 下一篇: 【Android 逆向】Dalvik 函