1. 程式人生 > >Android反編譯apk逆向分析

Android反編譯apk逆向分析

Android反編譯apk

反編譯、逆向

反編譯 高階語言源程式經過 編譯 變成可執行檔案,反編譯就是逆過程。
  但是通常不能把可執行檔案變成高階語言原始碼,只能轉換成彙編程式。
  計算機軟體反向工程(Reversepengineering)也稱為計算機軟體還原工程,是指通過對他人軟體的目標程式(可執行程式)進行“逆向分析、研究”工作,以推匯出他人的軟體產品所使用的思路、原理、結構、演算法、處理過程、執行方法等設計要素,作為自己開發軟體時的參考,或者直接用於自己的軟體產品中。
  反編譯是一個複雜的過程,所以越是高階語言,就越難於反編譯,但目前還是有許許多多的反編譯軟體:
  VB: VBExplorer ;只能反編譯介面影象,好像程式碼不能完全反編譯
  JAVA: JAD ;java的反編譯比較常見,所以反編譯比較完全
  C++ : eXeScope
  Dephi: DEDE

軟體下載地址

我們對Android apk檔案操作,準備工具
共需要四個小軟體

1.獲取dex
將demo.apk修改後綴為demo.zip(ren命令或者屬性直接修改後綴)並解壓。得到以下檔案:
在這裡插入圖片描述

2.反編譯dex
L3FxXzMzNzIxMzIw,size_27,color_FFFFFF,t_70)
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版本過低,升級即可。

書到用時方恨少,紙上得來終覺淺!共同進步!