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