2014-09-30 66 views
0

如何對純文本數據進行混淆,以便Java程序能夠對其進行反混淆處理很難進行反向工程?也就是說,應該沒有簡單的方法通過反編譯/分解程序的JVM代碼來弄清楚如何自己解密數據。以非反向工程方式加密Java程序的數據

我意識到如果一個壞人足夠堅決,這是不可能的。只是想盡可能地努力。

我唯一的想法是一個原生的擴展實現加密算法與存儲在一個古怪的方式,而不僅僅是一個簡單的字符串的密鑰。但真的喜歡避免本地擴展。

編輯

我極力用下來,並密切票反對。這是一個真正的問題。該應用程序被派遣給數千名高中的孩子。爲了加密數據,它目前使用代碼中嵌入的密鑰來實現RC4加密(使用Java)。聰明的孩子們可以反編譯這個,並使用反編譯來編寫讀取其他孩子數據文件的Java。這反過來允許各種形式的作弊。我們需要一個簡單而便宜的方法來更難推斷加擾算法。就這樣。我們不關心逆向工程這個80k線應用程序的其餘部分。實際上它是開源的。我們只需要保護執行數據解密的單一功能。

+0

加密數據,並讓您的應用程序解密它。我不相信你*需要*本地擴展,但你可能想看看JCE Unlimited Strength JAR。 – Makoto 2014-09-30 01:36:13

+0

一個非常昂貴的選擇是Excelsior JET,它將本質上將Java字節碼編譯成本機可執行文件(這使得它很難像C++應用程序那樣進行反向工程)。 – xpa1492 2014-09-30 01:56:25

+1

這是尖叫的XY問題。你試圖讓不同用戶的信息彼此保密?使用非對稱加密。 – chrylis 2014-09-30 03:05:24

回答

0

任何程序都可以解碼的程序可以解碼。任何Java程序都可以反編譯。即使遠程存儲數據也不起作用,因爲在下載數據後,您需要對其進行解密,並且可以複製或修補數據。如果明文暴露出來,它可以被訪問。你可以讓訪問變得困難,但用多年前黑客的話來說:「嘿,太棒了,它是受版權保護的 - 這意味着它帶有一個免費的謎題!」

請記住,密碼存儲通常使用陷阱密碼並比較加密哈希值。甚至需要將加密密碼保存在用戶絕對無法訪問的地方。

退一步,重新考慮你的設計。

+0

謝謝,但你沒有告訴我任何新東西。沒有其他設計。 – Gene 2014-09-30 03:40:31

+0

這種設計沒有穩健的實現。如果可以顯示,可以複製。即使您通過圖像處理渲染文本,但不按順序繪製像素,否則將其設置爲「不是文本」,直到它碰到屏幕,它們仍然可以刮擦屏幕。請記住,時間是孩子們可以承受的投入,遠遠超過你的能力;他們的時間比你的便宜。除非你給他們* NO *進入箱子內部,否則你所能做的只是拖延/煩人的戰術。如果他們有足夠的動力,他們會贏。期。 – keshlam 2014-09-30 03:46:20

+0

我知道這一切。這是一場戰爭。我們升級。他們升級。我沒有期望有完美的答案,只是下一次升級。 – Gene 2014-09-30 04:40:06