2009-02-03 72 views
2

如何檢索字節碼並製作哈希以查看是否有人在內存中或文件上操縱了我的字節碼?從內存中檢索字節碼以防止黑客入侵

編輯: 簽署二進制文件是否保護代碼不被修改和執行?盡我所能保護我的用戶,確保他們正在運行我的軟件。我還想保護程序(服務器)不被黑客客戶使用。

如何從服務器端檢測是否有人篡改了我的客戶端?

回答

2

您可以創建自己的類加載器和手動做的檢查,可以標誌你的代碼,讓Java運行時爲你做的工作。

15

因此,您正試圖阻止某些具有相同(或更高)特權級別的進程來操縱應用程序,而不是您的應用程序?

這是一個註定要失敗的任務。因爲如果您添加安全檢查,那麼通過用簡單的return true;替換它,會阻止攻擊者修改您的方法?

8

我認爲你需要澄清你的要求(至少我無法理解你在找什麼)。

在與安全相關的領域,你總是需要回答兩個問題,之前打個電話,甚至可以開始解決一個問題:

  • 什麼我試圖保護?
  • 攻擊者具有哪些功能?

就你而言,我相信你正試圖保護Java客戶端的類文件不被修改。在這種情況下,答案取決於(潛在的)攻擊者可以做什麼。

如果攻擊者實際上在客戶端運行的計算機上擁有管理員權限,那麼基本上你什麼都做不了。正如上面的saua所指出的那樣,如果你不能相信你正在運行的系統,那你就註定了。

如果攻擊者只能修改之前的類文件他們到達客戶端,那麼簽名您的JAR文件將讓您的客戶端檢測到操作。

1

對瓶子簽名將保護代碼不被修改。簽名涉及根據您的私鑰創建簽名。公鑰使用這些簽名嵌入到jar中。 Java將根據您的公鑰驗證簽名並拒絕加載修改後的類。

被黑客戶端會稍微難以阻止。首先攻擊者必須對你的協議進行逆向工程。你可以採取一個步驟,用java混淆器來防止這種情況發生,但最終攻擊者只能觀察網絡並從流量中反向設計協議。即使您對客戶端服務器通信進行了加密(這並不容易,考慮使用已經爲您執行的協議... SSH或HTTPS),您最終仍然不會受到中間人攻擊。

你到底想要保護什麼?

5

我如何檢測服務器端是否檢測到有人篡改我的客戶端?

你不行。在互聯網上沒有人知道你是否是一隻狗;-)

嚴重:對服務器端做出關於客戶端的任何假設的唯一選擇是通過網絡發回的信息。通過對協議進行加密並使其充分難以反向工程,您可以使入侵者難以破解客戶端,但並非不可能。

NGSCB(以前稱爲Palladium)旨在使其更安全,但它有自己的一套issues

0

在客戶端上,您可以調用getResourceAsStream,其路徑名稱指向jar中的類文件。

回答您的問題的一部分(「我如何檢索字節碼」)。其他答案很好涵蓋了更大的問題。