如何反向工程/反编译使用ProGuard混淆的Android APK?

不幸的是,我丢失了使用ProGuard进行混淆处理的其中一个应用程序的源代码。
我仍然有.apk文件和一些由ProGuard生成的configuration文件:

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

我到目前为止做了什么?

  1. 使用apktool解码资源文件。
    是的,我已经得到了回来!

  2. 提取.apk文件并使用dex2jar将classes.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文件将混淆代码重新映射到我的原始源代码? 我想看看我自己的variables名称/方法签名。
或者这些文件只能用于跟踪崩溃报告堆栈跟踪?

Solutions Collecting From Web of "如何反向工程/反编译使用ProGuard混淆的Android APK?"

你正在寻找的所有东西都在mapping.txt文件中,但是我从来没有见过一种可以扭转这一切的工具。 Proguard所做的一些迷惑不仅仅是方法和variables的简单重命名,所以你很可能无法做你正在做的事情。 使用Proguard下载的retrace.jar可能会让你更进一步,但是我相当肯定你必须使用堆栈跟踪文件。