【问题标题】:ProGuard doesn't performs obfuscation of Object's methodsProGuard 不会混淆 Object 的方法
【发布时间】:2016-07-20 18:59:11
【问题描述】:

为了了解ProGuard 的工作原理,我创建了一个很小的Android 示例,添加了一些jar,编写了几行代码,启用了ProGuard 等等。

接下来是我的 ProGuard 选项

-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
-optimizationpasses 5
-optimizations !class/unboxing/enum

因此,在将我的 APK 名称反向工程到所有 Object 的方法之后,例如 toString()hashCode()equals() 保持不变。除了Object 的方法,Externalizable 方法的名称也保留了

那么你知道它为什么会发生吗?可以修复它吗?

【问题讨论】:

    标签: android proguard obfuscation


    【解决方案1】:

    ProGuard 无法混淆并非源自您的类的方法(其中“您的”包括您编译的 JAR/AAR)。

    您从框架提供的类中覆盖的任何内容都需要保持不变。否则,框架无法调用这些方法,因为 ProGuard 不会混淆大约 15 亿 Android 设备上安装固件的框架类。

    【讨论】:

    • 听起来很伤心,所以如果我的 readExternal/writeExternal 方法包含一些重要的逻辑,“黑客”可以因为方法名称而轻松找到,在这种情况下我该怎么办?
    • @MikeHerasimov:黑客无论如何都能找到该代码。鉴于现代逆向工程工具,ProGuard 混淆的用途有限。
    • 我很抱歉有太多问题,先生,但是您知道有什么免费工具可以比 ProGuard 更好地混淆代码吗? (当然,如果存在的话)
    • @MikeHerasimov:不可能有一个工具可以解决您的问题。如果有比 ProGuard 更好的混淆器,我不会感到惊讶,虽然我没有研究过这个主题,但它们无法改变框架类来自设备的事实,因此它们的方法没有被混淆,也不能在子类中被混淆。欢迎您将业务逻辑转移到其他方法并从非混淆方法中调用它们,但这对于那些逆向工程代码的人来说不是主要问题。
    • 似乎这是我能做的所有代码混淆,谢谢你的回答和你的时间,祝你有美好的一天马克先生 ;)
    猜你喜欢
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    相关资源
    最近更新 更多