2013-07-17 102 views
2

我正在編寫一個作爲JAR文件分發的軟件。目前,這個JAR文件可能被篡改以檢索並保存我們的服務器通過URLClassLoader傳輸的另一個文件,進行反編譯,並在我們的代碼中找到各種對於使用它的客戶端的安全保持私密的東西。基本上,我想實現一種方法來檢查原始JAR是否被篡改。我知道通過在原始類中檢查SignedObject的有效性來檢查這是否是不可能的,因爲Java的性質可以被反編譯,但是有沒有其他方法可以確定代碼是否在原始代碼中被篡改文件?這種檢查可以通過下載的中介類來進行,以檢查其有效性,或者其他任何可以保證正常工作的方法。我一整天都在這裏坐着試圖想出解決這個問題的辦法。歡迎任何幫助。檢測Java JAR /代碼篡改

+0

關於我能想到的唯一一種使用某種文件散列(MD5)的方法,它可以告訴Jar文件是否被更改(即添加到或刪除或修改,但不是如果它已經開始打開)。您可以將這些信息保存在某個服務器上。當Jar要被加載時,您可以檢查服務器以確定MD5是否匹配(不要從服務器請求它,將它發送到服務器)。你也會過期一個罐子,所以需要在一段時間後再次重新下載... – MadProgrammer

+0

我看到這個問題。可以修改原始JAR以保存下載的JAR,查看檢查的結果,然後重新編譯它以忽略有效性檢查,我們再次處於相同的狀態。 –

+0

當你的應用程序加載Jar時,它需要執行驗證。是的,在某種程度上它可以被打破,但對非技術人員來說這是很多工作。如果Jar正在與基地通話(即向服務器請求數據),它還可能傳回一個密鑰,您可能會在將來某個時間過期,需要下載新的Jar(使用新密鑰)。如果你是自己的類加載Jar,你可以加密Jars/classes – MadProgrammer

回答

1

這在理論上和實踐上都是不可能的。罐子的驗證發生在客戶端。任何密碼術都不以可驗證的方式呈現給您,並且您相信客戶端提供任何加密。

即使您要從jar文件本身請求任意字節進行驗證,惡意用戶也可以配置要從良好的jar中獲取的字節,但由錯誤的代碼提供。

您可以使用加密證明來確保另一端具有數據,但要確保它只有該數據的副本/修訂版/版本是不可能的。一個堅定的攻擊者可以爲你提供任何謊言,因爲他可以在任何驗證中聲稱他擁有有效的jar。

總之,存在正確的數據並不意味着獨家存在相同。

+0

我發現了同樣的事情。當我觸發它來手動傳遞時,我最終使用套接字來傳遞JAR。這不是最好的解決方案,但現在可行。 –