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的專案結構和引用庫的資訊,我們大致掌握了該專案的架構,一些開發中的經驗和不足,拓寬下開發視野,發現一些好用的開源庫,增強我們的武器,這些都是我們在開發中可以借鑑的東西。