java作为解释型语言,因其高度抽象的特性导致其很容易被反编译,容易被反编译,自然有防止反编译的措施存在。常见的防反编译的技术有以下几种。
隔离Java程序
最简单的方法就是让用户不能够访问到 Java Class 程序,这种方法是最根本的方法。具体方法有很多,比如:
- 将关键的Java Class 放在服务端,客户端通过访问接口来获得服务,而不是直接访问 Class 文件,这样黑客就没法反编译 Class 文件。
但是有很多应用场景不适合这种保护方式,比如单机运行的程序 就无法格力Java 程序。
对 Class 文件进行加密
为了防止Class 文件被直接反编译,许多开发人员将一些关键的 Class 文件进行加密,例如,注册码、序列号管理等相关的类。
在使用这些类之前,程序寿险需要对这些类进行解密,然后再将这些类装在到 JVM 中,这些类的加密可以由硬件完成,也可以使用软件完成。
转换成 Native Code
Native Code 往往难以被反编译,开发人员可以选择将整个应用程序转换成 Native Code,也可以选择将关键模块转换为 Native Code。
当然,这么做的同时,也牺牲了Java 的跨平台特性。如果仅仅转换关键部分,Java 程序在使用这些模块时,需要使用 JNI 技术调用。
为了保证Native 代码不被修改和替代,通常需要对这些代码进行数字签名。在使用前,往往需要先对 Native Code 进行认证。
代码混淆
代码混淆是对 Class 文件进行重新组织和处理,功能虽然还保证,但是很难被反编译,即使反编译后也非常难懂。
以上内容参考自如何防止你的java jar被反编译