Android逆向(反編譯一個APK)

一、反編譯未加固的apk

1、反編譯用到的工具

apktool:資源文件獲取,可以提取出圖片文件和布局文件進行使用查看
dex2jar:將apk反編譯成java源碼(classes.dex轉化成jar文件)
jd-gui:查看APK中classes.dex轉化成出的jar文件,即源碼文件

2、使用apktool反編譯資源文件和Manifest文件

為了方便操作,首先將下載好的3個工具統一放到1個文件夾中


image.png

將gui和dex2jar分別解壓到當前文件夾


image.png

使用apktool反編譯apk得到圖片、xml、maifest等文件
運行CMD.exe,進入Demo.apk路徑下
運行apktool對apk進行反編譯
使用如下命令將Demo.apk反編譯到【Demo】文件夾下:

java -jar apktool_2.4.0.jar d -f Demo.apk -o Demo

打開Demo文件,就可以看到反編譯后生成的文件


image.png

這時候可以看到【res】和Manifest文件了;

3、使用dex2jar反編譯java源碼

將Demo.apk直接修改后綴,改為Demo.zip,并解壓
解壓后的文件夾中,classes.dex 就是java源碼打包后的文件


image.png

將命令行定位到dex2jar.bat所在目錄
使用命令行:

d2j-dex2jar classes.dex

會生成classes-dex2jar文件,該文件就是反編譯后的java源碼文件


image.png

4、使用gui查看反編譯后的java源碼

雙擊jd-gui.exe,運行gui,


image.png

選擇剛剛生成的classes-dex2jar,打開后就可以看到源碼(圖中的Demo為了容易閱讀沒有加混淆,正常上線的應用會加混淆來加大閱讀難度)


image.png

至此,一個沒有加殼的apk已經被反編譯完成了,但是實際工作中,上線的apk包大多數都會進行加固,有些應用市場甚至后要求加固,例如360,應用寶等,下面會介紹一中常見的脫殼技術

二、脫殼

加固后的apk在通過以上的反編譯流程后,無法得到正常的java源碼,如下圖


未加固.png

360加固保.png

樂加固.png

從上圖可以看出,經過加固后的apk,通過常規方法反編譯無法獲取到源碼。

1、脫殼用到的工具

FDex2 :通過Hook ClassLoader的loadClass方法,反射調用getDex方法取得Dex(com.android.dex.Dex類對象),再將里面的dex寫出
VirtualXposed:無需root手機即可使用的xp框架

2、脫殼

Step1、將 【VirtualXposed】、【FDex2】和需要脫殼的apk都安裝到手機上
Step2、啟動【VirtualXposed】,并在【VirtualXposed】中安裝【FDex2】:


image

Step3、在【VirtualXposed】中激活【FDex2】:


image

Step4、在【VirtualXposed】中安裝要脫殼的應用,方法和Step2一樣。
Step5:啟動【VirtualXposed】中的F【Dex2】,并配置要脫殼的應用。
image.png

Step6:在【VirtualXposed】中運行要脫殼的應用。
Step7:在上【VirtualXposed】安裝文件管理器,方便將生成的dex文件導出
在【VirtualXposed】選中【高級設置】


image.png

選中【文件管理】,會提示安裝【Amaze】文件管理器
image.png

Step8:查看脫殼后的dex文件,打開【Amaze】,選中【Private Storage】,定位到FDex2設置的dex輸出路徑下,可以看到脫殼后的dex文件
image.png

image.png

Step9:將dex文件導出:長按dex文件,點擊頂部的復制按鈕,然后回到選中【External Storage】并選擇一個路徑,點擊頂部的粘貼按鈕,將文件粘貼到外部存儲,這時,在手機自帶的文件管理器中就可以找到剛剛的dex文件了
image.png

image.png

image.png

Step10:通過dex2jar對脫殼的dex文件進行反編譯,得到的3個dex文件中,有的是無用的文件,可以依次打開看看,最后可以看到,脫殼后的dex文件被成功反編譯后


image.png

至此,脫殼完成

源代碼和相關工具類已上傳碼云
https://gitee.com/xiaobug/XpDemo
https://gitee.com/xiaobug/reverse_tool

參考鏈接,感謝作者的無私奉獻
1、APK反編譯
2、Android APK脫殼--騰訊樂固、360加固一鍵脫殼
3、【Xposed模塊開發入門】
4、Xposed 熱更新(干貨,建議收藏)
5、android apk編譯打包過程
6、Android工程師,如何簡單高效的學會smali語法
7、使用baksmali及smali修改apk并打包
8、MT管理器
9、Oo0代碼混淆實現方法
10、修改AndroidStudio混淆配置文件

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。