這篇脫殼是參考別人自己進行的一次簡單的實踐,主要是爲了瞭解脫殼的流程以及工具的使用。
下面直接進入正題吧:
例子下載地址:
鏈接: http://pan.baidu.com/s/1c08Ufeg 密碼: n8dc
首先把apk後綴改成.zip打開,發現dex文件只有1.23kb,所以真正的代碼肯定不在這裏,而是在運行中解密出來動態加載的。
話不多說,直接上工具,首先找到IDA目錄dbgsrv下面的android_server文件,然後push到手機上面,然後加上可執行權限,再運行。如圖所示:
運行後在端口23946端口監聽。
安裝apk文件。
端口轉發,讓IDA可以連接本地端口進行遠程調試。
以調試模式啓動程序:
adb shell am start –D -n 包名/包名+類名
程序的入口類可以從每個應用的AndroidManifest.xml的文件中得到,AndroidManifest.xml文件可以使用apktool工具反編譯得到。
然後打開IDA,attach要調試的進程:
hostname設爲本機127.0.0.1
找到應用的進行,並記下進程號:
進程號爲2696,使用 forward jdwp:<pid> 轉換端口以連接到指定的 JDWP 進程。
使用jdb附加調試應用程序。
然後找到程序加載的模塊libdvm.so,找到其中的函dvmdexfileopenpartialPKviPP6DvmDex,在這個函數下斷點。
爲什麼要在這個函數下斷點,因爲這個函數是加載dex文件的,R0就是加載的dex文件的地址。
然後點擊IDA的繼續,程序便會斷在這個函數上面。
這時查看R0的值,然後顯示其內存如下:
我們看到了dex文件的標誌。
然後打開idc腳本,修改dump的內存起始地址和結束地址,起始地址就是R0的值,結束地址就是R0加上dex文件的大小,然dex文件的大小在dex header的0×20處,也就是0xFAEB4。
點擊run,之後會在D盤下面生成一個1M左右的dex文件,這就是我們dump出來的dex文件。
使用dex2jar轉成jar文件,再使用jd-gui.exe打開,得到程序代碼:
也可以把dex文件替換回去,打包運行。
就是一個簡單的例子,也是爲了讓自己加深印象,熟悉工具的使用,希望大家能夠自動手動脫下殼~