1. 程式人生 > 其它 >Android反編譯(逆向)教程

Android反編譯(逆向)教程

在網上搜索Android反編譯教程,搜出來的文章要麼是抄襲的,要麼是太過與簡單,經過自己的實踐和摸索,我在這裡記錄下如下反編譯一個Apk並修改一些資原始檔,比如App名字、啟動介面等,然後重新打包成apk,你可以參照這個教程修改遊戲裡的金幣(估計沒這麼簡單)。

工具

還是常用的三個工具:Apktool、dex2jar、jd-gui

Apktool

下載地址:Apktool

Linux下安裝教程:

1.   下載Linux wrapper script (滑鼠右鍵另存為apktool)

2.   從這裡下載最新版的apktool

3.   把下載的Jar檔案重新命名為apktool.jar

4.   把兩個檔案(apktool.jar & apktool)移動到/usr/local/bin (需要root許可權),使用chmod +x新增執行許可權

5.   現在可以通過命令列來執行apktool了

使用方法

使用方式:
1.反編譯

1
apktool d test.apk

反編譯後在home目錄下生成了一個資料夾,各個檔案簡單介紹如下:

apktool.yml: apk屬性.
AndroidManifest.xml: 清單檔案, 非二進位制.
original: 原始資料, 應用的二進位制清單和簽名.
res: 資原始檔.
smali: dex解析的程式碼.smali是dex虛擬機器的解析格式,在 dex2jar中,也包含smali格式的轉換.

開啟AndroidManifest檔案,
可以看到app_name和app的圖示:

1
android:icon="@drawable/icon_meetyou" android:label="@string/app_name"

接下來我們修改res/values/strings.xml下app_name的內容,並替換app圖示
2.重新打包成apk

1
apktool b test

打包後在dist資料夾下生成新的apk檔案

dex2jar

dex2jar是dex轉換為jar的工具,很多人不會看smali檔案,還是看java類檔案比較舒服,這個時候可以藉助這個工具來轉成java程式碼。
下載地址:dex2jar

使用

從Apk中解壓出class.dex,使用dex2jar進行原始碼解析,在當前目錄生成classes.dex.dex2jar.jar。
轉換過程中, 如果發生記憶體不夠, 修改 d2j_invoke.sh 的虛擬機器配置.

1
java -Xms512m -Xmx1024m -classpath "${_classpath}" "$@"

接下來使用JD-GUI開啟jar包,下載地址:jd-gui
其他工具

android killer

集成了上面幾個工具,並添加了一些功能
下載地址:androidkiller

ClassyShark

下載地址:github

ClassyShark是一款可以檢視Android可執行檔案的瀏覽工具,支援.dex, .aar, .so, .apk, .jar, .class, .xml 等檔案格式,分析裡面的內容包括classes.dex檔案,包、方法數量、類、字串、使用的NativeLibrary等。

使用方法

1.開啟apk檔案java -jar ClassyShark.jar -open 
2.將生成的所有資料匯出到文字檔案裡java -jar ClassyShark.jar -dump 
3.將指定類生成的檔案匯出到文字檔案裡java -jar ClassyShark.jar -dump 
4.開啟ClassyShark,在GUI介面展示某特定的類
5.java -jar ClassyShark.jar -open 
6.檢測APKjava -jar ClassyShark.jar -inspect 
7.匯出所有的字串 java -jar ClassyShark.jar -stringdump

和其他的工具不同,ClassyShark通過分析App的專案結構和引用庫的資訊,我們大致掌握了該專案的架構,一些開發中的經驗和不足,拓寬下開發視野,發現一些好用的開源庫,增強我們的武器,這些都是我們在開發中可以借鑑的東西。