Dalvik虛擬機(jī)和Art虛擬機(jī)下dump手機(jī)內(nèi)存中運(yùn)行的dex文件

首先是Dalvik虛擬機(jī)下的操作驾孔。

1赴肚、先將ida安裝目錄下的dbgsrv文件夾下的android_server文件push到手機(jī)里锈颗,因?yàn)槲疫@里用的是x86架構(gòu)的虛擬機(jī)(arm架構(gòu)的虛擬機(jī)簡(jiǎn)直太慢了)已亥,使用的是android_x86_server采蚀。如果是arm架構(gòu)的虛擬機(jī)或者手機(jī)則使用android_server疲牵。

dbgsrv文件夾內(nèi)安卓使用的文件


push到手機(jī)里

2、修改android_x86_server的權(quán)限榆鼠。

修改權(quán)限

3纲爸、開(kāi)啟android_x86_server服務(wù)并且使用adb forward命令進(jìn)行端口轉(zhuǎn)發(fā)。

開(kāi)啟服務(wù)
端口轉(zhuǎn)發(fā)

4妆够、使用adb shell pm list package -3命令獲取手機(jī)內(nèi)安裝的第三方應(yīng)用的包名(參數(shù)-3表示獲取第三方應(yīng)用)识啦,找到我們需要dump的應(yīng)用包名。

獲取應(yīng)用包名

5神妹、使用adb shell am start -D -n [包名]/.[MainActivity主入口]以調(diào)試模式開(kāi)啟app颓哮。

調(diào)試模式開(kāi)啟app

6、使用IDA新建一個(gè)空的工程鸵荠,選擇Debugger -> Attach下的選項(xiàng)進(jìn)行遠(yuǎn)程連接冕茅。

選擇Attach方式
默認(rèn)選項(xiàng)后確定
選擇程序

這里需要注意的是,如果不使用調(diào)試狀態(tài)下的手機(jī)如虛擬機(jī)、安裝有xpose的xinstall模塊的手機(jī)等姨伤,是無(wú)法在DDMS看到手機(jī)的應(yīng)用狀態(tài)哨坪,這時(shí)候需要將待調(diào)試應(yīng)用的進(jìn)程ID記錄下來(lái),如上圖的進(jìn)程ID為3193乍楚。

7当编、開(kāi)啟DDMS并選擇調(diào)試的應(yīng)用。

DDMS選擇待調(diào)試應(yīng)用

這里要注意的是徒溪,如果不使用虛擬機(jī)或者裝有xpose中的xinstaller模塊的話忿偷,DDMS是讀取不了數(shù)據(jù)的,上述步驟省略词渤,并且使用命令adb forward tcp:8700 jdwp:[進(jìn)程id] 進(jìn)行端口轉(zhuǎn)發(fā)牵舱,如上程序需使用adb forward tcp:8700 jdwp:3193。

8缺虐、使用命令jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700芜壁,之后在IDA使用F9鍵繼續(xù)執(zhí)行下一步,此時(shí)手機(jī)內(nèi)存中的信息即可全部加載到IDA里高氮。

jdb命令

9慧妄、進(jìn)入adb shell,使用ps命令獲取手機(jī)當(dāng)前的進(jìn)程信息剪芍,可以使用grep進(jìn)行信息的過(guò)濾,塞淹,獲取所需要dump出來(lái)的程序進(jìn)程id(如上步驟5,如果在IDA選擇需要連接程序時(shí)記錄了該程序的進(jìn)程id罪裹,則此步可以省略)饱普。

獲取進(jìn)程id

10、在adb shell里使用/proc/[進(jìn)程id]/maps獲取我們需要dump出來(lái)的dex文件所在內(nèi)存的地址状共。

獲取dex文件內(nèi)存地址

11套耕、在IDA的Hex view窗口使用G鍵跳轉(zhuǎn)內(nèi)存地址到剛剛獲得的dex文件內(nèi)存地址,根據(jù)標(biāo)識(shí)符看看是不是dex文件峡继。

IDA下驗(yàn)證地址是否正確

因?yàn)镈alvik虛擬機(jī)下對(duì)運(yùn)行的dex文件做了優(yōu)化冯袍,真正在內(nèi)存中運(yùn)行的是odex文件,如上文件頭為dey.036碾牌,雖然能看到有dex文件的文件頭dex.035康愤,但是dex文件的結(jié)構(gòu)被修改了,直接dump出dex文件可能需要修改校驗(yàn)碼等其他操作舶吗。

12征冷、進(jìn)入IDA的File -> script command進(jìn)行dump出dex文件的腳本編寫(xiě)。

ida腳本編寫(xiě)

寫(xiě)入如下腳本裤翩,并將odex文件的起始地址和結(jié)束地址资盅、文件存儲(chǔ)位置進(jìn)行相應(yīng)的更改调榄。

static main(void){

????auto fp, begin, end, dexbyte;

????fp = fopen("d:\\dump.dex", "wb");

????begin = 0x8ba9200;

????end = 0x8bd8d00;

????for ( dexbyte = begin; dexbyte < end; dexbyte ++ )

? ? ?{

????????fputc(Byte(dexbyte), fp);

????}

}


編寫(xiě)dump腳本

Run!:强浮每庆!

13、得到odex文件之后今穿,使用baksmali對(duì)odex文件進(jìn)行反編譯后再使用smali進(jìn)行編譯成dex文件缤灵,baksmali和smali下載地址點(diǎn)擊這里,我用的是2.2.2的版本蓝晒。

baksmali.jar反編譯

我在使用baksmali的時(shí)候遇到一個(gè)坑是缺少一些文件腮出,如下圖錯(cuò)誤。解決方法是將手機(jī)里的/system/framework/目錄下的所有文件都pull到電腦上芝薇。

缺少文件錯(cuò)誤

以上順利反編譯后胚嘲,得到一個(gè)文件夾,里面裝的就是dump出來(lái)dex文件的smali代碼洛二,通過(guò)使用與baksmali配套的smali.jar對(duì)smali文件夾進(jìn)行回編譯就得到dex文件了馋劈。

smali.jar回編譯

在Android6.0以上的Art虛擬機(jī)下。

dump出文件的步驟與上面的dalvik虛擬機(jī)下的步驟1-12是一致的晾嘶,不同的在于art虛擬機(jī)下dump出來(lái)的文件是oat文件妓雾,oat文件內(nèi)的dex文件能直接分離出來(lái)而不需要像odex文件那樣反編譯再回編譯。這里我用的是010editor進(jìn)行對(duì)oat文件內(nèi)提取dex文件垒迂。

1械姻、將oat文件拖到010editor里,搜索dex文件頭机断,使用ctrl + F鍵后選擇搜索text楷拳,輸入搜索的關(guān)鍵詞,因?yàn)椴荒芩阉鳂?biāo)點(diǎn)符號(hào)吏奸,所以我搜索的是035關(guān)鍵詞唯竹。有的oat文件可能會(huì)有多個(gè)dex文件,這就需要多搜索幾次了苦丁。

搜索dex文件位置

2、獲取dex文件的長(zhǎng)度物臂,了解dex文件格式的同學(xué)應(yīng)該知道旺拉,dex文件的長(zhǎng)度保存在dex文件的頭地址后第20位至第24位里(16進(jìn)制),如上圖中dex文件頭地址為0x26BC棵磷,加上20蛾狗,即0x26DC開(kāi)始的4位存的是dex文件的長(zhǎng)度,為0x1F09EC仪媒。

3沉桌、dex文件頭地址加上dex文件長(zhǎng)度后谢鹊,得到dex文件的尾地址,將dex頭地址至尾地址的內(nèi)容復(fù)制留凭,并在010editor新建一個(gè)文件將所得內(nèi)容拷貝過(guò)來(lái)保存為dex文件即可得到完整的dex文件佃扼。

如上為0x26BC + 0x1F09EC = 0x1F30A8,在010editor將頭尾地址所有內(nèi)容復(fù)制蔼夜。

復(fù)制dex文件內(nèi)容

在010editor新建文件兼耀,選擇Hex格式,將剛才復(fù)制的內(nèi)容拷貝過(guò)來(lái)求冷,可以看到下圖中文件的尾地址剛好是dex的文件長(zhǎng)度0x1F09EC瘤运,說(shuō)明文件完整,保存為dex文件后即可進(jìn)行分析匠题。

保存dex文件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拯坟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子韭山,更是在濱河造成了極大的恐慌郁季,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掠哥,死亡現(xiàn)場(chǎng)離奇詭異巩踏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)续搀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)塞琼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人禁舷,你說(shuō)我怎么就攤上這事彪杉。” “怎么了牵咙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵派近,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我洁桌,道長(zhǎng)渴丸,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任另凌,我火速辦了婚禮谱轨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吠谢。我一直安慰自己土童,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布工坊。 她就那樣靜靜地躺著献汗,像睡著了一般敢订。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上罢吃,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天楚午,我揣著相機(jī)與錄音,去河邊找鬼刃麸。 笑死醒叁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泊业。 我是一名探鬼主播把沼,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吁伺!你這毒婦竟也來(lái)了饮睬?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤篮奄,失蹤者是張志新(化名)和其女友劉穎捆愁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體窟却,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昼丑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夸赫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菩帝。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖茬腿,靈堂內(nèi)的尸體忽然破棺而出呼奢,到底是詐尸還是另有隱情,我是刑警寧澤切平,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布握础,位于F島的核電站,受9級(jí)特大地震影響悴品,放射性物質(zhì)發(fā)生泄漏禀综。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一苔严、第九天 我趴在偏房一處隱蔽的房頂上張望菇存。 院中可真熱鬧,春花似錦邦蜜、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贱迟。三九已至,卻和暖如春絮供,著一層夾襖步出監(jiān)牢的瞬間衣吠,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工壤靶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缚俏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓贮乳,卻偏偏與公主長(zhǎng)得像忧换,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子向拆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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

  • layout: wikititle: Android逆向分析筆記categories: Reverse_Engin...
    超哥__閱讀 10,701評(píng)論 1 17
  • 一亚茬,apk以進(jìn)程的形式運(yùn)行,進(jìn)程的創(chuàng)建是由zygote浓恳。 參考文章《深入理解Dalvik虛擬機(jī)- Android應(yīng)...
    Kevin_Junbaozi閱讀 2,846評(píng)論 0 12
  • 1. 序言 ? android在5.0開(kāi)始正式用art虛擬機(jī)取代了dalvik虛擬機(jī)刹缝,不同版本的art虛擬機(jī)差別很...
    jjlanbupt閱讀 4,870評(píng)論 10 16
  • 兩年前,過(guò)春節(jié)時(shí)的心路活動(dòng)記錄在QQ空間颈将,現(xiàn)在看來(lái)梢夯,并不陌生,十幾年的仇恨依然在延續(xù)晴圾,只恨當(dāng)時(shí)畏死……天真的把當(dāng)初...
    ZCAYUMI閱讀 192評(píng)論 0 0
  • 沉飲聊自適颂砸,放歌破愁絕。 當(dāng)日杜甫是這樣來(lái)緩解愁?lèi)灒?今日我讀你的詩(shī)來(lái)舒緩壓力疑务。
    和晏閱讀 136評(píng)論 0 0