2012-04-17 36 views
2

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

我已阅读关于GCJ,它将Java字节代码编译为本机代码。这肯定会使逆向工程更难。

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

因此,这里是我想知道的问题:

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

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

回答

2

我已阅读关于GCJ,它将Java字节代码编译为本机代码。这肯定会使逆向工程更难。

这是一个错误的假设。如果你想混淆你的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 
+0

我已经试过yGuard,它杀了我所有的反射调用。你是否在说ProGuard能够避免混淆反射方法? – Reusable 2012-04-17 06:22:34

+0

默认情况下,ProGuard将尝试移除看起来未使用的类以及重命名类和类成员。但是,您可以配置它以保留某些类,并防止重命名某些方法。 – 2012-04-17 07:17:10

+0

@wm_eddie“这是一个错误的假设。”你能否用事实回复这个陈述? – 2012-05-03 08:43:54