对代码混淆的期望(proguard, android)



有一个APK被Proguard混淆了。我用APK工具进行了反编译。它创建了*。每个类的小文件。我可以看到类的真实名称,甚至代码流:

.locals 2
new-instance v0, Lcom/acme/model/Receipt;
invoke-direct {v0}, Lcom/acme/model/Receipt;-><init>()V
iget-object v1, p1, Lcom/acme/bus/Receipt;->a:Ljava/lang/String;
invoke-virtual {v0, v1}, Lcom/acme/model/Receipt;->setText(Ljava/lang/String;)V
iget v1, p1, Lcom/acme/bus/event/device/Receipt;->b:I
invoke-virtual {v0, v1}, Lcom/acme/Receipt;->setType(I)V
return-object v0

可以看到这个方法是做什么的。我预计所有的包、类、属性、方法都会被修改,而源代码第一眼就会变得毫无意义。在Android上混淆可以做什么?

据我所知,proguard默认会在项目中启用proguard时混淆android项目。

这样的应用程序可能的堆栈跟踪看起来像这样:

Caused by: java.lang.NullPointerException
at net.simplyadvanced.ltediscovery.be.u(Unknown Source)
at net.simplyadvanced.ltediscovery.at.v(Unknown Source)
at net.simplyadvanced.ltediscovery.at.d(Unknown Source)
at net.simplyadvanced.ltediscovery.av.onReceive(Unknown Source)

->没有关于类名和方法名的信息

所以我假设,构建apk的开发人员出于某种原因禁用了类重命名。参见在Android中使用Proguard而不混淆

stacktrace的来源:http://simplyadvanced.net/blog/android-how-to-decode-proguards-obfuscated-code-from-stack-trace/

据我所知,它会将你所有的类和方法重命名为A,AA,AAA,B,BB等。这样就不容易阅读和理解了。只是这么多,并删除所有的类和垃圾,不引用或使用也被删除,APK被压缩到一个明显的小尺寸。

相关内容

  • 没有找到相关文章

最新更新