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

jen*_*nzz 15 android decompiling reverse-engineering proguard apk

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

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

到目前为止我做了什么?

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

  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) { ... }
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 4

您要查找的所有内容都在mapping.txt 文件中,但我从未见过可以逆转这一切的工具。Proguard 执行的一些混淆不仅仅是简单地重命名方法和变量,因此您很可能无法执行您想要执行的操作。Proguard 下载附带的 retrace.jar 可能会让您更进一步,但我很确定您必须将其与堆栈跟踪文件一起使用。