2012-04-17 35 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