葛 華, 余沛釗, 夏夢森
(武漢理工大學 a.信息工程學院; b.計算機科學與技術學院, 武漢 430072)
一種JAVA控制流混淆方案
葛 華a, 余沛釗a, 夏夢森b
(武漢理工大學 a.信息工程學院; b.計算機科學與技術學院, 武漢 430072)
在逆向分析的領域里,JAVA軟件最需要保護的地方毫無疑問是整個軟件的結構。本文在總結代碼混淆領域中的一些混淆策略后,提出一個基于結構代碼塊的控制流混淆方案。該方案不是以基本代碼塊為基礎來提出具體的混淆策略,而是從軟件結構角度上,只對那些復雜的結構塊進行混淆處理。該方案首先插入含有垃圾代碼塊的分支路徑,然后以結構代碼塊為基礎進行壓扁操作。分析表明該方案具有較好的效率。
代碼混淆;控制流混淆;代碼塊
當我們將一段JAVA代碼通過混淆變化后生成一段新的代碼,在保證前后運行結果相同的情況下,如果新生成的代碼比原來的代碼更具有迷惑作用,我們就把這個過程稱為代碼混淆[1-3]。
依據混淆原理與所需進行混淆處理的對象的不同,可以將代碼混淆分成以下幾類[4-5]:

圖1 代碼混淆分類
控制流混淆是靜態混淆的一種,近來得到學者的廣泛關注。
對于JAVA應用來說,攻擊者大多是通過解析出來的程序結構來進行破解,數據混淆和結構混淆對于這種情況是沒有明顯的作用,因為攻擊者依舊能夠將程序結構重新構造出來,要想對JAVA應用有一個很好的保護,運用控制流混淆去隱蔽并且改變它的運行結構是個很好的選擇[6-8]。……