如何对使用 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?