Java代碼混淆技術(shù)研究
阜寧高等師范學校 王學軍 2013/10/7 14:23:44
【摘要】由于Java開發(fā)已經(jīng)愈來愈流行,而引起編譯器的不安全特點是其很容易被反編譯,為了保護開發(fā)者的利益,混淆技術(shù)便應(yīng)運而生。當前主要使用到的混淆技術(shù)有以下四種:代碼外形混淆、控制命令混淆、內(nèi)部數(shù)據(jù)混淆和預(yù)防混淆。
【關(guān)鍵字】混淆技術(shù);Java;編程;算法
0.前言
Java作為一種新一代的編程語言,其因編程簡單、跨平臺性可操作性強被許多的開發(fā)人員和公司喜愛,而且如今已經(jīng)成為應(yīng)用程序的主流開發(fā)軟件。然而,Java編譯器在編譯時是將代碼引用到的變量和方法符號保留在字節(jié)碼文件中,并且這些符號都有語義信息,因此使得開發(fā)的程序很容易被反編譯,導致軟件被破解。最終將使得開發(fā)者的知識產(chǎn)權(quán)受到侵害。為了保護開發(fā)者的權(quán)益,代碼混淆技術(shù)變應(yīng)運而生。
1.混淆技術(shù)的發(fā)展
早在1997年Collberg便開始了對代碼混淆的研究,在他發(fā)表的文章中提出了代碼混淆變換的各種類型,他將其分為四類:代碼外形混淆、控制命令混淆、內(nèi)部數(shù)據(jù)混淆以及預(yù)防混淆。隨后Kelly等人構(gòu)造了一種用來實現(xiàn)構(gòu)造代碼的混淆算法機制。在國內(nèi),近些年了也有一些學者逐漸意識到了代碼混淆技術(shù)在進行程序編寫中的重要性,大量研究之后取得了較大的成果。比較有代表的有李永祥的多分語句控制迷惑技術(shù),李長春的執(zhí)行重整混淆算法等。由于混淆技術(shù)具有非常重要的軟件保護作用,相信未來肯定會有更多的人和組織加入到代碼混淆技術(shù)的相關(guān)研究課題中來。
2.混淆技術(shù)介紹
2.1混淆變換原理
作為一種非常實用的軟件保護策略,代碼混淆技術(shù)的基本思想是將應(yīng)用程序在保持語句含義不變的前提下實現(xiàn)P到P’的變換。此變換中必須滿足條件:P‘和P具有相同的運行結(jié)果;若P‘出錯終止或終止失敗,P也必須出錯地終止或終止失敗;P‘產(chǎn)生與P一樣的輸出。兩個程序唯一不同的只是P‘比P更難去進行反編譯,并且P‘可讀性差以及相關(guān)工具難以解析。因此經(jīng)過這種變換可以到達混淆的目的,使軟件不易被攻擊。
2.2混淆的應(yīng)用領(lǐng)域
代碼混淆的應(yīng)用范圍很廣,歸納起來主要有一下幾種領(lǐng)域:⑴分布式計算和軟件保護;⑵法保護和DRM;⑶同形加密;
2.3混淆的分類
代碼混淆技術(shù)根據(jù)混淆對象的不同可以分為四種:代碼外形混淆、控制命令混淆、內(nèi)部數(shù)據(jù)混淆和預(yù)防混淆。
⑴代碼外形混淆
Java混淆器使用到的混淆方法中代碼外形混淆最為典型,該算法可以將Java所有源代碼中包含的類的功能隱藏。如果最初的格式信息被除去后代碼將不能恢復,因此稱這種混淆為單向變換。程序經(jīng)過這種變換后時間和空間復雜度不會受影響,因為它并沒有額外執(zhí)行代價。
代碼外形混淆主要使用的技術(shù)有刪除(刪除程序和中的注釋、調(diào)試信息、未被調(diào)用的方法和類等)和改名(程序中的變量名、常量名、類名、方法名等)。此變換可以使程序的理解變難。
⑵ 控制命令混淆
控制命令混淆能增加程序的復雜度和程序的反編譯時間,它是通過改變程序的判斷條件或添加可控判斷條件以及對程序的結(jié)構(gòu)和流程進行調(diào)整來實現(xiàn)的。常常用到的控制命令混淆主要有排序、聚集和計算變換。
⑶ 內(nèi)部數(shù)據(jù)混淆
內(nèi)部數(shù)據(jù)混淆技術(shù)將會利用數(shù)據(jù)流中的難點問題,向程序中引入使程序精度降低或難度增加的因素,進而可以影響反編譯器對程序的分析結(jié)果。內(nèi)部數(shù)據(jù)混淆只會變換代碼中的數(shù)據(jù)結(jié)構(gòu),而不修改軟件代碼。
進行內(nèi)部數(shù)據(jù)混淆的主要方法有四種:變量分裂與變量合并、數(shù)據(jù)結(jié)構(gòu)變換、靜態(tài)數(shù)據(jù)動態(tài)生成、類繼承轉(zhuǎn)換。
⑷ 預(yù)防變換
預(yù)防變換是利用某些專用反匯編工具的弱點而設(shè)計的。具體混淆可以分為針對特定目標實施的預(yù)防變換或者是依據(jù)已知的反編譯算法實現(xiàn)的混淆。
⑸ 四種混淆技術(shù)的分析和比較
代碼外形混淆使攻擊者解讀程序造成不便,同時也能針對反編譯工具的算法使之反編譯難以實施。內(nèi)部數(shù)據(jù)混淆改變邏輯變量?刂泼罨煜钩绦蜃兊酶訌碗s從而增強程序的抵抗性能。預(yù)防混淆較多時候都是具有一定的針對性。內(nèi)部數(shù)據(jù)混淆和控制混淆都會在增加程序復雜度的同時造成程序執(zhí)行效率的下降,而代碼外形混淆則不會影響執(zhí)行效率。
3.標示符重命名混淆算法
標示符重命名混淆屬于代碼外形混淆的范疇。它是將字節(jié)碼文件中的一些類名、接口名、方法名等替換為其他無意義的名字。這并沒有造成程序的額外開銷,抗攻擊能力也不強。
重命名是因為進行內(nèi)部數(shù)據(jù)混淆和控制混淆時都會增加程序的開銷,而這并不是我們想要的。有時候我們經(jīng)常需要一種可以抵抗攻擊并且不會造成程序執(zhí)行效率下降的算法,而重命名混淆正是這樣的。當一些名字被毫無意義的字(未完,下一頁)
|