如何锁定已编译的Java类以防止反编译?
2022-08-31 10:04:59
一些更高级的Java字节码混淆器所做的不仅仅是类名重整。例如,Zelix KlassMaster还可以以一种难以遵循的方式扰乱您的代码流,并作为出色的代码优化器工作...
此外,许多混淆器还能够对字符串常量进行加扰并删除未使用的代码。
另一种可能的解决方案(不一定排除混淆)是使用加密的 JAR 文件和执行解密的自定义类装入器(最好使用本机运行时库)。
第三(可能提供最强大的保护)是使用原生的提前编译器,如GCC或Excelsior JET,例如,将Java代码直接编译为特定于平台的原生二进制文件。
无论如何,你必须记住,正如爱沙尼亚语中俗话所说“锁是动物”。这意味着每一段代码在运行时都可用(加载到内存中),并且只要有足够的技能,决心和动力,人们就可以并且将会反编译,解扰和破解您的代码...你的工作只是让这个过程尽可能不舒服,并且仍然保持事情的运作......
只要他们能够访问加密数据和解密数据的软件,基本上就无法使其完全安全。以前解决这个问题的方法是使用某种形式的外部黑匣子来处理加密/解密,如加密狗,远程身份验证服务器等。但即便如此,鉴于用户完全可以访问自己的系统,这只会使事情变得困难,而不是不可能 - 除非您可以将产品直接绑定到存储在“黑匣子”中的功能,例如在线游戏服务器。