2016-03-27 115 views
5

這聽起來可疑,但我需要去混淆我自己的應用程序。前段時間我發佈我的應用程序,我用Proguard混淆了。不幸的是,我沒有保存該版本的應用程序,並改變了很多代碼。如何使用Proguard生成的mapping.txt去混淆jar文件?

現在我需要該舊版本的代碼。 我還有一個由Proguard生成的mapping.txt文件。

我已經將classes.dex文件轉換爲jar(使用dex2jar工具),現在我需要根據mapping.txt對其進行反混淆處理。有什麼工具可以幫助我嗎?也許Proguard本身?

UPD。我需要一個可以自動重命名所有類,函數等的工具,所以我不必手動完成。謝謝

+0

這可能是不可能的。編譯應用程序後,代碼已被編譯器「模糊處理」。您再次使用Proguard對應用程序進行混淆的情況,即雙重混淆。可能有一種方法可以對應用程序進行反混淆和反編譯。我建議你在下次編碼之前保存和備份任何東西。 – mob41

+0

這對您現在沒有幫助,但爲了避免將來出現此類問題,請使用**版本控制系統**(VCS)。 – F43nd1r

回答

8

如果你有映射,那麼你可以得到每一個類,字段和方法名稱。你可以使用java-asm(一個字節碼修改庫)重新映射類和成員名稱。大部分工作將更新成員描述符。

我爲自己做了一個,花了大概一天時間才能可靠地工作。

編輯:這不是完美的,但它非常接近。 LinkScreenshot of the GUI給它一個程序化的jar文件,映射,它會重命名所有可以找到的。有幾個問題,但只是看它應該完成這項工作的來源。只需將它生成的jar(FileName +「-Re.jar」)轉儲到反編譯器,如Luyten/JD-GUI。此外,文件輸入只能通過按鈕進行更改。文本框僅用於視覺反饋/確認。

編輯2:修正了在給定的jar中不存在映射中的類輸入時發生的NPE。

編輯3:修復了很多導致方法未被重命名的問題。

編輯4:將已編譯的jar上傳到github (發佈,在壓縮文件中它在映射util中),增加了對多種映射類型的支持。

+0

這看起來像我想要的東西,不幸的是,當我按下「撤消」按鈕時,我得到NPE: * java.lang.NullPointerException at me.lpk.mapping.MappedClass。 (MappedClass.java:38) 在me.lpk.mapping.ProguardLoader.readClass(ProguardLoader.java:121) 在me.lpk.mapping.ProguardLoader.read(ProguardLoader.java:61) 在me.lpk。在me.lpk.mapping.MappingGen.mappingsFromProguard(MappingGen.java:49) at me.lpk.ReProguard $ 4.actionPerformed(ReProguard.java:123) .. 。* – user2758776

+0

看起來像扔了,因爲它嘗試加載的類名不存在於罐子裏。重新編寫了ProguardLoader類來檢查這一點。如果該類不存在於該jar中,則該類的映射將被忽略。重新加載修復工具。 –

+0

感謝您的努力,但我仍然得到NPE: java.lang.NullPointerException at me.lpk.mapping.MappedClass。 (MappedClass.java:38) 在me.lpk.mapping.ProguardLoader.readClass(ProguardLoader.java:126) 在me.lpk.mapping.ProguardLoader.read(ProguardLoader.java:61) 在me.lpk。 mapping.ProguardLoader.read(ProguardLoader.java:41) 在me.lpk.mapping.MappingGen.mappingsFromProguard(MappingGen.java:49) 在me.lpk.ReProguard $ 4.actionPerformed(ReProguard.java:123) 也許你可以與我分享你的工具的源代碼?謝謝! – user2758776

2

我建議根據above answer以及Enigma的建議使用proguard工具。針對您的問題的解決方案不是非常簡單,您需要使用可用工具的組合來解決問題。

+0

除了Proguard之外,我還使它適用於Engima映射。但是我沒有編譯Enigma GUI激活的版本。源是在回購:但是:https://github.com/LPK-Matt/SkidSuite2/blob/master/SkidReob/src/me/lpk/gui/windows/mapping/WindowEnigma.java –

+0

@DankVader該網址給404 – beppe9000

+0

@ beppe9000具體文件在提交中被刪除,但回購仍然存在。 https://github.com/LPK-Matt/SkidSuite2/releases自從發表評論以來,它已被編譯並置於發佈版本中。 –