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

Posted

技术标签:

【中文标题】如何对使用 ProGuard 混淆的 Android APK 进行逆向工程/反编译?【英文标题】:How to reverse-engineer / decompile an Android APK which was obfuscated using ProGuard? 【发布时间】:2013-01-25 03:50:45 【问题描述】:

很遗憾,我丢失了我使用 ProGuard 混淆的应用程序的源代码。 我还有 .apk 文件和一些由 ProGuard 生成的配置文件:

    dump.txt mapping.txt seeds.txt usage.txt

到目前为止我做了什么?

    使用apktool解码的资源文件。 是的,我把那些拿回来了!

    提取.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 文件将混淆代码重新映射到我的原始源代码?我想看看我自己的变量名/方法签名。 还是这些文件只能用于跟踪崩溃报告堆栈跟踪?

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于如何对使用 ProGuard 混淆的 Android APK 进行逆向工程/反编译?的主要内容,如果未能解决你的问题,请参考以下文章

Android proguard - Proguard 对代码进行了混淆,但某些文件是可读格式

Proguard:如何避免缩小(和混淆)整个包以避免删除(和混淆)“未使用的方法”?

如何通过 Eclipse 使用 Proguard 混淆 apk?

如何使用 proguard 混淆 android 库(.aar)?

使用 ProGuard 进行文件混淆

ProGuard - 如何保留方法并同时混淆它们?