使用 GraalVM Native Image 代替混淆
Posted
技术标签:
【中文标题】使用 GraalVM Native Image 代替混淆【英文标题】:Using GraalVM Native Image instead of obfuscation 【发布时间】:2021-12-05 00:20:42 【问题描述】:我一直在为不同的目的开发后端平台,有时客户希望将此产品作为本地软件安装在他们的数据中心中。 所以为了防止逆向工程,我使用了混淆工具。
我想知道使用GraalVM Native Image 技术编译可部署应用程序是否是防止逆向工程的替代解决方案。
我知道原生镜像不能被反编译,所以逆向工程是不可能的。
【问题讨论】:
【参考方案1】:一般来说,任何软件都可以进行逆向工程,因此这样做需要权衡取舍和复杂性。
GraalVM 原生镜像确实会生成原生可执行文件或共享库,并且对逻辑进行逆向工程的工作量比使用普通 jar 文件要高。
但是,人们需要始终小心他们的目标和潜在的威胁媒介。例如,本机映像构建过程可以将字符串保存在二进制文件中。例如,我有一个原生镜像构建二进制 primes-serial
。运行类似:
strings primes-serial | grep com.oracle.svm.core.VM
Ocom.oracle.svm.core.VM
com.oracle.svm.core.VM.Target.Libraries=stdc++|pthread|dl|z|rt
com.oracle.svm.core.VM=GraalVM 20.2.0 Java 11 EE
com.oracle.svm.core.VM.Target.StaticLibraries=liblibchelper.a|libnet.a|libffi.a|libextnet.a|libnio.a|libjava.a|libfdlibm.a|libsunec.a|libzip.a|libjvm.a
com.oracle.svm.core.VM.Target.LibC=com.oracle.svm.core.posix.linux.libc.GLibC
com.oracle.svm.core.VM.Target.Platform=org.graalvm.nativeimage.Platform$LINUX_AMD64
com.oracle.svm.core.VM.Target.CCompiler=gcc|redhat|x86_64|4.8.5
您可以看到二进制文件中保留了一些信息。
因此,最初运行混淆器然后构建本机映像可能会很有趣。
但通常二进制文件可以像任何本机可执行文件一样被反汇编。
【讨论】:
以上是关于使用 GraalVM Native Image 代替混淆的主要内容,如果未能解决你的问题,请参考以下文章
GraalVM Native Image 在 Springdoc 依赖上失败
Spring Boot 3的AOT(GraalVM Native Image)应用开发
Spring Boot 3的AOT(GraalVM Native Image)应用开发