【发布时间】:2019-10-25 05:02:04
【问题描述】:
有什么方法可以禁用 Kotlin 元数据或只是混淆它们?它是在编译期间添加的。 整个代码都被很好地混淆了,但名为“kotlin-reflect.jar”的 Kotlin 库留下了方法细节,如类名、方法和带有类型的参数。
@Metadata(mv = {1, 1, 13}, bv = {1, 0, 3}, k = 1, d1 = {"\000\022\n\002\030\002\n\002\030\002\n\000\n\002\020\016\n\002\b\002\030\0002\0020\001B \r\022\006\020\002\032\0020\003?\006\002\020\004R\016\020\002\032\0020\003X?\004?\006\002\n\000 \006\005"}, d2 = {"Lcom/test/SomeException;", "Lcom/test/SomeException;", "errorMessage", "", "(Ljava/lang/String;)V", "build"}) 公共最终类 SomeException 扩展异常 { public SomeException(@NotNull String paramString) { super(paramString); this.errorMessage = 参数字符串; } 私有最终字符串错误消息; }
【问题讨论】:
-
我认为任何 Java .jar/.class 混淆器都应该可以工作。但是,您应该注意,这可能会破坏或显着影响依赖于方法、字段和(如果您也混淆了这些)类名的任何内容,包括反射、依赖注入、日志、堆栈跟踪等。而且它不能阻止人们反编译代码本身。
-
最后使用 R8 代替 Proguard 具有相同的规则,它在 dexing 步骤上工作,但相同的类仍然有这个带有类、方法和参数详细信息的注释。我认为这是 Kotlin 语言中的巨大安全漏洞,应该以某种方式修复。不确定此元数据是否仍在使用,因为代码中不再使用真实姓名。
-
我们不知道您的 R8/ProGuard 规则是什么,例如如果您的
keep规则过于宽泛。 -
@Michael 这绝对不是
keep规则。如上所述 - 元数据在 dexing 步骤中被删除(apk 构建的一部分)。
标签: kotlin proguard obfuscation decompiling