对代码混淆有何期待(proguard,android)
What to expect from code obfuscation (proguard, android)
有一个 APK 被 Proguard 混淆了。我用APK工具反编译了它。它为每个 class 创建了 *.smali 文件。我可以看到 classes 的真实姓名甚至代码流:
.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
我可以看看这个方法的作用。我预计所有包、classes、属性、方法都将更改,源代码乍一看毫无意义。混淆可以在 Android 上做什么?
据我所知,proguard 会默认混淆 android 个项目,当为项目启用 proguard 时。
来自此类应用程序的可能堆栈跟踪看起来有点像这样:
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)
--> 没有关于 class 的信息,也没有方法名称
所以我假设,构建 apk 的开发人员出于某种原因禁用了 class 重命名。另见 Using Proguard with Android without obfuscation
堆栈跟踪来源:http://simplyadvanced.net/blog/android-how-to-decode-proguards-obfuscated-code-from-stack-trace/
据我所知,它将重命名所有 类 和方法,例如A、AA、AAA、B、BB 等这样就不会那么容易阅读和理解。就那么多,删除所有 类,未引用或使用的垃圾也被删除,APK 被压缩到一个明显的小尺寸。
有一个 APK 被 Proguard 混淆了。我用APK工具反编译了它。它为每个 class 创建了 *.smali 文件。我可以看到 classes 的真实姓名甚至代码流:
.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
我可以看看这个方法的作用。我预计所有包、classes、属性、方法都将更改,源代码乍一看毫无意义。混淆可以在 Android 上做什么?
据我所知,proguard 会默认混淆 android 个项目,当为项目启用 proguard 时。
来自此类应用程序的可能堆栈跟踪看起来有点像这样:
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)
--> 没有关于 class 的信息,也没有方法名称
所以我假设,构建 apk 的开发人员出于某种原因禁用了 class 重命名。另见 Using Proguard with Android without obfuscation
堆栈跟踪来源:http://simplyadvanced.net/blog/android-how-to-decode-proguards-obfuscated-code-from-stack-trace/
据我所知,它将重命名所有 类 和方法,例如A、AA、AAA、B、BB 等这样就不会那么容易阅读和理解。就那么多,删除所有 类,未引用或使用的垃圾也被删除,APK 被压缩到一个明显的小尺寸。