一尘不染

如何锁定已编译的Java类以防止反编译?

java

如何锁定已编译的Java类以防止反编译?

我知道这个话题必须在Internet上进行充分讨论,但是在引用它们之后我无法得出任何结论。

许多人的确建议使用混淆器,但是他们只是使用难以记住的字符序列来重命名类,方法和字段,但是敏感的常数值呢?

例如,您已经基于基于密码的加密技术开发了加密和解密组件。现在,在这种情况下,任何普通的Java人士都可以使用JAD来反编译类文件,并轻松检索密码值(定义为常量)以及salt,然后可以通过编写小型独立程序来解密数据!

还是应该使用本机代码(例如VC ++)构建此类敏感组件,并通过JNI对其进行调用?


阅读 970

收藏
2020-03-05

共1个答案

一尘不染

一些更高级的Java字节码混淆器所做的不仅是类名修饰。例如,Zelix KlassMaster还可以使您的代码流变得混乱,使其难以遵循,并且可以作为出色的代码优化器…

此外,许多混淆器还可以对字符串常量进行加扰并删除未使用的代码。

另一个可能的解决方案(不一定排除混淆)是使用加密的JAR文件和进行解密的自定义类加载器(最好使用本机运行时库)。

第三(可能提供最强大的保护)是使用本地的提前编译器,例如GCC或Excelsior JET,这些编译器将Java代码直接编译为平台特定的本地二进制文件。

无论如何,您都必须记住爱沙尼亚语中的俗语:“锁是为了动物”。这意味着在运行时可以使用所有代码,并将其加载到内存中,并且只要具备足够的技能,决心和动力,人们就可以并且将对代码进行反编译,解读和黑化……您的工作就是使流程像您可以并且仍然使事情正常进行…

2020-03-05