• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于版權(quán)信息保護(hù)的軟件安全探究

    2016-12-21 11:00:18師文
    關(guān)鍵詞:分支語句靜態(tài)

    師文

    (中國(guó)移動(dòng)通信集團(tuán)天津有限公司,天津 300308)

    基于版權(quán)信息保護(hù)的軟件安全探究

    師文

    (中國(guó)移動(dòng)通信集團(tuán)天津有限公司,天津 300308)

    本文對(duì)現(xiàn)有的軟件水印技術(shù)及其分類進(jìn)行總結(jié),并著重對(duì)動(dòng)態(tài)軟件水印技術(shù)進(jìn)行闡述。同時(shí)選取了一種基于動(dòng)態(tài)路徑的軟件水印算法,完成了水印信息的編碼與嵌入并分析其靜態(tài)與動(dòng)態(tài)特征,并對(duì)算法的優(yōu)劣性進(jìn)行評(píng)價(jià)。

    軟件安全;版權(quán)保護(hù);軟件水?。粍?dòng)態(tài)軟件水印

    1 引言

    隨著運(yùn)營(yíng)商業(yè)務(wù)面向多元化、移動(dòng)化迅速發(fā)展,越來越多的自主或合作開發(fā)的軟件被投入到生產(chǎn)經(jīng)營(yíng)當(dāng)中。軟件的研發(fā)凝聚了大量的人力和物力,一旦被破解并惡意仿冒,不僅會(huì)給使用者帶來極大的安全風(fēng)險(xiǎn),也會(huì)使開發(fā)方的經(jīng)濟(jì)效益產(chǎn)生不可逆的損失。作為軟件安全的一個(gè)分支,對(duì)軟件著作權(quán)的保護(hù)是開發(fā)者維護(hù)自身合法權(quán)益的一把利劍。軟件水印技術(shù)作為軟件版權(quán)信息保護(hù)的一種重要手段,對(duì)它的研究有著重要的意義。

    1.1 研究背景和意義

    軟件作為這個(gè)時(shí)代的重要產(chǎn)物,由于其使用價(jià)值高,復(fù)制成本低,成為了人們最為熱衷于破解和篡改的對(duì)象。商業(yè)軟件聯(lián)盟的報(bào)告顯示,盜版軟件的泛濫不僅限制了軟件及其相關(guān)行業(yè)的進(jìn)步,還因侵犯知識(shí)產(chǎn)權(quán)導(dǎo)致了大量的經(jīng)濟(jì)損失。對(duì)軟件的邏輯結(jié)構(gòu)等關(guān)鍵信息實(shí)施剽竊、對(duì)于商業(yè)軟件進(jìn)行破解并傳播盜版軟件,這種行為更是給軟件安全留下了極大的后患,因非授權(quán)軟件而引起的信息安全問題屢見報(bào)端。這些種種現(xiàn)象都在警示著我們打擊盜版、維護(hù)軟件產(chǎn)業(yè)健康發(fā)展的緊迫性和必要性。

    1.2 軟件水印技術(shù)研究現(xiàn)狀

    作為數(shù)字水印技術(shù)的一個(gè)分支,軟件水印技術(shù)和常見的軟件保護(hù)方式有所不同。我們通常所見到的軟件版權(quán)保護(hù)方式包括軟件加密狗、軟件加密技術(shù)等,但即使這樣軟件也往往難逃被惡意攻擊的命運(yùn)。軟件水印技術(shù)雖然無法阻止軟件被破解、拷貝,但它隱藏嵌入的版權(quán)信息可用來追蹤盜版源頭,并作為發(fā)生版權(quán)糾紛時(shí)證明開發(fā)者所有權(quán)的重要依據(jù),形成了一種事后保護(hù)的機(jī)制。

    隨著人們愈發(fā)意識(shí)到軟件版權(quán)問題的重要性,越來越多的專家對(duì)于軟件水印技術(shù)有了逐步深入的研究,如基本模塊重排算法、不透明謂詞算法、動(dòng)態(tài)圖水印算法和線程水印算法等。與熱門的音視頻水印技術(shù)研究相比,軟件水印的研究仍處于發(fā)展階段,伴隨軟件產(chǎn)業(yè)和逆向工程的快速發(fā)展,如何將理論研究轉(zhuǎn)向?qū)嵺`,有效地?cái)D壓盜版產(chǎn)業(yè)的生存空間是當(dāng)下亟待解決的重點(diǎn)。

    軟件水印就像是一份版權(quán)聲明,軟件水印技術(shù)可以定義為一種通過向可執(zhí)行程序嵌入一個(gè)唯一的標(biāo)識(shí)符來聲明作者的版權(quán)信息的手段。1999年,美國(guó)亞利桑那大學(xué)的學(xué)者科爾伯格首次提出了軟件水印的形式化系統(tǒng)模型,它由3個(gè)部分構(gòu)成。

    嵌入函數(shù)Embed (P, w, key) → Pw,其中P為原始的程序,w是需要嵌入的水印信息,在假設(shè)破解者已知嵌入算法的前提下,需要添加一個(gè)只有嵌入水印者知曉的信息,即密鑰key,它可以協(xié)助完成水印的嵌入和提取工作,從而輸出帶有水印信息的Pw,一般來說密鑰可以用來決策水印信息將會(huì)被嵌入的位置;提取函數(shù)extract (Pw, key) → w;識(shí)別函數(shù)Recognize(Pw, key, w) → [0.0,1.0],該函數(shù)將水印信息w和密鑰、Pw作為輸入,當(dāng)被檢測(cè)的程序輸出越接近閾值的上限,則可以判定其中包含w的可能性越大。

    2 軟件水印的分類

    按照不同的分類標(biāo)準(zhǔn),軟件水印可以劃分成多種類別。以水印信息加載的時(shí)刻為標(biāo)準(zhǔn)可將軟件水印劃分為靜態(tài)軟件水印與動(dòng)態(tài)軟件水印。

    2.1 靜態(tài)軟件水印

    靜態(tài)軟件水印直接存儲(chǔ)于程序的靜態(tài)區(qū)域之中,嵌入和檢測(cè)靜態(tài)水印不需要運(yùn)行程序就可以完成。根據(jù)在程序中的位置來劃分,又可分為靜態(tài)數(shù)據(jù)水印和靜態(tài)代碼水印。靜態(tài)水印的生成和識(shí)別都相對(duì)容易,不會(huì)耗費(fèi)大量的時(shí)間成本和計(jì)算成本,但是通過一般的編譯器或者代碼優(yōu)化工具就可以識(shí)別到靜態(tài)水印并且加以破壞,其隱藏性和強(qiáng)健性較低,不適宜單獨(dú)作為用于保護(hù)商業(yè)軟件等產(chǎn)品的水印技術(shù)來使用。

    2.2 動(dòng)態(tài)軟件水印

    動(dòng)態(tài)軟件水印存在于動(dòng)態(tài)的內(nèi)部執(zhí)行狀態(tài)中,在某個(gè)特定的時(shí)刻憑借某些特定的輸入來觸發(fā),通過程序指令的執(zhí)行順序或者內(nèi)存地址的走向進(jìn)行信息編碼來構(gòu)造水印信息。這種水印結(jié)構(gòu)不再僅僅是原始程序的文本特征,而是自身被賦予了程序的語義,可避免語義保留變換的攻擊。

    動(dòng)態(tài)軟件水印的基本設(shè)計(jì)思想最早是由Collberg和Thomborson提出的,圖1所示的動(dòng)態(tài)水印算法模型和靜態(tài)水印的基本相似,但取代密鑰部分的,是外界賦予程序P的特殊輸入序列I0, I1, … Ik。若想提取一個(gè)嵌入在程序中的水印,按照特定的序列輸入后,水印信息就會(huì)在程序的“某個(gè)位置”上被構(gòu)造出來,這個(gè)提取的過程可以被簡(jiǎn)化為R(Pw,<I0, I1, …>) → w。輸出的水印信息w可以是程序的輸出、用戶級(jí)的數(shù)據(jù)結(jié)構(gòu)或是一段動(dòng)態(tài)生成的代碼等形式。

    動(dòng)態(tài)軟件水印基本可分成3類:復(fù)活節(jié)彩蛋水印、動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)水印以及動(dòng)態(tài)執(zhí)行軌跡水印。

    2.2.1 復(fù)活節(jié)彩蛋水印

    復(fù)活節(jié)彩蛋水印是最基本且常見的動(dòng)態(tài)軟件水印模型。當(dāng)用戶進(jìn)行了特定的輸入后,這段“彩蛋”代碼就會(huì)被激活,通過一個(gè)功能模塊輸出水印信息,它可以是一段版權(quán)信息,也可以是圖像類等多媒體數(shù)字內(nèi)容。這種水印的隱蔽性極低,抗攻擊性能也很差,除非水印是經(jīng)過悉心設(shè)計(jì)的,讓人無法辨認(rèn)出它是水印而誤判為程序的漏洞或者隨機(jī)的選擇,否則通過一般的程序測(cè)試工具就可以發(fā)現(xiàn)它的觸發(fā)點(diǎn),由于水印的分支結(jié)構(gòu)的有無對(duì)于整體程序的運(yùn)行毫無影響,因此一旦正確的輸入序列被發(fā)現(xiàn),攻擊者就可以輕易地移除或破壞掉彩蛋水印。

    2.2.2 動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)水印

    動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)水印是將水印信息隱匿在程序的鏈表、內(nèi)存堆棧、圖或樹等數(shù)據(jù)結(jié)構(gòu)之中。這些水印信息需要特殊的輸入作為密鑰來觸發(fā),利用程序在執(zhí)行時(shí)將這些數(shù)據(jù)結(jié)構(gòu)構(gòu)造出來。識(shí)別水印時(shí)可利用識(shí)別器動(dòng)態(tài)檢測(cè)該數(shù)據(jù)結(jié)構(gòu),并進(jìn)行提取還原。

    圖1 動(dòng)態(tài)水印算法模型

    該水印與復(fù)活節(jié)彩蛋水印的最大不同點(diǎn)在于,在輸入特定序列后,它沒有將水印直接輸出出來,對(duì)于原代碼本身的輸出不產(chǎn)生影響,較為隱蔽。而且水印的識(shí)別程序未被封裝在程序代碼中,避免泄露水印的位置信息,因而較難被發(fā)現(xiàn)。

    動(dòng)態(tài)圖水?。―ynamic Graph Watermark)是基于動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)水印設(shè)計(jì)的一種具有代表性的水印算法,它的設(shè)計(jì)思想是將水印編碼在一個(gè)拓?fù)鋱D的結(jié)構(gòu)中,并由程序執(zhí)行時(shí)動(dòng)態(tài)地生成。拓?fù)鋱D的建立引入了指針的結(jié)構(gòu),它的使用可以使得圖的結(jié)構(gòu)進(jìn)行不斷變化,使水印信息獲得更好的隱蔽性。

    2.2.3 動(dòng)態(tài)執(zhí)行軌跡水印

    動(dòng)態(tài)執(zhí)行軌跡水印算法的思路是將水印信息嵌入到程序執(zhí)行軌跡上的一些狀態(tài)中。動(dòng)態(tài)執(zhí)行軌跡算法的設(shè)計(jì)旨在填補(bǔ)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)水印應(yīng)對(duì)代碼混淆攻擊時(shí)的不足,即使對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行語義保留的轉(zhuǎn)換,破壞了依賴該結(jié)構(gòu)的水印,但攻擊者無法破壞掉執(zhí)行軌跡本身擁有的程序語義。依據(jù)水印信息被嵌入的程序執(zhí)行軌跡狀態(tài)的不同,可以將動(dòng)態(tài)執(zhí)行軌跡水印分為兩種形式:線程水印和動(dòng)態(tài)路徑水印。

    線程水印算法的思想是通過向原始程序中的某些單線程部分添加新的線程,利用“共享鎖”來表示一個(gè)水印位,并進(jìn)行訪問資源的控制,維持原始程序的語義不變。多線程的水印算法大幅提高了軟件被逆向分析的難度,讓程序可以抵抗語義保留攻擊,但由于添加多線程需要向程序增加大量的代碼、防篡改構(gòu)件等內(nèi)容,會(huì)使原始程序的性能開銷增長(zhǎng),并降低其運(yùn)行速度。若想將線程水印實(shí)際應(yīng)用起來,就需要最大限度地保持原始程序的性能和運(yùn)行效率。

    3 動(dòng)態(tài)路徑軟件水印

    3.1 動(dòng)態(tài)路徑軟件水印的概念

    動(dòng)態(tài)路徑水印是一種較為直觀的動(dòng)態(tài)執(zhí)行軌跡水印算法。它利用程序控制流轉(zhuǎn)移的行為,將指令的運(yùn)行順序、內(nèi)存地址的走向等程序運(yùn)行時(shí)產(chǎn)生的一組執(zhí)行狀態(tài)作為水印信息進(jìn)行編碼。

    它的核心思想是選取一段非條件跳轉(zhuǎn),然后通過一段冗余無效的條件分支所組成的控制轉(zhuǎn)移結(jié)構(gòu)來表示水印信息的二進(jìn)制比特串,將此結(jié)構(gòu)插入到選取的非條件跳轉(zhuǎn)目標(biāo)代碼中。當(dāng)程序代碼被特定的輸入序列(可以是內(nèi)存值、用戶輸入等數(shù)據(jù))所激活時(shí),檢測(cè)插入的這段代碼在運(yùn)行過程中的控制轉(zhuǎn)移行為,對(duì)其解碼分析,從而提取出嵌入的水印信息。

    3.2 算法的思想基礎(chǔ)

    條件分支語句的應(yīng)用范圍非常廣泛,利用這種特性,該算法的實(shí)現(xiàn)形式就是向程序中添加冗余的條件分支語句,當(dāng)被特定的輸入序列激發(fā)時(shí),若執(zhí)行跳轉(zhuǎn)的條件被滿足,就表示1(或0),否則就表示0(或1)。如圖2所示是該算法的一種實(shí)現(xiàn)模型。

    這樣的編碼方式有著它獨(dú)特的優(yōu)勢(shì):首先,條件分支結(jié)構(gòu)對(duì)于維持代碼的語義起著重要的作用,當(dāng)攻擊者打算向檢測(cè)到的分支結(jié)構(gòu)做置反、剔除或干擾等攻擊時(shí),都需要謹(jǐn)慎行事以維持程序原有的語義;其次,由于條件分支的取值永遠(yuǎn)是永真或永假的,非常利于水印信息以二進(jìn)制比特流的形式嵌入;再次,由于條件分支語句一般是普遍存在于代碼中的,插入與原代碼相似的分支語句可以一定程度避免統(tǒng)計(jì)分析的攻擊。

    圖2 實(shí)現(xiàn)模型

    3.3 可抗攻擊的水印算法實(shí)現(xiàn)

    在實(shí)際的應(yīng)用中,單憑以上的結(jié)構(gòu)體無法抵抗得住攻擊,攻擊者只需要對(duì)其中跳轉(zhuǎn)條件做置反變換,如將“if ( M ) N else P”的語句變?yōu)椤癷f(!M)P else N”就可以將水印破壞掉。因此,需要采用一種能對(duì)抗這種攻擊的方案,在此引入“路徑”的概念。

    3.3.1 路徑

    以循環(huán)語句為例,將程序中被重復(fù)調(diào)用或執(zhí)行的語句劃分為基本語句塊,并為其打上標(biāo)簽,如t1,t2。對(duì)程序的執(zhí)行進(jìn)行追蹤記錄,可以發(fā)現(xiàn)被標(biāo)記的t1,t2塊之間發(fā)生了前向轉(zhuǎn)移(即t1→t2)和后向轉(zhuǎn)移(即t2→t1),而這樣的路徑又是由變量的值所選通的,可以通過改變變量的取值來觸發(fā)嵌入的分支結(jié)構(gòu),并通過基本語句塊之間走向的不同來進(jìn)行二進(jìn)制編碼,以將水印信息嵌入到其中。

    在利用路徑對(duì)水印信息進(jìn)行編碼時(shí),需要區(qū)分前向條件轉(zhuǎn)移和后向轉(zhuǎn)移。通常表示循環(huán)的語句都表現(xiàn)為后向轉(zhuǎn)移(即t2→t1),攻擊者可以利用循環(huán)展開或其它形式的轉(zhuǎn)換來擾亂水印信息。因此利用前向分支來編碼水印的位串更為妥當(dāng)。

    3.3.2 不透明謂詞

    為了防止破解者在對(duì)程序進(jìn)行靜態(tài)分析時(shí)察覺到嵌入水印信息的這段基本不會(huì)執(zhí)行的“死代碼”,需要將其與程序的其余有效部分捆綁在一起,對(duì)偽造的分支結(jié)構(gòu)進(jìn)行代碼混淆以提高其隱蔽性和強(qiáng)健性,因此引入不透明謂詞的使用。不透明謂詞可以是永真/永假的,也可以是真假不定的布爾表達(dá)式。對(duì)于程序執(zhí)行時(shí)必然會(huì)經(jīng)過的路徑其不透明謂詞表現(xiàn)為永真,反之永假。若想反混淆不透明謂詞,就需要攻擊者去破解它的控制流情況。

    3.3.3 水印信息的嵌入

    可抗攻擊水印算法的實(shí)現(xiàn)途徑通常有兩種,一種是利用連續(xù)的if條件分支,一個(gè)語句對(duì)應(yīng)一個(gè)水印位;另一種方式是采用循環(huán)的結(jié)構(gòu)。如圖3(a)描述了如何利用if條件分支來嵌入水印信息。

    假定設(shè)定的特殊輸入序列為“4 3 1 2 4 6 4 5”,實(shí)時(shí)記錄程序中不同變量的取值變化。不難發(fā)現(xiàn)當(dāng)a=b=i=4時(shí),if(a==b)第一次被觸發(fā),當(dāng)a=b=4、i=6時(shí),這部分第二次被執(zhí)行,利用這個(gè)特點(diǎn),向其中添加連續(xù)的if條件分支作為擴(kuò)展,利用這條由條件分支語句組成的控制轉(zhuǎn)移鏈來表示水印信息。使用前文所提到的路徑追蹤方式,如圖3(a)所示,可以產(chǎn)生水印的基本語句塊已被打上了標(biāo)記,為了防止攻擊者的置反變換,第一次追蹤時(shí)不產(chǎn)生水印位,僅記錄每條指令的執(zhí)行結(jié)果,觀察每個(gè)標(biāo)記位置的前向跳轉(zhuǎn)情況,當(dāng)再次執(zhí)行到這里時(shí),若與第一次的跳轉(zhuǎn)情況相同,記為0,否則記為1,當(dāng)程序執(zhí)行完畢時(shí)水印信息10010就被嵌入到了這部分?jǐn)U展之中。同時(shí),在這段代碼中引入了不透明謂詞PF用來進(jìn)行混淆處理,使得u不會(huì)被視為閑置的變量,防止這段代碼被靜態(tài)分析捕捉到。

    有了這種方法,也可以用與if條件語句中真假值相同的表達(dá)式來代替if(a==b)形式,其中表達(dá)式的形式可以是豐富多樣的,例如if(a>0); if(a&1==0)或if(a!=3)等形式。這樣可避免條件分支的形式過于單一,以抵抗模式匹配攻擊。

    圖3 利用if條件分支和循環(huán)嵌入水印信息

    如圖3(b)描述了利用循環(huán)嵌入水印的方式。假定設(shè)定的特殊序列為二進(jìn)制串“010110”,利用右移位運(yùn)算符>>=,對(duì)輸入的序列bits從右向左逐位進(jìn)行測(cè)試,和基于if條件分支語句的實(shí)現(xiàn)原理相同,第一次執(zhí)行時(shí)僅記錄下標(biāo)記語句塊的前向跳轉(zhuǎn)執(zhí)行結(jié)果,當(dāng)再次執(zhí)行到該處時(shí)開始編碼水印位,和第一次記錄的結(jié)果不同記為1,相同記為0,這樣即可得到為11010的二進(jìn)制水印信息。

    為減少程序開銷,可選取源程序中真實(shí)變量作為這段循環(huán)的測(cè)試條件,以提高迷惑性。在這里也引入了不透明謂詞作為混淆,誤導(dǎo)破解者在靜態(tài)分析時(shí)認(rèn)為這段循環(huán)代碼是源程序的一部分,而非死代碼。

    嵌入水印信息時(shí),為了防止攻擊者通過添加轉(zhuǎn)移指令進(jìn)行干擾,需要把水印信息分解成大量相互冗余的片段,并分散到程序的不同地方。即使攻擊者抹掉了一部分的水印,也可以將整個(gè)水印計(jì)算恢復(fù)出來。對(duì)于水印進(jìn)行分割的理論依據(jù)來自孫子定理。對(duì)于切割后的片段,還可以設(shè)置一個(gè)額外的參數(shù)對(duì)其進(jìn)行加密,使得每個(gè)片段看上去是隨機(jī)而且等長(zhǎng)(64 bit)的。

    3.3.4 動(dòng)態(tài)路徑軟件水印算法的特征分析

    根據(jù)水印算法的設(shè)計(jì)思想,若希望嵌入的水印信息具有實(shí)用的價(jià)值,就需要保證水印的二進(jìn)制編碼至少是64 bit,即若想實(shí)現(xiàn)一段有效的水印信息,需要向程序嵌入64個(gè)條件分支語句或是在循環(huán)中進(jìn)行64次按位操作。雖然可以通過重用程序中已有的變量來降低模式匹配的概率,但這一組龐大的分支結(jié)構(gòu)大大降低了水印的隱蔽性,因此在含有動(dòng)態(tài)路徑水印的程序代碼中,會(huì)頻繁地出現(xiàn)對(duì)條件分支或其它函數(shù)的調(diào)用區(qū)域,這也是該算法水印信息的靜態(tài)特征,如圖4展現(xiàn)的嵌入水印信息前后的程序控制流程圖對(duì)比可以很好地反映這一靜態(tài)特征。

    該算法的動(dòng)態(tài)特征表現(xiàn)在程序的控制流向是相對(duì)確定的,無論是通過何種形式的語句完成水印的嵌入,無論變量取值如何,表示水印信息的分支結(jié)構(gòu)在跳轉(zhuǎn)路徑(前向)的選擇上始終與初始設(shè)定的方向相同或相異地執(zhí)行,利用該值的二進(jìn)制屬性即可完成水印信息的嵌入,通過向分支語句末尾加入斷點(diǎn)的形式捕捉每一次的調(diào)用,輸入特定的觸發(fā)序列,并對(duì)控制流進(jìn)行追蹤,觀察跳轉(zhuǎn)路徑即可記錄下動(dòng)態(tài)生成的水印信息。

    3.4 算法的優(yōu)劣性評(píng)價(jià)及改進(jìn)

    由于動(dòng)態(tài)路徑水印在提取時(shí)對(duì)于環(huán)境的要求較高,一些細(xì)微的變化就可能影響水印的提取,對(duì)最終的結(jié)果造成影響,但這可以通過嵌入相互冗余的水印片段來提高它對(duì)于不定環(huán)境的抗干擾能力。

    該算法的最大弱點(diǎn)在于它的隱蔽性較差,在基于條件分支的算法中,需要通過加入按位操作的循環(huán)結(jié)構(gòu)或者至少64個(gè)連續(xù)的if條件分支語句來構(gòu)造水印,這種異常的行為大大削減了算法的隱蔽性,通過靜態(tài)或動(dòng)態(tài)分析可以很容易定位到水印所在的位置。若想將該算法用于實(shí)戰(zhàn),就需要加強(qiáng)它抵抗模式匹配攻擊的能力,在此可以通過一種利用無條件轉(zhuǎn)移指令進(jìn)行混淆的算法來提高動(dòng)態(tài)路徑軟件水印的防篡改能力。

    圖4 嵌入水印信息前后的程序控制流程圖對(duì)比

    如圖5所示,利用混淆將無條件轉(zhuǎn)移指令替換成一個(gè)調(diào)用跳轉(zhuǎn)函數(shù)bf的call指令。當(dāng)bf被調(diào)用時(shí),它需要通過記錄的返回地址a計(jì)算出哈希值并對(duì)應(yīng)查詢表T,以計(jì)算出需要跳轉(zhuǎn)的偏移量b-a,通過計(jì)算將它的返回地址改為b,并執(zhí)行返回命令跳轉(zhuǎn)到無條件轉(zhuǎn)移指令的目標(biāo)地址上,這樣就完成了一次跳轉(zhuǎn)函數(shù)的“無條件轉(zhuǎn)移”。通過在一組無條件轉(zhuǎn)移指令之間,即控制流不會(huì)經(jīng)過的中間地址區(qū)域完成跳轉(zhuǎn)函數(shù)的插入,并通過函數(shù)間跳轉(zhuǎn)方向的分析進(jìn)行二進(jìn)制信息編碼,嵌入水印。該算法利用了難以被找到跳轉(zhuǎn)的正確地址的跳轉(zhuǎn)函數(shù)所具有的防篡改特性,它的優(yōu)點(diǎn)在于對(duì)程序的性能影響非常小,對(duì)于水印信息的大小敏感度不高,但是隱蔽性較差,為了進(jìn)一步進(jìn)行防篡改加固,可以將直接轉(zhuǎn)移指令用一條通過內(nèi)存地址M進(jìn)行間接跳轉(zhuǎn)的指令所替代,提高指令的目標(biāo)地址的隱蔽性。

    圖5 調(diào)用跳轉(zhuǎn)函數(shù)執(zhí)行無條件轉(zhuǎn)移指令

    4 總結(jié)

    軟件是開發(fā)者們勞動(dòng)和智慧的結(jié)晶,它的開發(fā)周期長(zhǎng),工作量大,從研發(fā)到上線都耗費(fèi)了大量的人力、財(cái)力和物力。軟件水印技術(shù)作為一種非常重要的保護(hù)版權(quán)信息的技術(shù),能為開發(fā)者在版權(quán)遭到侵害時(shí)提供有力的版權(quán)歸屬證明。就目前的軟件水印技術(shù)來說,仍有很大的探究空間:相對(duì)于靜態(tài)水印,動(dòng)態(tài)水印已經(jīng)得到了一定的防篡改保護(hù),更難被摧毀,但是沒有絕對(duì)安全且永遠(yuǎn)無法被破解的軟件水印,因此將多種水印技術(shù)相結(jié)合,增大攻擊者破解所消耗的成本,是保護(hù)軟件安全的關(guān)鍵所在。例如可以將動(dòng)態(tài)圖水印與動(dòng)態(tài)路徑水印相結(jié)合,對(duì)動(dòng)態(tài)圖中具有不變性的量建立不透明分支,在不透明分支中嵌入基于路徑的動(dòng)態(tài)執(zhí)行軌跡水?。怀浞诌\(yùn)用靜態(tài)、動(dòng)態(tài)混淆技術(shù)、防篡改技術(shù)對(duì)水印進(jìn)行加固,在水印的強(qiáng)健性、隱蔽性等評(píng)價(jià)指標(biāo)中找到平衡點(diǎn),使得既能達(dá)到版權(quán)保護(hù)的目的,又不會(huì)因負(fù)面影響阻礙軟件的正常使用;技術(shù)和法律是保護(hù)軟件版權(quán)的兩把利劍,目前我國(guó)國(guó)內(nèi)對(duì)于軟件版權(quán)的法律保護(hù)做的并不到位,只有對(duì)技術(shù)手段和法律法規(guī)進(jìn)行共同完善,才能為軟件安全保駕護(hù)航。

    Software security based on copyright information protection: a survey

    SHI Wen
    (China Mobile Group Tianjin Co., Ltd., Tianjin 300308, China)

    This paper surveys the state of the art of software watermarking and its classifi cation. It also describes the dynamic software watermarking technology. And it realizes the algorithm based on the principle of dynamic path-based watermarking and embeds the copyright information into the program code. This paper also analyzes both static and dynamic characteristics of dynamic path-based software watermarking and evaluates advantages and disadvantages of the algorithm.

    software security; copyright protection; software watermarking; dynamic software watermarking

    TN918

    A

    1008-5599(2016)12-0036-07

    2016-11-25

    猜你喜歡
    分支語句靜態(tài)
    靜態(tài)隨機(jī)存儲(chǔ)器在軌自檢算法
    重點(diǎn):語句銜接
    巧分支與枝
    一類擬齊次多項(xiàng)式中心的極限環(huán)分支
    精彩語句
    機(jī)床靜態(tài)及動(dòng)態(tài)分析
    具7μA靜態(tài)電流的2A、70V SEPIC/升壓型DC/DC轉(zhuǎn)換器
    如何搞定語句銜接題
    生成分支q-矩陣的零流出性
    50t轉(zhuǎn)爐靜態(tài)控制模型開發(fā)及生產(chǎn)實(shí)踐
    上海金屬(2013年6期)2013-12-20 07:57:59
    当阳市| 西昌市| 江阴市| 大宁县| 田林县| 新昌县| 道真| 甘德县| 兴仁县| 基隆市| 无棣县| 徐州市| 社旗县| 南靖县| 平凉市| 渝中区| 云霄县| 东辽县| 沐川县| 临朐县| 贵港市| 高雄县| 九龙坡区| 许昌市| 高州市| 阳春市| 恩平市| 济源市| 德化县| 湖南省| 岳阳市| 宜黄县| 昭苏县| 海丰县| 安溪县| 鹤庆县| 丰县| 焦作市| 阿拉善右旗| 通州区| 新巴尔虎左旗|