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

时间:2012-04-17 01:57:40

标签: java tomcat gcj

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

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

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

以下是我想知道的问题:

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

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

2 个答案:

答案 0 :(得分:2)

  

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

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

  

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

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

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

<强>更新

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

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

答案 1 :(得分:0)

你可以compile Tomcat Web apps natively with Excelsior JET(注意:我为Excelsior工作)