Android中動態(tài)導(dǎo)出dex文件的方法是什么

1.啟動ida 端口監(jiān)聽

1.1啟動android_server 服務(wù)

Android中動態(tài)導(dǎo)出dex文件的方法是什么

1.2端口轉(zhuǎn)發(fā)

Android中動態(tài)導(dǎo)出dex文件的方法是什么

1.3軟件進(jìn)入調(diào)試模式

Android中動態(tài)導(dǎo)出dex文件的方法是什么

2.ida 下斷

2.1 attach??附加進(jìn)程

Android中動態(tài)導(dǎo)出dex文件的方法是什么

2.2 斷三項

Android中動態(tài)導(dǎo)出dex文件的方法是什么

2.3 選擇進(jìn)程

Android中動態(tài)導(dǎo)出dex文件的方法是什么

2.4 打開Modules

搜索art

Android中動態(tài)導(dǎo)出dex文件的方法是什么

PS:小知識

Android 4.4版本之前 系統(tǒng)函數(shù)在libdvm.so

Android 5.0之后 系統(tǒng)函數(shù)在libart.so

2.5 打開Openmemory()函數(shù)

在libart.so中搜索Openmemory函數(shù)并且跟進(jìn)去。

Android中動態(tài)導(dǎo)出dex文件的方法是什么

PS:小知識

一般來說,系統(tǒng)dex都會在這個函數(shù)中進(jìn)行加載,但是會出現(xiàn)一個問題,后面說。

2.6 下斷點

Android中動態(tài)導(dǎo)出dex文件的方法是什么

3.運行程序到下斷處

3.1 jdb轉(zhuǎn)發(fā)運行程序

Android中動態(tài)導(dǎo)出dex文件的方法是什么

3.2 查看IDA運行

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

Android中動態(tài)導(dǎo)出dex文件的方法是什么

3.3 查看 dex的位置

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

Android中動態(tài)導(dǎo)出dex文件的方法是什么

然后在Hex窗口打開R1。

Android中動態(tài)導(dǎo)出dex文件的方法是什么

很明顯就看到了dex文件的二進(jìn)制結(jié)構(gòu)。如果不明白可以看看之前的dex文件分析。

3.4 提取關(guān)鍵信息

第一個關(guān)鍵信息:地址偏移:0xF35CA328

Android中動態(tài)導(dǎo)出dex文件的方法是什么

第二個關(guān)鍵信息:文件偏移:70 35 01 00,轉(zhuǎn)換一下就是 0x00013570

Android中動態(tài)導(dǎo)出dex文件的方法是什么

使用16進(jìn)制加法器進(jìn)行相加,F(xiàn)35DD898

Android中動態(tài)導(dǎo)出dex文件的方法是什么

4. dump

4.1 使用腳本進(jìn)行dump

static main(void){? ? auto fp, begin, end, dexbyte;? ? //打開或創(chuàng)建一個文件? ? fp = fopen(“d:dump.dex”, “wb”);? ? //dex基址? ? begin =??0xF34C6320;? ? //dex基址 + dex文件大小end = begin + 0x00013570;? ? for ( dexbyte = begin; dexbyte

4.2 腳本dump run

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

Android中動態(tài)導(dǎo)出dex文件的方法是什么

4.3 成功dump

Android中動態(tài)導(dǎo)出dex文件的方法是什么

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊11 分享