Android反編譯apk逆向分析
Android反編譯apk
反編譯、逆向
反編譯 高階語言源程式經過 編譯 變成可執行檔案,反編譯就是逆過程。
但是通常不能把可執行檔案變成高階語言原始碼,只能轉換成彙編程式。
計算機軟體反向工程(Reversepengineering)也稱為計算機軟體還原工程,是指通過對他人軟體的目標程式(可執行程式)進行“逆向分析、研究”工作,以推匯出他人的軟體產品所使用的思路、原理、結構、演算法、處理過程、執行方法等設計要素,作為自己開發軟體時的參考,或者直接用於自己的軟體產品中。
反編譯是一個複雜的過程,所以越是高階語言,就越難於反編譯,但目前還是有許許多多的反編譯軟體:
VB: VBExplorer ;只能反編譯介面影象,好像程式碼不能完全反編譯
JAVA: JAD ;java的反編譯比較常見,所以反編譯比較完全
C++ : eXeScope
Dephi: DEDE
軟體下載地址
我們對Android apk檔案操作,準備工具
共需要四個小軟體
- dex2jar:將dex轉化成jar http://sourceforge.net/projects/dex2jar/
- JD-GUI : 反編譯jar中的原始碼 http://jd.benow.ca/
- apktool.jar http://ibotpeaches.github.io/Apktool/
- apktool-install-windows-r05-ibot.tar(這是所有的apktool檔案apktool放在同一個資料夾) https://pan.baidu.com/s/1faOUJ-mr2_0DuI1lpWSkVg
1.獲取dex
將demo.apk修改後綴為demo.zip(ren命令或者屬性直接修改後綴)並解壓。得到以下檔案:
2.反編譯dex
3.解壓dex2jar至指定目錄,開啟cmd至dex2jar目錄,執行命令 dex2jar.bat 目錄\classes.dex(有些版本中命令不是dex2jar.bat,而是d2j-dex2jar.bat),如圖:
可以看到在dex2jar的目錄下生了一個檔案classes-dex2jar.jar
4.反編譯jar檔案,使用JD-GUI檢視原始碼:
解壓JD-GUI檔案,開啟JD-GUI.exe,將上一步生成的classes-dex2jar.jar檔案拖動至JD-GUI視窗,可以看到如下圖,程式碼已經可以檢視
反編譯xml資原始檔
4.使用apkTool反編譯apk檔案獲取xml
原始碼可以查看了,但是xml檔案開啟還是亂碼,使用另外兩個工具可以反編譯xml檔案。
將工具中的apktool-install-windows解壓,與apktool.jar存放至同一目錄,如圖:
apktool目錄下執行命令:apktool d [-s] -f <apk路徑> -o <檔案輸出目錄>,如下:
demo2資料夾中生成的檔案如下:
打來AndroidManifest.xml或者res中的xml檔案,就不會亂碼啦。
注意事項:
路徑中最好不要有中文、空格和特殊的符號。
工具的版本不用可能會有微小的差異,需要自已辨別。apktool百度網片連線各個版本都有。
有些apk使用了proguard,畢竟大家都不想自己的東西隨便被人拿走,這種apk並不能完全被反編譯,反編譯出來後的程式碼如圖:
可以看到程式碼中的包名、類名、方法名都變成了a、b、c等,比較影響閱讀。
常見問題:
apkTool報錯 : Error: Unable to access jarfile \xx\apktool.jar
確保命令中的路徑正確,最好無中文和空格
確保檔案中夾中包含apktool.jar (即使是apktool2.0.jar也要改成apktool.jar)
Input file was not found or was not readable.
通常是apktool版本問題,如果你使用的命令是apktool d <apk路徑> <輸出目錄>,
請試一下apktool d [-s] -f <apk路徑> -o <輸出目錄>
Destination directory (C:\Users\user\a) already exists. Use -f switch if you want to overwrite it.
根據提示可以知道使用 -f 覆蓋已存在的目錄,也可以指定其他目錄。
Exception in thread “main” brut.androlib.AndrolibException: Could not decode ars c fil……….
apktool版本過低,升級即可。
書到用時方恨少,紙上得來終覺淺!共同進步!