如何对使用ProGuard进行模糊处理的Android APK进行逆向工程/反编译?

How to reverse-engineer / decompile an Android APK which was obfuscated using ProGuard?

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

  • dump.txt
  • mapping.txt
  • seeds.txt
  • usage.txt
  • 到目前为止我做了什么?

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

  • 提取.apk文件并使用dex2jar将classes.dex文件转换为.jar文件。

  • 如果我现在使用JD-Gui查看源代码(.jar文件),我会看到我的混淆代码。 像这样的东西:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class c {
      TextView a;
      TextView b;
      TextView c;
      TextView d;
      CheckBox e;
    }

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

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

    还有一些循环看起来有点奇怪。 我不写无限循环:

    1
    2
    3
    4
    5
    6
    7
    8
    while (true) {
         if (!localIterator.hasNext())
            return localArrayList;
         ProviderInfo[] arrayOfProviderInfo = ((PackageInfo)localIterator.next()).providers;
         if (arrayOfProviderInfo == null)
            continue;
         int i = arrayOfProviderInfo.length;
    }

    是否可以使用任何ProGuard的.txt文件将混淆的代码重新映射到我的原始源代码? 我想看看我自己的变量名称/方法签名。
    或者这些文件只能用于跟踪崩溃报告堆栈跟踪?


    你正在寻找的一切都在mapping.txt文件中,但我从来没有见过一个可以逆转它的工具。 Proguard执行的一些混淆不仅仅是方法和变量的简单重命名,因此您很可能无法完成您正在尝试的操作。 Proguard下载附带的retrace.jar可能会让你更进一步,但我很确定你必须使用stacktrace文件。