java - 如何使用 GCJ 编译 Java Servlet 和许多其他类?

标签 java tomcat gcj

目前我有一个用 Java 编写的后端系统,用于处理、处理数据并将数据转发到外部 HSM 模块进行加密。当时它被认为足够安全。然而,最近的审计结果要求所有后端 Java 类也受到保护。

我读过有关 GCJ 的内容,它将 Java 字节代码编译为 native 代码。这肯定会让逆向工程变得更加困难。

经过 30 多个小时的谷歌搜索和尝试,我什至无法进行编译。我未能在我的 5 个 servlet 和数百个其他 java 类上使用 GCJ 进行编译。这也意味着,我还没有用 tomcat 测试它,我不知道这是怎么回事。

以下是我想知道的问题:

1) 有人成功用 GCJ 编译 java sevlet 并在 Tomcat 下运行吗?如果有,是否有任何与编译 java servlet 直接相关的指南或示例?

2) 我在保护 Java 类方面是否走在正确的道路上?如果没有,那么更好的方法是什么?

最佳答案

I have read about GCJ, it compiles the Java Byte codes to Native code. This will definitely make it harder to reverse engineer.

这是一个错误的假设。如果您想混淆 Java 字节码,请使用 ProGuard。

anyone out there has any success compiling java sevlets with GCJ and running it under Tomcat? If yes, is there any guide or sample directly related to compiling a java servlet?

想想你想在这里做什么。 Tomcat 通过导入 Jar 文件或目录中的类文件来动态加载 servlet。 GCJ 将 Java 类编译为可执行文件或 native 库文件。 Tomcat 将无法在运行时加载这些 native 二进制文件。

您也许可以通过嵌入 Jetty 并使用 GCJ 编译来创建您自己的 Web 服务器,但我怀疑这就是您真正想要做的。有大量的字节码混淆工具就是为了解决这个问题而设计的。 ProGuard 是 Google 推荐用于 Android 开发的工具,而且是免费的。

更新

如果您在应用中使用反射,您可以使用 proguard.cnf 文件中的以下行将 ProGuard 配置为不重命名/删除某些类。

-keep public class * extends com.package.ClassName
-keepclassmembers class * extends com.package.ClassName

关于java - 如何使用 GCJ 编译 Java Servlet 和许多其他类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10184090/

相关文章:

java - 使用Spring Reactor从关系数据库中检索数据

java - 找不到适用于 jdbc :oracle:thin:@localhost:xe 的合适驱动程序

java - 根据项目的输出文件夹结构配置 Tomcat webapps 目录

java - 区分 sqlite 表中的重复行

java - Android Phonegap 中的纬度经度跟踪?

java - 在 Ubuntu 18.04 上安装 GCJ

java - NetBeans 的 GCJ

java - 将 Java 编译为 native 代码是否会保护源代码?

eclipse - 通过 Tomcat 调试 Eclipse 时如何更改实例

java - Tomcat 堆转储创建