gpt4 book ai didi

java - 如果代码将被混淆,我是否可以始终使用反射 API?

转载 作者:行者123 更新时间:2023-11-30 06:35:42 24 4
gpt4 key购买 nike

我发现似乎有 2 个通用解决方案:

  1. 不要混淆通过反射 API 引用的内容 [ Retroguard , Jobfuscate ]
  2. 用混淆后的名称替换反射 API 调用中的字符串。

这些解决方案仅适用于同一项目内的调用 - 客户端代码(在另一个项目中)可能不会使用反射 API 来访问非公共(public) API 方法。

在 2 的情况下,它也仅在反射 API 与编译时已知的字符串一起使用时起作用(私有(private)方法测试?)。在那些情况下 dp4j还提供了混淆后注入(inject)反射码的方案。

阅读 Proguard FAQ我想知道 2 在它说的时候是否总是有效:

ProGuard automatically handles constructs like Class.forName("SomeClass") and SomeClass.class. The referenced classes are preserved in the shrinking phase, and the string arguments are properly replaced in the obfuscation phase.

With variable string arguments, it's generally not possible to determine their possible values.

问:粗体字是什么意思?有例子吗?

最佳答案

With variable string arguments, it's generally not possible to determine their possible values.

public Class loadIt(String clsName) throws ClassNotFoundException {
return Class.forName(clsName);
}

基本上,如果您向 Class.forName 传递一个非常量字符串,proguard 或任何混淆工具通常无法弄清楚您在谈论什么类,因此无法自动为您调整代码。

关于java - 如果代码将被混淆,我是否可以始终使用反射 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5692191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com