Java代码防止反编译的一些方法

By | 12月 16, 2021

网上博文

网上有人总结过防止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 代码。

proguard

其它的开源混淆工具

  • 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官网自己的简介