2011-04-07 83 views

回答

89

沒有,APK管理器反編譯.dex文件到.smali和二進制.xml人類可讀的XML。

序列(基於APK管理器4.9)是選擇包,然後反編譯它。如果您按1而不是9,那麼您只需將其解壓縮(僅在需要交換.png圖像時纔有用)。

有沒有工具可用於反編譯回.java文件,並且很可能它不會有任何工具。有一種替代方法,它使用dex2jar將dex文件轉換爲.class文件,然後使用jar反編譯器(例如免費的jd-gui)將純文本java。雖然這個過程並不是最優的,但它不會生成工作代碼,但它足夠體面以便能夠讀取它。

dex2jar:http://code.google.com/p/dex2jar/

JD-GUI:http://jd.benow.ca/

編輯:我所知道的是這裏的某個地方有在SO一個非常相似的答案的問題... decompiling DEX into Java sourcecode

+13

**對不起,您的意思是jd-gui _won't_ generate _working code _?**反編譯器應該生成工作代碼;如果不是,那麼我們並不是說反編譯器。你不這麼認爲嗎? – 2012-01-09 17:52:33

+0

所以如何將編輯後的文件(.java/.class/.smali/.jar)再次打包成apk文件..請幫助。 – 2012-04-13 12:51:18

+6

JD-GUI變得非常接近,但不夠接近。 – 2012-06-05 19:21:36

1

我第二次說。

Dex2jar將生成一個WORKING jar,您可以將其作爲項目源添加到您從apktool獲得的xmls中。

但是,JDGUI會生成.java文件,這些文件通常具有錯誤。

我猜測它與代碼混淆有關。

24

dex2jar有助於反編譯你的apk,但不是100%。 .smali文件會有一些問題。 Dex2jar無法將其轉換爲java。我知道一個應用程序,可以反編譯你的apk源文件,並沒有與.smali文件的問題。這裏是鏈接http://www.hensence.com/en/smali2java/

+1

請解釋,爲什麼我的回答是downvoted? – Daryn 2014-01-31 05:15:11

+0

我希望我會對此投反對票投反對票。鏈接的應用程序就像一個魅力。這必須是比dex2jar最簡單的選項。 – chedine 2014-03-14 18:42:09

+0

我無法保存反編譯的文件 – 2014-03-18 12:17:30

4

我的推薦是Virtuous Ten Studio。該工具是免費的,但他們建議捐款。它將所有必要的步驟(解壓APK,反編譯,反編譯等)合併爲一個易於使用的基於UI的導入過程。在五分鐘之內,您應該擁有Java源代碼,比找出上述工具之一的命令行選項要少。

將smali編譯爲Java是一個不精確的過程,特別是如果smali構件經歷了一個混淆器。你可以在網上找到幾個反編譯器,但其中只有一些仍然保留。有些會比別人給你更好的反編碼。閱讀「更好」,如「比較容易理解」。不要期望反向工程的Java代碼可以直接編譯出來。Virtuous Ten Studio附帶了多個免費的Java內置反編譯器,因此您可以輕鬆嘗試不同的反編譯器(「生成Java源代碼」步驟),查看哪一個可以爲您提供最佳結果,從而節省您自己查找這些反編譯器的時間,瞭解如何使用它們。其中有CFR,它是少數幾個免費且仍然保留的反編譯器之一。

作爲輸出,您會收到包含所有已反編譯的Java源代碼的文件夾結構。然後,您可以將其導入到IntelliJ IDEA或Eclipse中以進行進一步編輯,分析(例如,定義,查找用法)等。

+0

Christoph,Virtuous Ten Studio支持in-smali方法/類重構? – 2015-05-25 14:00:38

+7

你能說出你與善良的關係嗎? – Sirens 2015-08-16 16:50:17

+1

Virtous不能正確地將smali轉換爲java。給出錯誤,指出.java文件沒有找到它自己應該生成的地方。浪費時間 – 2015-08-18 13:50:05

22

有一個新的交叉。平臺(JAVA)和開源工具,使您能夠做到這一點,只是結賬https://bytecodeviewer.com

enter image description here

==== =====

編輯: 截至2017年4月,有一個由谷歌開發的新開源工具,意思是做我們一直在尋找的東西=>http://classyshark.com

+1

此工具在啓動時彈出'Java異常' – fnc12 2016-09-18 10:27:43

+0

啓動時Java異常的簡單解決方法是在命令行中使用jdk7運行:java -jar BytecodeViewer xyz罐'。爲確保您正在使用jdk7,請檢查'java -version'的輸出。 – denolk 2016-10-20 13:18:53

+0

Classyshark不輸出Java代碼。引用描述:「它可以可靠地瀏覽任何Android可執行文件並顯示重要信息,例如類接口和成員,數量和依賴關係。」 – 2018-01-31 06:22:59