亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種Java程序防篡改響應(yīng)方案的制作方法

文檔序號:6577890閱讀:524來源:國知局
專利名稱:一種Java程序防篡改響應(yīng)方案的制作方法
技術(shù)領(lǐng)域
本方案應(yīng)用于軟件安全領(lǐng)域,提出了一種Java程序的篡改響應(yīng)方法以保護Java 程序的完整性。
背景技術(shù)
隨著計算機軟件產(chǎn)業(yè)的蓬勃發(fā)展,軟件安全問題也日益嚴重。攻擊者向軟件代碼 中嵌入惡意代碼或修改刪除部分代碼以達到自己的目的,如擾亂程序功能,繞過一些功能 從而獲利。作為保護軟件的途徑之一,軟件防篡改技術(shù)阻止程序代碼被非法修改。按實現(xiàn) 防篡改功能的主體劃分,軟件防篡改技術(shù)可分為兩類 外部式通過采用軟件本身之外的手段,來實現(xiàn)軟件的防篡改。這種技術(shù)的實現(xiàn) 不需要被保護軟件本身參與計算。典型的外部式軟件防篡改技術(shù)主要用在可控的運行環(huán)境 中。·自我式在被保護軟件中嵌入相關(guān)模塊以實現(xiàn)防篡改功能。自我式的防篡改機 制分為三步驟(1)檢測檢測被保護的軟件程序是否被篡改,即檢測程序的完整性是否被破壞。(2)觸發(fā)若檢測模塊驗證程序未被篡改,則程序正常運行,否則觸發(fā)響應(yīng)步驟。(3)響應(yīng)使程序無法正常運行,即,擾亂或中止程序的部分或所有功能。隨著多種軟件攻擊方式的出現(xiàn),比如繞過網(wǎng)絡(luò)的訪問控制層;將非法代碼嵌入目 標軟件;完全控制軟件及其運行的平臺等等手段,軟件的運行環(huán)境不再安全,自我式軟件防 篡改技術(shù)更為舉足輕重,它本身不保證程序不被攻擊者篡改,但檢測篡改事件并采取應(yīng)對 措施,導(dǎo)致程序非正常運行,從而使篡改行為失效。目前的防篡改技術(shù)領(lǐng)域中,雖然檢測機制與響應(yīng)機制的作用與地位是等同的,但 前者比后者更受相關(guān)人員的關(guān)注。目前軟件防篡改領(lǐng)域已提出多種篡改檢測方法,如校驗, 哨兵,加密等手段均用來檢測程序的完整性。美國某高校和微軟聯(lián)合提出了一種針對C程 序的篡改響應(yīng)機制,它利用了 C程序中的全局指針,在程序自身檢測被篡改后,在程序某個 合適的函數(shù)中設(shè)置某全局指針為空,在該函數(shù)之后被調(diào)用的函數(shù)若解引用該已被設(shè)為空值 的指針,則導(dǎo)致程序崩潰。該響應(yīng)機制具備幾個優(yōu)點1.將響應(yīng)與程序故障在時間與空間 雙維度分離,即響應(yīng)篡改的位置(在一個函數(shù)中設(shè)置指針為空)與故障發(fā)生的位置(在另 一個函數(shù)中空指針被解引用)不相同;響應(yīng)篡改的時間與故障發(fā)生的時間不相同,解引用 空指針的函數(shù)要在設(shè)置指針為空的函數(shù)調(diào)用返回后過一段時間再被調(diào)用。2.響應(yīng)代碼具 有隱秘性,即將指針置空的語句是簡單的賦值語句,不易被定位。3.程序崩潰具有可預(yù)測 性,即程序經(jīng)檢測被篡改后,將指針置空,程序一定出現(xiàn)異常。同時,該響應(yīng)機制也存在局限 性·未考慮不使用指針及全局變量的程序語言,如Java?!ず雎粤艘粭l通用的編程規(guī)則C程序在解引用指針之前會做安全檢查,即只解引 用非空
指針。該編程規(guī)則將阻礙上述響應(yīng)方案生效。

發(fā)明內(nèi)容
本方案設(shè)計了一種針對Java程序的防篡改響應(yīng)機制。在Java程序被檢測篡改 后,該機制向Java程序中的字節(jié)碼文件添加無條件跳轉(zhuǎn)指令以改變程序的執(zhí)行軌跡,作為 篡改行為的響應(yīng),導(dǎo)致Java程序非法運行。本方案的實施代價較小且不易被攻擊者定位識 破。要解決的技術(shù)問題Java語言具備一次編譯、多次運行的特性,成為支持多種操作系統(tǒng)和硬件平臺的 首選解決方案。Java源程序被編譯成Java字節(jié)碼,即class文件。Java語言這種跨平臺特 性也帶來了安全隱患與其它可執(zhí)行文件相比,對Java字節(jié)碼進行逆向工程和靜態(tài)分析從 而對其篡改更為容易。現(xiàn)有防篡改響應(yīng)方法局限于C語言且忽略了一條重要的編程規(guī)范, 在實際應(yīng)用中無法真正生效。本方案針對Java程序,通過擾亂程序的控制流以實現(xiàn)防篡改 響應(yīng)的目的。該方案具備現(xiàn)有針對C程序的防篡改響應(yīng)方法的優(yōu)點,并且能以三種方式改 變程序正常的執(zhí)行軌跡,更具備實用價值。技術(shù)方案本防篡改響應(yīng)方法解決其技術(shù)問題所采用的技術(shù)方案是在Java程序被檢測篡 改后向Java字節(jié)碼文件中添加無條件跳轉(zhuǎn)指令以改變程序的執(zhí)行軌跡。一個Java字節(jié)碼文件對應(yīng)于一個Java類,類中每一個方法對應(yīng)于Java字節(jié)碼的 一部分,由若干條Java虛擬機指令組成,每一條Java源語句都由一條至多條Java虛擬機 指令與其相對應(yīng)。無條件跳轉(zhuǎn)指令,即goto指令,能夠無條件改變程序的控制流,使程序不 按指令順序執(zhí)行,即從當前goto指令的位置轉(zhuǎn)向goto指令指示的目標位置。程序的選擇 與循環(huán)結(jié)構(gòu)部分通過無條件跳轉(zhuǎn)指令實現(xiàn),由于程序通常包含很多的選擇與循環(huán)結(jié)構(gòu),所 以Java字節(jié)碼跳轉(zhuǎn)指令出現(xiàn)的頻率很高。goto指令的另一特征為Java源程序中不存在 源語句與其直接對應(yīng),這稱為Java源程序與Java虛擬機之間的間隙。本技術(shù)方案的設(shè)計 依據(jù)即基于goto指令自身在Java字節(jié)碼的普遍存在性和Java源程序與Java虛擬機的間 隙這兩點的在檢測篡改行為后,根據(jù)本技術(shù)方案實現(xiàn)的工具集分析Java程序的控制流圖 (控制流圖是一個有向圖,與程序存在一一對應(yīng)關(guān)系,其中,有向圖的結(jié)點對應(yīng)著程序的基 本塊,一個基本塊由若干條順序執(zhí)行的指定組成,它有惟一的入口點和惟一的出口點,有向 圖的邊表示程序流從一個基本塊轉(zhuǎn)向至另一個基本塊,基本塊之間的跳轉(zhuǎn)通過無條件跳轉(zhuǎn) 和條件跳轉(zhuǎn)指令實現(xiàn)。Java中,一個類方法對應(yīng)一個控制流圖),選擇合適的位置向程序中 添加無條件跳轉(zhuǎn)指令重寫class文件,作為對篡改的響應(yīng)。Java虛擬機在執(zhí)行Java字節(jié)碼 文件之前會驗證其格式以確保字節(jié)碼具備正確的內(nèi)部結(jié)構(gòu),符合JAVA虛擬機規(guī)范。添加的 無條件跳轉(zhuǎn)指令需滿足這一條件,新指令的插入位置及其目標位置都需被考慮。該響應(yīng)方法將以三種方式影響程序的執(zhí)行軌跡,解釋如下1.提前中斷程序。如圖2所示,在基本塊Bl的出口與基本塊B4的入口之間增添一條跳轉(zhuǎn)指令?;?塊B2或B3不被運行,程序的執(zhí)行軌跡由Bl- > B2- > B4或Bl- > B3- > B4變化成Bl- > B4,程序?qū)⑻崆巴顺觥?br> 4
2.降低程序的性能。如圖3所示,跳轉(zhuǎn)指令被插在基本塊B3的出口,跳轉(zhuǎn)指令的目標僅次于基本塊B2 的入口。此操作導(dǎo)致B2與B3之間產(chǎn)生一個循環(huán)體,程序陷入一個循環(huán)式運行軌跡B2- > B3- > B203.生成不正確的運行結(jié)果。圖4對應(yīng)程序的功能是隨機產(chǎn)生一個整數(shù)并輸出。在基本塊B6的出口與基本塊 B4的出口之間添加一條跳轉(zhuǎn)指令,程序?qū)⒊尸F(xiàn)出不確定的運行行為。原有的控制流圖存在 一條選擇性的軌跡流基本塊B4會隨機生成一個整數(shù),如果生成的整數(shù)大于50,將轉(zhuǎn)向基 本塊B5,否則轉(zhuǎn)向基本塊B6。添加的跳轉(zhuǎn)指令使程序流變成非確定性的,它導(dǎo)致B4與B6 之間產(chǎn)生一個循環(huán)體,該循環(huán)體被不斷執(zhí)行直至B4生成的整數(shù)大于50,程序流才轉(zhuǎn)向B5。 即程序可能輸出多次結(jié)果。本技術(shù)方案采用如下的系統(tǒng)架構(gòu)實現(xiàn),由四個模塊組成控制流分析模塊;數(shù)據(jù) 流分析模塊;響應(yīng)代碼注入模塊;混淆模塊。系統(tǒng)以由Java程序創(chuàng)建的原始Jar包作為輸 入對象,以作為發(fā)布使用的Jar包作為輸出對象。系統(tǒng)按下列四個步驟處理原始Jar包1.控制流分析模塊計算由原始Jar包代表的宿主程序?qū)?yīng)的控制流圖。更準確地 說,每一個字節(jié)碼文件中的每一個方法對應(yīng)一個控制流圖。計算一個Java方法的控制流圖 的方法如下·劃分基本塊掃描Java方法所表示的字節(jié)碼中的指令序列,根據(jù)每一條指令是 否為跳轉(zhuǎn)指令確定每個基本塊及入口和出口?!ひ罁?jù)基本塊的出口指令確定基本塊之間的跳轉(zhuǎn)聯(lián)系。 檢查控制流圖的連通性,保證每一個基本塊與其他基本塊之間都存在路徑。得到 最終的控制流圖。2.數(shù)據(jù)流分析模塊計算每一個方法可插入的無條件跳轉(zhuǎn)指令集合,本模塊選擇以 基本塊出口為無條件跳轉(zhuǎn)指令的插入位置,基本塊入口為其跳轉(zhuǎn)目標位置。按照Java虛擬 機規(guī)范,變量必須在使用前被定義,添加的跳轉(zhuǎn)指令跨越基本塊,可能違反這一要求。數(shù)據(jù) 流分析技術(shù)可以計算每一個變量被定義的基本塊及其被使用的基本塊集合,獲得滿足上述 要求的可跳轉(zhuǎn)的基本塊集合,進而得到可插入的無條件跳轉(zhuǎn)指令集合。該步驟為第3個步 驟插入防篡改代碼做好準備。3.用戶根據(jù)第2個步驟的計算結(jié)果選擇被操縱的方法名及待添加無條件跳轉(zhuǎn)指 令的插入位置和目標位置,生成配置文件。響應(yīng)代碼注入模塊利用配置文件向原始Jar包 注入防篡改代碼指令,生成中間Jar包。4.混淆模塊對上述步驟生成的中間Jar包實施混淆操作,獲得最終發(fā)布的Jar包。 本系統(tǒng)使用外部混淆器與系統(tǒng)集成。本模塊是可選的,目的是降低和序代碼的可讀性進而 加強對程序的保護。有益效果本防篡改響應(yīng)方法的有益效果是,針對Java程序,對攻擊者的篡改行為做出響 應(yīng),使得程序非正常運行,抵制攻擊者的攻擊行為。它具有以下3個優(yōu)勢1.隱密性。添加的跳轉(zhuǎn)指令不易被攻擊者定位。跳轉(zhuǎn)指令不調(diào)用JavaAPI Java 程序中的條件選擇及循環(huán)結(jié)構(gòu)編譯成Java字節(jié)碼,都包含跳轉(zhuǎn)指令。而程序中往往包含大量的條件選擇及循環(huán)結(jié)構(gòu)。因此,添加的跳轉(zhuǎn)指令與Java程序?qū)?yīng)的字節(jié)碼自身具有高度 相似性。2.低消耗。向程序添加跳轉(zhuǎn)指令的花費是很小的。利用Java字節(jié)碼操縱工具比 如BCEL即可輕易實現(xiàn)。3.改變程序流圖的性質(zhì)。根據(jù)歸約性理論,向程序中添加跳轉(zhuǎn)指令,有很大可能將 程序的控制流圖從可歸約的改變?yōu)椴豢蓺w約的,這也是混淆技術(shù)使用的一種方法。進一步 的,更改程序控制流圖的可歸約性能夠應(yīng)用于抵抗程序的靜態(tài)分析,一些反編譯工具如Jad 無法對中轉(zhuǎn)換后的程序成功實施反編譯。該種改變程序流圖的方法可以在一定程度上抑制 反編譯器。


下面結(jié)合附圖和實施例對本實用新型進一步說明。圖1是本說明書的摘要附圖,它描繪了本技術(shù)方案采用的核心手段。圖2是添加的跳轉(zhuǎn)指令導(dǎo)致程序提前中斷示意圖。圖3是添加的跳轉(zhuǎn)指令降低程序性能示意圖。圖4是添加的跳轉(zhuǎn)指令導(dǎo)致程序產(chǎn)生錯誤的執(zhí)行結(jié)果示意圖。圖5是本技術(shù)方案的系統(tǒng)架構(gòu)。圖5中的“Valid tuples”代表一個集合,該集合 每個元素是一個二元組,記作(a,b),a表示可插入的跳轉(zhuǎn)指令的起始位置,b表示對應(yīng)的目 標指令位置。圖2,圖3,圖4采取相同的結(jié)構(gòu)左測為控制流圖;右側(cè)明確標記了每一個基本塊 的入口與出口虛擬機指令。
具體實施例方式在圖4的Control Flow Analysis模塊中,用戶選擇Java程序路徑,即輸入一個 Jar包的路徑名;選擇保存程序?qū)?yīng)控制流圖信息的文件夾,一個class文件所有方法對應(yīng) 的控制流圖的信息存儲在一個文件中。該模塊根據(jù)輸入的Jar包,依次分析每一個class 文件根據(jù)類文件名創(chuàng)建相應(yīng)的存儲控制流圖信息的文件,該文件的格式為*. CIF(control flow graphinformation file的縮寫);計算控制流圖并將其信息保存至對應(yīng)的CIF文件 中,該文件記錄了對應(yīng)的class文件路徑名。在圖4的Data FlowAnalysis模塊中,用戶選擇存儲控制流圖信息的文件夾路徑 名。該模塊依次解析所選文件夾下每一個*. CIF文件獲取其代表class文件中每一個方 法的控制流圖信息,計算可插入的無條件跳轉(zhuǎn)指令的位置集合,并寫回*. CIF文件。圖4的Response Code Injection模塊向用戶循環(huán)呈現(xiàn)每一個class文件中每 一個方法可插入的無條件跳轉(zhuǎn)指令的位置集合;用戶選擇欲添加的無條件跳轉(zhuǎn)指令位置生 成用戶配置文件;該模塊依據(jù)用戶配置文件向class文件添加無條件跳轉(zhuǎn)指令作為響應(yīng)代 碼,重寫并保存class文件;處理完最后一個class文件之后,該模塊將所有的class文件 與相關(guān)資源文件重新打包生成中間Jar包。圖5的Obfuscator模塊將中間Jar包進行混淆,生成最終發(fā)布Jar。
權(quán)利要求
一種防篡改響應(yīng)機制,在程序被檢測篡改后向程序中添加相關(guān)代碼導(dǎo)致程序非正常運行,作為篡改行為的自我響應(yīng),以達到保護程序的目的,其特征是針對Java程序向Java字節(jié)碼中添加無條件跳轉(zhuǎn)指令作為響應(yīng)代碼。
2.根據(jù)權(quán)利要求1所述的防篡改響應(yīng)機制,其特征是在檢測機制檢測Java程序被篡 改后觸發(fā)響應(yīng),分析Java程序經(jīng)編譯后生成的字節(jié)碼文件對應(yīng)的控制流圖,計算可插入的 無條件跳轉(zhuǎn)指令的位置集合,再由用戶選擇向字節(jié)碼中插入無條件跳轉(zhuǎn)指令。
3.根據(jù)權(quán)利要求1所述的防篡改響應(yīng)機制,其特征是以Java字節(jié)碼對應(yīng)類文件的每 一個方法為分析對象,計算其控制流圖;依照數(shù)據(jù)流分析手段,確定可添加的跳轉(zhuǎn)指令位置 及其跳轉(zhuǎn)目標位置,保證添加的跳轉(zhuǎn)指令仍然能夠通過Java虛擬機驗證,Java程序仍然能 夠運行。
全文摘要
一種針對Java程序的軟件保護技術(shù),屬于軟件保護技術(shù)領(lǐng)域中的軟件防篡改分支。該技術(shù)方案在Java程序被檢測篡改后向Java程序?qū)?yīng)的字節(jié)碼文件中添加無條件跳轉(zhuǎn)指令修改程序控制流圖,以此作為響應(yīng),從而擾亂程序正常的運行,有效地抵抗攻擊者的篡改行為。此方法是自我響應(yīng)式的,能夠以三種方式影響程序的執(zhí)行軌跡提前中斷程序;降低程序性能;導(dǎo)致程序生成錯誤結(jié)果。實施該方案是低消耗的,并且利用了Java程序格式自身特點操縱Java字節(jié)碼,添加的響應(yīng)代碼與Java字節(jié)碼具有相似性,該方案具有高度隱秘性。
文檔編號G06F21/00GK101872393SQ20091013562
公開日2010年10月27日 申請日期2009年4月23日 優(yōu)先權(quán)日2009年4月23日
發(fā)明者李嘉, 申曉東 申請人:李嘉;申曉東
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1