Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android apk反編譯工具介紹

Android apk反編譯工具介紹

編輯:關於Android編程

首先apk不能被代碼混淆(或未經編譯優化),如果混淆了,反編譯出來的代號還是看不懂, 當然,在你沒反編譯出來之前,你也不知道有沒有混淆。
網上各種反編譯工具,眼花缭亂,本文是個人對這些工作做的一個簡單的梳理。 最靠譜也是最原始的方法就是用下面的三個工具:apktool + dex2jar + jd-gui 其他的工具大部分都是衍生自這三個工具,或者說對這三個工具的包裝。
apktool https://code.google.com/p/android-apktool/ 官方功能介紹 It is a tool for reverse engineering 3rd party, closed, binary Android apps. It can decode resources to nearly original form and rebuild them after making some modifications; it makes possible to debug smali code step by step. Also it makes working with app easier because of project-like files structure and automation of some repetitive tasks like building apk, etc. https://code.google.com/p/android-apktool/downloads/list //官方下載 反編譯apk,輸出資源文件和源碼的smali文件: \
用法:D:\apktool.bat F:\wZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcmtzcGFjZVx0bXBcdGVzdC5hcGsgRjp3b3Jrc3BhY2VcdG1wXG91dAoKPGJyPgoKCjxzdHJvbmc+ZGV4Mmphcjwvc3Ryb25nPgpodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZGV4Mmphci8gLy+52be9uabE3L3pydwKaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RleDJqYXIvZG93bmxvYWRzL2xpc3QgLy+52be9z8LU2AoKPHA+CmRleDJqYXIgY29udGFpbnMgZm9sbG93aW5nIGNvbXBtZW50PC9wPgo8b2w+CjxsaT5kZXgtcmVhZGVyIGlzIGRlc2lnbmVkIHRvIHJlYWQgdGhlIERhbHZpawogRXhlY3V0YWJsZSAoLmRleC8ub2RleCkgZm9ybWF0LiBJdCBoYXMgYSBsaWdodCB3ZWlnaHQgQVBJIHNpbWlsYXIgd2l0aCBBU00uIEFuCiBleGFtcGxlIGhlcmU8bGk+ZGV4LXRyYW5zbGF0b3IgaXMgZGVzaWduZWQgdG8gZG8gdGhlIGNvbnZlcnQgam9iLiBJdAogcmVhZHMgdGhlIGRleCBpbnN0cnVjdGlvbiB0byBkZXgtaXIgZm9ybWF0LCBhZnRlciBzb21lIG9wdGltaXplLCBjb252ZXJ0IHRvIEFTTSBmb3JtYXQuPGxpPmRleC1pciB1c2VkIGJ5IGRleC10cmFuc2xhdG9yLCBpcyBkZXNpZ25lZCB0byByZXByZXNlbnQgdGhlIGRleAogaW5zdHJ1Y3Rpb248bGk+ZGV4LXRvb2xzIHRvb2xzIHRvIHdvcmsgd2l0aCAuY2xhc3MgZmlsZXMuIGhlcmUgYXJlIGV4YW1wbGVzOgo8dWw+CjxsaT5Nb2RpZnkgYSBhcGs8bGk+RGVPYmZ1c2NhdGUgYSBqYXIKPGxpPmQyai1zbWFsaSA8Y29kZT5bVG8gYmUgcHVibGlzaGVkXTwvY29kZT4gZGlzYXNzZW1ibGUgZGV4IHRvIHNtYWxpIGZpbGVzIGFuZCBhc3NlbWJsZQogZGV4IGZyb20gc21hbGkgZmlsZXMuIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiB0byBzbWFsaS9iYWtzbWFsaSwgc2FtZSBzeW50YXgsIGJ1dCB3ZSBzdXBwb3J0IGVzY2FwZSBpbiB0eXBlIGRlc2Mg"Lcom/dex2jar\t\u1234;"
  • dex-writer [To be published] write dex same way as dex-reader.
    到官網下載最新的版本,直接反編譯apk,apk文件名不能包含中文名稱,新版本的aex2jar不用把apk換成zip解壓了,直接反編譯: 生產jar,然後用jd打開這個文件,在jd中可以查看代碼,也可以導出為java文件 使用 dex2jar 來生成 .jar 文件. dex2jar會在someApk.apk所在目錄下生成一個someApk_dex2jar.jar文件. 用法: linux sh /home/dex2jar-version/dex2jar.sh /home/someApk.apk windows C:\dex2jar-version\dex2jar.bat someApk.apk 注意:dex2jar只能生成jar文件,無法生成資源文件
    Levin:apktool和dex2jar都能生成smali代碼,兩者有何異同?個人認為,兩者都是將.dex文件即DalvikExecutable文件 反編譯成smali代碼,不同的是,apktool輸出的是一個一個.smali代碼文件,這種單個的.smali代碼文件, jd-gui打不開(我還沒找到什麼工具能打開),而dex2jar生成的為打包成*.jar格式的smali源碼包, 這種jar格式的smali源碼包,可以通過jd-gui轉換為java代碼。

    jd-gui http://jd.benow.ca///官方功能介紹、官方下載 Java Decompiler graphical UI JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reconstructed source code with the JD-GUI for instant access to methods and fields.

    前文說過,其他的工具大部分都是衍生自這三個工具,或者說對這三個工具的包裝,你可以看到其安裝目錄下有apktool等工具
    下面對這些工具做個羅列,和本人的使用心得: APKMultiTool:國外團隊開發,Console交互界面,用來反編譯apk,修改,並重新簽名打包。只能反編譯出資源文件,不能反編譯出java代碼
    ApkDec: android開發社區www.juapk.com開發,圖形界面,可以反編譯出資源文件盒smali的jar包, 目前只有ApkDec-Release-0.1,win32版本,無法在64為機器上運行。找官方團隊索要,無果。 Dodo APKTools:國產,只能反編譯出一個一個的smali文件 Smali2Java:國產,這款反編譯軟件比較牛逼,能過將smali文件高保真還原成java文件。比jd-gui更上一層樓 http://www.hensence.com/cn/smali2java/ //官方功能介紹、官方下載 smali2java是一個將smali代碼反編譯成java代碼的工具。
    什麼是smali?smali是將Android字節碼用可閱讀的字符串形式表現出來的一種語言,可以稱之為Android字節碼的反匯編語言。使用baksmali或apktool可以將Android應用程序包(apk或jar)反編譯為smali代碼。
    Levin:jd-gui可以反編譯smali代碼,說明smali代碼,類似於.class代碼。
    smali2java的反編譯過程是:dex字節碼-->smali代碼-->java代碼
    smali2java工具基於apktool v1.5.0(baksmali v1.3.4)生成的smali文件,依賴於smali文件中的代碼行數(.line關鍵字)和變量別名(.local關鍵字)等信息,可以最大程度還原原始的java代碼。還原出的java代碼將具有原始的變量命名,代碼的順序也與原始的java代碼保持一致。因此,本工具也具有局限性,僅適用於帶有行數和變量別名信息的smali文件(java編譯器的編譯選項可以在生成的字節碼中剔除這些信息)。

    總結:如果你即想反編譯出資源,又想反編譯出java源碼,本人推薦如下最優方式(省時省力,效果好): step1:使用apktool,反編譯出所有的資源文件 step2:使用Smali2Java反編譯出高保真的java代碼
    1. 上一頁:
    2. 下一頁:
    熱門文章
    閱讀排行版
    Copyright © Android教程網 All Rights Reserved