Android逆向進階—— 脫殼的奧義(基ART模式下的dump)


 

本文作者:i春秋作家HAI_ZHU

 0×00 前言

       市面上的資料大多都是基於Dalvik模式的dump,所以這此准備搞一個ART模式下的dump。HAI_的使用手冊(各種好東西)

      Dalvik模式是Android 4.4及其以下采用的模式,之后到了Android 5.0 之后就是ART模式,關於這兩個模式的詳細內容,請自行百度,如果在文章看不來的地方,可以翻翻之前的文章。如果有問題也可以私聊我。

廢話不多說,直接上操作。

內容demo 動態 dump 出 dex文件

環境說明

1.系統 小米 9.0
2.ida 7.0

0×01 demo 動態 dump 出 dex文件

1.啟動ida 端口監聽

1.1啟動Android_server 服務

圖片.png

1.2端口轉發

圖片.png

1.3軟件進入調試模式

圖片.png

2.ida 下斷

2.1 attach  附加進程

圖片.png

2.2 斷三項

圖片.png

2.3 選擇進程

圖片.png

2.4 打開Modules

搜索art

圖片.png

PS:小知識

Android 4.4版本之前 系統函數在libdvm.so

Android 5.0之后 系統函數在libart.so

2.5 打開Openmemory()函數

在libart.so中搜索Openmemory函數並且跟進去。

圖片.png

PS:小知識

一般來說,系統dex都會在這個函數中進行加載,但是會出現一個問題,后面說。

2.6 下斷點

圖片.png

3.運行程序到下斷處

3.1 jdb轉發運行程序

圖片.png

3.2 查看IDA運行

成功下斷,並且運行到我們下斷的地方。

圖片.png

3.3 查看 dex的位置

打開寄存器窗口,可以看到R1就是我們的dex

圖片.png

然后在Hex窗口打開R1。

圖片.png

很明顯就看到了dex文件的二進制結構。如果不明白可以看看之前的dex文件分析。

3.4 提取關鍵信息

第一個關鍵信息:地址偏移:0xF35CA328

圖片.png

第二個關鍵信息:文件偏移:70 35 01 00,轉換一下就是 0×00013570

圖片.png

使用16進制加法器進行相加,F35DD898

圖片.png

4. dump

4.1 使用腳本進行dump

static main(void){    auto fp, begin, end, dexbyte;    //打開或創建一個文件    fp = fopen(“d:\\dump.dex”, “wb”);    //dex基址    begin =  0xF34C6320;    //dex基址 + dex文件大小end = begin + 0×00013570;    for ( dexbyte = begin; dexbyte < end;     dexbyte ++ ){//按字節將其dump到本地文件中fputc(Byte(dexbyte), fp);        }}

4.2 腳本dump run

腳本填寫好了之后,點擊run即可。

圖片.png

4.3 成功dump

圖片.png

0×02 后續

這里dump出來的dex還是和原來的dex有一些區別的,要進行一些修復才可以。關於修復的內容還在探討中,如果有大佬路過指教一二,感激不盡。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM