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