2013-02-09 111 views
15

不幸的是,我丟失了我使用ProGuard進行混淆處理的其中一個應用程序的源代碼。
我仍然有.apk文件,這是由ProGuard的生成一些配置文件:如何反向工程/反編譯使用ProGuard混淆的Android APK?

  1. dump.txt
  2. mapping.txt
  3. seeds.txt
  4. usage.txt

我有什麼迄今所做?使用apktool

  1. 解碼的資源文件。
    耶,我已經得到了回來!

  2. 提取.apk文件並使用dex2jarclasses.dex文件轉換爲.jar文件。

如果我現在使用JD-Gui查看源代碼(.jar文件),我會看到我的模糊代碼。就像這樣:

class c { 
    TextView a; 
    TextView b; 
    TextView c; 
    TextView d; 
    CheckBox e; 
} 

protected List a(Uri[] paramArrayOfUri) { ... } 

protected void a(List paramList) { ... } 

另外一些循環看起來有點奇怪。我不寫無限循環:

while (true) { 
    if (!localIterator.hasNext()) 
     return localArrayList; 
    ProviderInfo[] arrayOfProviderInfo = ((PackageInfo)localIterator.next()).providers; 
    if (arrayOfProviderInfo == null) 
     continue; 
    int i = arrayOfProviderInfo.length; 
} 

是否有可能混淆的代碼重新映射到使用任何的ProGuard的.txt文件我原來的源代碼?我想看看我自己的變量名稱/方法簽名。
或者這些文件只能用於跟蹤崩潰報告堆棧跟蹤嗎?

回答

3

您正在尋找的所有東西都在mapping.txt文件中,但我從來沒有見過一種能夠扭轉這一切的工具。 Proguard執行的一些混淆不僅僅是方法和變量的簡單重命名,所以你很可能無法做你想做的事情。使用Proguard下載附帶的retrace.jar可能會讓你更進一步,但我確信你必須將它用於堆棧跟蹤文件。