Android安全–一次簡單的脫殼Dump dex實踐

這篇脫殼是參考別人自己進行的一次簡單的實踐,主要是爲了瞭解脫殼的流程以及工具的使用。

下面直接進入正題吧:

例子下載地址:

鏈接: http://pan.baidu.com/s/1c08Ufeg 密碼: n8dc

首先把apk後綴改成.zip打開,發現dex文件只有1.23kb,所以真正的代碼肯定不在這裏,而是在運行中解密出來動態加載的。

話不多說,直接上工具,首先找到IDA目錄dbgsrv下面的android_server文件,然後push到手機上面,然後加上可執行權限,再運行。如圖所示:

2015-07-30_125928

運行後在端口23946端口監聽。

安裝apk文件。

2015-07-30_125641

端口轉發,讓IDA可以連接本地端口進行遠程調試。

image

以調試模式啓動程序:

adb shell am start –D -n 包名/包名+類名

程序的入口類可以從每個應用的AndroidManifest.xml的文件中得到,AndroidManifest.xml文件可以使用apktool工具反編譯得到。

image

然後打開IDA,attach要調試的進程:

2015-07-30_130432

hostname設爲本機127.0.0.1

2015-07-30_130523

2015-07-30_130459

找到應用的進行,並記下進程號:

2015-07-30_130646

進程號爲2696,使用 forward jdwp:<pid> 轉換端口以連接到指定的 JDWP 進程。

使用jdb附加調試應用程序。

2015-07-30_131010

然後找到程序加載的模塊libdvm.so,找到其中的函dvmdexfileopenpartialPKviPP6DvmDex,在這個函數下斷點。

2015-07-30_093446

2015-07-30_093538

2015-07-30_093556

爲什麼要在這個函數下斷點,因爲這個函數是加載dex文件的,R0就是加載的dex文件的地址。

然後點擊IDA的繼續,程序便會斷在這個函數上面。

2015-07-30_112539

這時查看R0的值,然後顯示其內存如下:

2015-07-30_112954

2015-07-30_113029

我們看到了dex文件的標誌。

然後打開idc腳本,修改dump的內存起始地址和結束地址,起始地址就是R0的值,結束地址就是R0加上dex文件的大小,然dex文件的大小在dex header的0×20處,也就是0xFAEB4。

2015-07-30_113131

2015-07-30_113545

點擊run,之後會在D盤下面生成一個1M左右的dex文件,這就是我們dump出來的dex文件。

2015-07-30_114119

使用dex2jar轉成jar文件,再使用jd-gui.exe打開,得到程序代碼:

2015-07-30_124918

也可以把dex文件替換回去,打包運行。

 

就是一個簡單的例子,也是爲了讓自己加深印象,熟悉工具的使用,希望大家能夠自動手動脫下殼~

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