从代码混淆中得到什么(proguard,android)

时间:2015-09-01 12:42:55

标签: android proguard obfuscation

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

.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上进行模糊处理?

2 个答案:

答案 0 :(得分:1)

据我所知,当项目启用proguard时,proguard会默认模糊android项目。

这种appliation的可能堆栈跟踪看起来有点像这样:

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)

- &GT;没有关于类和方法名称的信息

所以我假设,构建apk的开发人员由于某种原因禁用了类重命名。另请参阅Using Proguard with Android without obfuscation

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

答案 1 :(得分:0)

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