熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java免受逆向工程攻擊的措施

2013-11-23 18:44:49  來源: Java核心技術 

  針對Java易遭受逆向工程攻擊的原因今天我將向大家介紹目前市場上關於防止Java免受逆向工程攻擊的集中措施同時指出這幾種措施在防范逆向工程攻擊的時候存在的不足之處

  首先是板載措施它並不足以防止逆向工程大多數虛擬機都包含一些使逆向工程復雜化的功能Java允許用戶在JAR存檔中提供的每個類上設置一個數字證書以確保原始文件沒有被更改雖然這樣做並無害處但該功能相當容易清除並且僅針對靜態補丁方法提供保護而靜態補丁只是攻擊場景中的一小部分而且這種方法並不能針對運行時應用於內存的補丁提供保護

  Java還通過虛擬機執行字節碼驗證器該驗證器在執行通過的字節碼之前對其進行自動分析這可以防止執行奇怪的代碼也使字節碼注入變得更加困難

  然而盡管這些措施給攻擊者造成了困難但對於充分保護知識產權還遠遠不夠

  其次是Java封裝技術開發人員通常用以防止class文件靜態分析和字節碼反匯編的一種方法是封裝這種方法通過應用加密/解密完整文件來防止對類文件的分析通過封裝開發人員將受保護文件的原始加載器更換為處理加密/解密的自定義加載器加密使用將class文件從標准Java class格式更改為僅密鑰所有者可讀格式的算法來防止對這些文件的分析然而class文件的字節碼在一個內存位置中仍保持可讀在系統加載器嘗試加載該類之前的時刻通常可從該位置訪問字節碼如果黑客能夠找到那個內存位置就可以訪問原始狀態的該類

  最後防止黑客攻擊該內存位置需要第二種技術稱為混淆混淆可產生一個更加復雜難於理解並且與原始代碼具有相同行為方式的代碼版本有幾種不同類型的混淆方法可用於指令集程序員可以通過替換二進制代碼中的所有字符串來混淆代碼這樣就更加難以找到一個好的切入點來開始逆向工程攻擊他們可以通過插入指向垃圾代碼的跳轉並返回來迷惑攻擊者或混淆源代碼或字節碼

  開發人員也可以選擇使用名為ConstCode轉換的技術來混淆常量例如密鑰有時在應用程序中存儲為一組字節如果黑客確定了這些字節的位置他們就可以訪問這些字節為混淆一個常量(如密鑰)ConstCode算法將常量轉換為可產生同一常量的多個不同的命令

  例如為了在源代碼段中隱藏常量cst=x可以將該常量簡單地分為幾個算術運算如加減等等A = xABCDF;B=x;C=xE現在讓我們使用這三個變量重新計算出常量x我們的原始常量為cst = C/B + A – x – A + = x如果應用程序僅使用該例程來計算常量攻擊者就必須理解其中的含義而不是簡單地獲取該常量


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25659.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.