Kotlin 数据混淆 Class' toString 方法
Obfuscation of Kotlin Data Class' toString Method
我在我的应用中到处都使用 Kotlin 数据 class。
我在编译时使用 R8。
我有一个安全要求,生成的 toString
方法不能包含原始属性名称。目前,生成的方法包含纯文本的整个 classes 属性名称及其混淆的值名称。
public String toString() {
return "MyClass(id="+this.f1231msd+", password="+this.fj92313+")");
}
我有几个选项,但我想看看是否还有其他我没有找到的选项。
- 我检查了 Proguard 的源代码,发现 this class 在
toString
方法中使用了混淆名称。如果 R8 这样做但似乎没有这样做,那就太完美了。
- 用空白字符串手动覆盖每个数据 class'
toString
方法。
- 为我写第 2 步的 R8 规则
- 为 return 创建一个编译时注释
toString
的空白字符串
还有其他选择吗?
在四处寻找其他选项和解决方案之后,我决定修改一个现有的编译器插件,它可以为我自动执行此操作。
这样做的目的是让我在开发过程中仍然受益于 Kotlin 自动生成的 toString()
方法,然后在发布编译时编辑 toString()
的内容。
它输出这样的方法:
public String toString() {
return "██";
}
目前这只是在 my fork 分支 redact-all-and-class-names
上,但它可能会包含在主库中。
我在我的应用中到处都使用 Kotlin 数据 class。
我在编译时使用 R8。
我有一个安全要求,生成的 toString
方法不能包含原始属性名称。目前,生成的方法包含纯文本的整个 classes 属性名称及其混淆的值名称。
public String toString() {
return "MyClass(id="+this.f1231msd+", password="+this.fj92313+")");
}
我有几个选项,但我想看看是否还有其他我没有找到的选项。
- 我检查了 Proguard 的源代码,发现 this class 在
toString
方法中使用了混淆名称。如果 R8 这样做但似乎没有这样做,那就太完美了。 - 用空白字符串手动覆盖每个数据 class'
toString
方法。 - 为我写第 2 步的 R8 规则
- 为 return 创建一个编译时注释
toString
的空白字符串
还有其他选择吗?
在四处寻找其他选项和解决方案之后,我决定修改一个现有的编译器插件,它可以为我自动执行此操作。
这样做的目的是让我在开发过程中仍然受益于 Kotlin 自动生成的 toString()
方法,然后在发布编译时编辑 toString()
的内容。
它输出这样的方法:
public String toString() {
return "██";
}
目前这只是在 my fork 分支 redact-all-and-class-names
上,但它可能会包含在主库中。