翻譯|使用教程|編輯:黃竹雯|2019-01-11 15:20:00.000|閱讀 704 次
概述:混淆并不是Java代碼的完整加密,混淆從編譯代碼中移除上下文,而人和逆向工程工具通常使用這些上下文來破譯代碼的含義。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Allatori Java obfuscator是第二代Java代碼混淆器,為你的知識產權提供全方位的保護。
【Allatori Java obfuscator最新試用版下載】
那么,什么是混淆?
混淆是一種現代技術。它并不是Java代碼的完整加密,盡管有一段時間使用過此方法。考慮到是Java代碼,混淆似乎更好。在Java開發之初,一些開發人員完全編寫了他們的應用程序和庫,并提供了特殊的類加載器,它們在執行之前就對代碼進行了解密。盡管這些加密類絕對不可讀,但這種解決方案需要將特殊密鑰放入應用程序中進行解碼。在這種情況下,黑客一旦發現密鑰,他能很輕易的解密應用程序并保存在硬盤上。使用任何可用的反編譯器,他就可以毫不費力地獲得源代碼,然后就能隨意使用你的應用程序和源代碼了。
到這里我們遇到了一個很有趣的問題:如何從編譯的源代碼中獲取源代碼?這其實很簡單。與C++不同,C++的源代碼在編譯期間變成機器代碼,而Java源代碼被編譯成所謂的“字節碼”。該字節碼可以很容易地反編譯回源代碼。 實際上,從C++獲得的機器代碼也可以被反匯編,但與反匯編代碼不同的是,在Java代碼中,所有來自源代碼的信息都存在。因此,類,方法和變量的所有名稱都將被重構,所有字符串文字將保持原始狀態。這個反編譯的代碼與源代碼只有一點不同:沒有注釋,因為它們在編譯時被刪除了。
很明顯,如果存在一種從字節碼中消除所有可以被人掌握的信息的方法,那么理解反編譯的Java代碼就像理解反匯編的代碼一樣困難。這種方法當然存在,就是混淆。雖然混淆不能保證100%保護代碼免受逆向工程(代碼可以反編譯和研究),但是混淆可以讓代碼變得更難理解 - 有時甚至不可能理解。 我們要注意的是,混淆不僅是一種保護代碼的方法,而且是一種可將逆向工程的過程變得非常耗時的方法,這需要付出很大的努力。目的是阻止所有偶然的入侵者和盡可能多的黑客。
混淆從編譯代碼中移除上下文,而人和逆向工程工具通常使用這些上下文來破譯代碼的含義。混淆就是從源代碼中刪除這些上下文,同時保持原始程序的完整可執行性。
Allatori就完全實現了這一點 - 你的程序將產生與混淆之前相同的結果,但代碼逆向工程要困難得多。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn