針對Java易遭受逆向工程攻擊的原因,今天我將向大家介紹目前市場上關于防止Java免受逆向工程攻擊的集中措施,同時指出這幾種措施在防范逆向工程攻擊的時候存在的不足之處。
首先是板載措施,它并不足以防止逆向工程。大多數(shù)虛擬機都包含一些使逆向工程復雜化的功能。Java允許用戶在JAR存檔中提供的每個類上設置一個數(shù)字證書,以確保原始文件沒有被更改。雖然這樣做并無害處,但該功能相當容易清除,并且僅針對靜態(tài)補丁方法提供保護,而靜態(tài)補丁只是攻擊場景中的一小部分。而且,這種方法并不能針對運行時應用于內(nèi)存的補丁提供保護。
Java還通過虛擬機執(zhí)行字節(jié)碼驗證器,該驗證器在執(zhí)行通過的字節(jié)碼之前對其進行自動分析。這可以防止執(zhí)行"奇怪"的代碼,也使字節(jié)碼注入變得更加困難托福答案 托福改分
然而,盡管這些措施給攻擊者造成了困難,但對于充分保護知識產(chǎn)權還遠遠不夠。
其次是Java封裝技術。開發(fā)人員通常用以防止。class文件靜態(tài)分析和字節(jié)碼反匯編的一種方法是封裝,這種方法通過應用加密/解密完整文件來防止對類文件的分析。通過封裝,開發(fā)人員將受保護文件的原始加載器更換為處理加密/解密的自定義加載器。加密使用將。class文件從標準Java .class格式更改為僅"密鑰"所有者可讀格式的算法來防止對這些文件的分析。然而,.class文件的字節(jié)碼在一個內(nèi)存位置中仍保持可讀,在系統(tǒng)加載器嘗試加載該類之前的時刻,通常可從該位置訪問字節(jié)碼。如果黑客能夠找到那個內(nèi)存位置,就可以訪問原始狀態(tài)的該類。
最后,防止黑客攻擊該內(nèi)存位置需要第二種技術,稱為混淆。混淆可產(chǎn)生一個更加復雜、難于理解并且與原始代碼具有相同行為方式的代碼版本。有幾種不同類型的混淆方法可用于指令集:程序員可以通過替換二進制代碼中的所有字符串來混淆代碼,這樣就更加難以找到一個好的切入點來開始逆向工程攻擊。他們可以通過插入指向垃圾代碼的跳轉(zhuǎn)并返回來迷惑攻擊者,或混淆源代碼或字節(jié)碼。
開發(fā)人員也可以選擇使用名為Const2Code轉(zhuǎn)換的技術來混淆常量。例如,密鑰有時在應用程序中存儲為一組字節(jié)。如果黑客確定了這些字節(jié)的位置,他們就可以訪問這些字節(jié)。為混淆一個常量(如密鑰),Const2Code算法將常量轉(zhuǎn)換為可產(chǎn)生同一常量的多個不同的命令雅思答案 雅思改分
例如,為了在源代碼段中隱藏常量cst=0x12345678,可以將該常量簡單地分為幾個算術運算,如加、減等等。A = 0x9ABCDF00;B=0x2;C=0x135799E00.現(xiàn)在讓我們使用這三個變量重新計算出常量0x12345678.我們的原始常量為:cst = C/B + A – 0x88888888 – A + 1000= 0x12345678.如果應用程序僅使用該例程來計算常量,攻擊者就必須理解其中的含義,而不是簡單地獲取該常量。