2

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

我已经阅读了 GCJ,它将 Java 字节代码编译为本机代码。这肯定会使逆向工程变得更加困难。

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

所以这里是我想知道的问题:

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

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

4

2 回答 2

2

我已经阅读了 GCJ,它将 Java 字节代码编译为本机代码。这肯定会使逆向工程变得更加困难。

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

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

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

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

更新

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

-keep public class * extends com.package.ClassName
-keepclassmembers class * extends com.package.ClassName
于 2012-04-17T03:06:34.690 回答
0

您可以使用 Excelsior JET 本地编译 Tomcat Web 应用程序(注意:我为 Excelsior 工作)

于 2012-05-03T08:41:30.453 回答