Android 反編譯
Apk文件結構圖
1. 原理
反編譯的是Apk文件,所以需要知道Android打包的過程原理,以及Apk文件目錄,以及文件是怎麼生成的。
推薦兩篇文章
首先看一下基本的Apk結構目錄
- asses文件:原始資資源文件,存放原始的網頁,音頻等。
- lib:相關第三方的so文件。
- META-INF:簽名文。
- r文件:一般解壓後應該是res文件,包含佈局,圖片等信息。
- AndroidManifest.xml:全局配置文件。
- classes.dex類似文件:源碼編譯成class文件,在轉成jar文件,在yasuo壓縮成dex文件。dex文件可以直接運行在Android虛擬機上。
- resources.arsc:資源文件和資源id的映射關係。
經過解壓後的文件是經過打包處理的,無法閱讀。
所以需要相關工具進行反編譯,得到AndroidManifest.xml文件,res文件,java源碼。
反編譯相關工具
反編譯步驟
1.ApkTool拆包,得到AndroidManifest和res等資源
進入當前目錄,運行命令
apktool d guanwangbtn.apk
回車,會在當前面目錄生成一個guanwangbtn的文件夾。
這是我們可以得到可閱讀的AndroidManifest.xml文件,assets文件夾,res文件夾,smali類似文件夾。
- smali文件是反編譯出來的代碼,目錄結構和源代碼的package一模一樣,只是語言使用的是smali語言。
- original文件夾是原始的AndroidManifest.xml文件。
2.dex2jar反編譯dex文件,得到java源代碼
如果還想得到源代碼,工具dex2jar。
- 將壓縮得到的dex文件放進dex2jar-2.0文件夾中。
- 當前目錄,運行命令
d2j-dexjar.bat classes.dex
- 目錄會多出一個jar文件
3.jd-gui查看Java源代碼
下載工具,直接點擊打開,classes-dex2jar.jar拖入界面打開。