网上博文
网上有人总结过防止Java代码被反编译的方法,我就不再次发明轮子,这里放一个别人的博文(该文章我在一个微信公众号里也见过),作者也是转载他人的,只是标注的原文地址打不开。
文章地址:https://blog.csdn.net/yangxi_pekin/article/details/8226468
P.S.
这个博文写的也挺好:https://www.cnblogs.com/newzhq/p/4570844.html
我的补充
混淆(Obfuscation)
通过谷歌搜索和一些同事的讨论,现在比较流行的做法是使用混淆技术,用的比较多的混淆软件是Proguard (开源软件)。
混淆只是Proguard的一个feature,它主打的功能是减小Java代码的体积,同时可以优化、混淆Java 代码。
- JODE
- JavaGuard
- RetroGuard
- Jarg
- yGuard
混淆的缺点:
- 反射的代码不能work
- 代码的复杂变化,使得性能下降
- 出问题了,不好debug
- 防君子,不妨小人。不能100%防护。
Java代码编译成native code
有一些加壳软件,给可运行的Java class文件或Java Jar, War等文件加个壳变成一个可运行的EXE(Windows上运行文件)文件。这种加壳的方式,肯定没法保护Java Code,只是给运行提供方便而已。
如果能把Java Code编译成native code,这样就能和C++一样安全,防止被反编译。这里有个工具叫做GraalVM,可以做到。
Graal读音:“Grawl”
Native Image是GraalVM的一个创新型技术,可以把Java代码编译成可执行文件(standalone binary executable)或者共享库文件(native shared library)。Native Image中包含的代码有:
- 应用程序代码(application classes)
- 依赖的第三方库(third party dependent libraries)
- JDK中依赖的classes
生成的文件是和操作系统相关绑定的且不包含JVM,也就是windows生成的,不能够在Linux里运行。
Native Image只是GraalVM的一个Feature,这是GraalVM官网自己的简介。