国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

軟件特征和軟件水印在軟件保護(hù)中的應(yīng)用研究

2018-12-13 09:08李冬冬龐巖梅
關(guān)鍵詞:指令集胎記特征值

范 潔 李冬冬 龐巖梅

(北京電子科技學(xué)院網(wǎng)絡(luò)空間安全系 北京 100070)

0 引 言

隨著計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,軟件也從傳統(tǒng)的計(jì)算機(jī)軟件發(fā)展到智能手機(jī)APP,這給人們的生活帶來了無窮的便利。同時(shí),軟件盜版、軟件篡改、軟件攻擊等事件頻頻發(fā)生,嚴(yán)重地影響著軟件生產(chǎn)者和使用者的利益。軟件保護(hù)技術(shù)日益受到政府、企業(yè)和研究者的重視。本文綜合運(yùn)用軟件水印術(shù)和軟件特征技術(shù),提出了一種基于靜態(tài)水印和軟件指令集的軟件特征值提取方法,并設(shè)計(jì)了軟件特征值在軟件保護(hù)中的具體應(yīng)用方案。將提取出軟件特征值經(jīng)軟件開發(fā)者對(duì)稱加密后隨軟件一起打包發(fā)售給使用者,可在軟件運(yùn)行不正常時(shí),鑒定軟件是否遭受破壞,或在軟件發(fā)生盜版時(shí)追溯盜版源頭。

1 軟件特征

軟件特征是程序本身所擁有的軟件屬性。軟件特征源自于程序的所有相關(guān)信息,包括程序代碼、API調(diào)用頻率、類繼承關(guān)系、線程執(zhí)行序列、數(shù)據(jù)流等。

軟件胎記(Software Birthmark)是在軟件變化時(shí),該軟件特征保持不變的、可用于標(biāo)識(shí)該軟件的屬性。通過對(duì)比兩個(gè)軟件胎記特征的相似性,來判斷軟件的相似性,從而檢測(cè)出軟件是否存在拷貝或盜版。軟件胎記可分為軟件靜態(tài)胎記和動(dòng)態(tài)軟件胎記[1,9]。

定義1軟件靜態(tài)胎記(software static Birthmark):設(shè)P是軟件的程序集合,Extract是從P中提取特征的一種方法,得到程序P在非執(zhí)行狀態(tài)下的靜態(tài)特征集合B,則有Extract(P)→B。

定義2軟件動(dòng)態(tài)胎記(software dynamic Birthmark):設(shè)P是軟件的程序集合,I表示對(duì)P的一個(gè)合法輸入,Extract是從P中提取特征的一種方法,若P運(yùn)行且I不為空集,則稱此時(shí)B為動(dòng)態(tài)胎記,記Extract(P,I)→B。

2 軟件水印

軟件水印通過向軟件程序中嵌入隱藏信息來實(shí)現(xiàn)軟件版權(quán)保護(hù)。在軟件開發(fā)時(shí)可以將含有版權(quán)保護(hù)的信息嵌入到程序的代碼區(qū)、數(shù)據(jù)區(qū)及程序的執(zhí)行過程中。在發(fā)生軟件版權(quán)糾紛時(shí),嵌入到程序的隱藏信息可以被提取出用于判斷軟件的擁有者或者開發(fā)者,協(xié)助鑒定軟件版權(quán)。

靜態(tài)軟件水印是指水印在軟件開發(fā)時(shí)被添加到軟件的數(shù)據(jù)區(qū)或者代碼區(qū),但不在程序的可執(zhí)行流程中,是一種與軟件運(yùn)行狀態(tài)無關(guān)的水印。動(dòng)態(tài)軟件水印與靜態(tài)軟件相反,將水印信息隱藏在程序的執(zhí)行過程中,但只有程序在特定的輸入序列下運(yùn)行時(shí),才能提取出的軟件的水印信息[1,9]。

3 軟件特征值提取方法

軟件反編譯的結(jié)果可以作為軟件的特征。本文使用靜態(tài)水印和軟件反編譯得到的指令集作為軟件特征值提取的來源。首先對(duì)嵌入在軟件中的字符串水印信息進(jìn)行摘要值計(jì)算得到的摘要值為W;再對(duì)軟件進(jìn)行反編譯得到的軟件指令集合進(jìn)行統(tǒng)計(jì),得到指令統(tǒng)計(jì)結(jié)果的集合為P;最后將P和W作為哈希算法的輸入計(jì)算出摘要值作為該軟件的特征值。提取流程如圖1所示。

圖1 軟件特征值提取流程圖

3.1 嵌入靜態(tài)數(shù)據(jù)水印

數(shù)據(jù)水印是將水印嵌入到軟件中的最簡單的方法。這種方法將包含數(shù)據(jù)水印的信息插入軟件中指定的位置。假設(shè)軟件的版權(quán)者為電科院,軟件出售給A公司使用,可以在軟件代碼中插入版權(quán)信息如下:

字符串水印=“版權(quán)&電科院&使用者&A公司”

采用此種方法插入的水印信息雖然簡單,但可以被用來識(shí)別軟件的開發(fā)者和使用者。這種簡單的嵌入與識(shí)別水印的方法可以非常容易地應(yīng)用到軟件中,水印信息由軟件開發(fā)方事先嵌入在軟件中。本文提出的基于靜態(tài)水印和軟件指令集的軟件特征值提取方法,需要使用水印的摘要值作為提取特征值的輸入之一。本文開發(fā)的測(cè)試程序在開發(fā)過程中嵌入靜態(tài)數(shù)據(jù)水印,水印字符串取值為“電科院”代表軟件的開發(fā)者,采用MD5算法對(duì)水印值進(jìn)行哈希計(jì)算,得到水印的摘要值。結(jié)果如圖2所示。

圖2 靜態(tài)數(shù)據(jù)水印摘要值計(jì)算結(jié)果

3.2 反編譯并提取軟件的指令集

軟件反編譯指的是把二進(jìn)制代碼翻譯成匯編助記符。目前有很多專業(yè)的反匯編工具,如IDA Pro(Interactive Disassembly Pro)、W32Dasm等。 .NET中自帶的反編譯工具Ildasm.exe可以對(duì)基于.NET平臺(tái)開發(fā)的軟件進(jìn)行反匯編。

本文使用反編譯工具Ildasm.exe對(duì)在.NET環(huán)境下使用C#語言開發(fā)的測(cè)試程序test.exe進(jìn)行反編譯,并將反編譯結(jié)果存儲(chǔ)在test.il文件中,并在軟件指令提取模塊編程實(shí)現(xiàn)了test.il文件的打開。結(jié)果如圖3所示。

圖3 中間碼文件打開結(jié)果

由圖3可知,可執(zhí)行程序經(jīng)過反編譯得到了指令集,接下來需要對(duì)指令集進(jìn)行統(tǒng)計(jì)分析,得出每個(gè)指令出現(xiàn)的次數(shù)。采用正則表達(dá)公式進(jìn)行多次組合和實(shí)驗(yàn),找到滿足規(guī)律的公式,這也是特征指令提取的關(guān)鍵所在。編程完成特征指令的提取及特征指令的統(tǒng)計(jì),結(jié)果如圖4所示。

圖4 特征指令提取及統(tǒng)計(jì)結(jié)果

至此,得到由test.exe反編譯提取出的特征指令集P:

nop:2;

ldstr:1;

call:3;

pop:1;

ret:2;

ldarg:1;

3.3 基于靜態(tài)水印和軟件指令集的軟件特征值提取

3.1節(jié)詳細(xì)闡述了水印的賦值及水印的摘要值W的獲取方法,3.2節(jié)詳細(xì)闡述了軟件指令集的求取過程。將水印摘要值W和軟件指令集P合成后,再次進(jìn)行摘要計(jì)算將得到的摘要值作為軟件的特征值。本文采用MD5算法作為求取軟件特征值的哈希算法,最終以128比特的哈希值作為軟件的特征值,具體結(jié)果如圖5所示。

圖5 軟件特征值提取結(jié)果

3.4 軟件特征值實(shí)驗(yàn)結(jié)果分析

本文提出的軟件特征值提取方法對(duì)輸入的變化非常敏感,軟件特征值的提取主要依賴于數(shù)據(jù)水印值和軟件反編譯后得到的指令集。下面對(duì)不同的軟件和不同的水印值產(chǎn)生的軟件特征值進(jìn)行比較分析。

從表1分析可以看出,相同的軟件,不同的水印,產(chǎn)生的軟件特征值不同;不同的軟件,相同的水印,產(chǎn)生的特征值也不同。當(dāng)嵌入到軟件中的數(shù)據(jù)水印信息遭到暴力移出后,將對(duì)軟件產(chǎn)生損害,由此產(chǎn)生的軟件指令集與原先的指令集不同,最終產(chǎn)生的軟件特征值與之前的軟件特征值也不同。由軟件特征值對(duì)輸入的敏感性可知,結(jié)合軟件水印信息和軟件指令集的軟件特征值方法可用于軟件保護(hù)。

表1 軟件特征值比較

4 應(yīng)用方案

軟件特征和軟件水印均可用于軟件的版權(quán)保護(hù),但是軟件特征技術(shù)用于軟件版權(quán)保護(hù)時(shí)一般需要可信第三方的支持[5]。本文提出的基于靜態(tài)水印和軟件指令集的軟件特征值提取方法結(jié)合對(duì)稱加密技術(shù),在不需要可信第三方支持的情況下,即可完成軟件完整性鑒定和軟件版權(quán)保護(hù)。軟件特征值在軟件保護(hù)中的具體應(yīng)用方案如圖6所示。由軟件開發(fā)者使用加密口令和對(duì)稱加密算法對(duì)軟件特征值進(jìn)行加密,然后將加密后的軟件特征值文件與可執(zhí)行程序一起打包發(fā)售。

圖6 軟件特征值在軟件保護(hù)中的具體應(yīng)用方案

由于加密后的軟件特征值文件在后續(xù)的版權(quán)保護(hù)和軟件完整性鑒定中非常重要,軟件發(fā)行方應(yīng)當(dāng)以隱秘的方式將密文的特征值文件與可執(zhí)行程序一起發(fā)行,且保證密文的軟件特征值文件在用戶計(jì)算機(jī)中隱密存儲(chǔ)。加密密鑰還需用于解密密文的軟件特征值文件,軟件開發(fā)者務(wù)必妥善保管。

軟件開發(fā)者還需要在本地維護(hù)一個(gè)水印值與軟件特征值映射關(guān)系表,以在未來發(fā)生版權(quán)糾紛或者軟件遭受破壞時(shí)使用。軟件發(fā)行之前,在軟件中嵌入的數(shù)據(jù)水印值和計(jì)算產(chǎn)生的軟件特征值均需填入表2。

表2 水印與軟件特征值映射關(guān)系

4.1 在軟件完整性鑒定中的應(yīng)用

軟件被發(fā)售并在使用者計(jì)算機(jī)上安裝運(yùn)行后,很容易遭受攻擊而導(dǎo)致軟件不能正常運(yùn)行。本文設(shè)計(jì)的基于軟件特征值的軟件保護(hù)保護(hù)方案可以判斷軟件是否遭受到破壞。當(dāng)懷疑軟件遭受到破壞時(shí),首先由軟件發(fā)行者根據(jù)用戶信息和水印生成規(guī)則,產(chǎn)生水印值,對(duì)用戶使用的軟件進(jìn)行反編譯求得軟件指令集,再根據(jù)軟件指令集和水印值產(chǎn)生新的軟件特征值1。接著根據(jù)水印值檢索軟件開發(fā)者存儲(chǔ)的軟件跟特征值表,提取出表中存儲(chǔ)的軟件特征值,稱為軟件特征值2。比較軟件特征值1和軟件特征值2,如果二者相同,說明軟件沒有遭受到破壞;若二者不相同,說明軟件已遭受到破壞。具體過程如圖7所示。

圖7 軟件特征值和軟件水印在軟件完整性鑒定中的應(yīng)用

4.2 在軟件盜版追溯中的應(yīng)用

設(shè)有軟件開發(fā)商A公司將自己開發(fā)的軟件A出售給使用者B使用,發(fā)售時(shí)A在發(fā)售軟件中打包了加密后的軟件特征值文件,也稱密文的軟件特征值的文件。B在使用過程中,不小心被C竊取了軟件,并由在C使用,并且任意擴(kuò)散D、E使用。

A公司發(fā)現(xiàn)C、D、E使用的軟件可能是自己開發(fā)的軟件的盜版版本時(shí),首先從盜版軟件中提取出隱藏的密文的軟件特征值文件,用自己保管的對(duì)稱密鑰解密密文的軟件特征值后,得出軟件特征值。然后檢索自己存儲(chǔ)的軟件特征值表,如找到對(duì)應(yīng)的軟件特征值,再找出對(duì)應(yīng)的水印值,根據(jù)水印值中存儲(chǔ)的使用者信息,找到軟件被盜版的源頭。如果C、D、E在盜版時(shí)對(duì)密文的軟件特征值文件進(jìn)行了刪除或破壞,此時(shí)A公司可以從盜版軟件中嘗試進(jìn)行水印提取。如能提取成功則根據(jù)水印信息判斷軟件的版權(quán)及使用者,確定是否是自己開發(fā)軟件的盜版。具體過程如圖8所示。

圖8 軟件特征值和軟件水印在軟件盜版追溯中的應(yīng)用

5 結(jié) 語

軟件特征是從軟件本身提取出軟件的特有屬性作為識(shí)別軟件的方法。軟件水印是將軟件的版權(quán)信息嵌入到軟件中且不影響軟件的正常使用的技術(shù)。本文在充分研究軟件特征和軟件水印技術(shù)的基礎(chǔ)上,提出了一種基于靜態(tài)水印和軟件指令集的軟件特征值提取方法。

該方法首先基于嵌入到軟件中的靜態(tài)數(shù)據(jù)水印計(jì)算水印摘要值;然后對(duì)軟件進(jìn)行反編譯得出軟件指令集并對(duì)指令集進(jìn)行統(tǒng)計(jì)分析得到有效的指令集合;最后對(duì)水印摘要值和軟件指令集進(jìn)行摘要計(jì)算得到最終的軟件特征值。本文對(duì)提取的軟件特征值設(shè)計(jì)了在軟件保護(hù)中的具體應(yīng)用方案,軟件特征值經(jīng)由軟件開發(fā)商對(duì)稱加密后以密文的軟件特征值文件的方式隨軟件一起打包發(fā)售。當(dāng)軟件運(yùn)行不正?;蛟谲浖艿焦魰r(shí),可用于鑒定軟件的完整性是否遭受到破壞。當(dāng)軟件發(fā)生盜版時(shí),可供軟件開發(fā)者使用追溯盜版源頭。綜上所述,本文提出的基于靜態(tài)水印和軟件指令集的軟件特征值提取方法及其應(yīng)用方案可用于軟件保護(hù),具有實(shí)際應(yīng)用價(jià)值,可在軟件保護(hù)領(lǐng)域推廣使用。

猜你喜歡
指令集胎記特征值
基于Kubernetes的RISC-V異構(gòu)集群云任務(wù)調(diào)度系統(tǒng)①
利用LMedS算法與特征值法的點(diǎn)云平面擬合方法
單圈圖關(guān)聯(lián)矩陣的特征值
寶寶胎記,不可忽視
3DNow指令集被Linux淘汰
凱萊圖的單特征值
如果做夢(mèng)是他人的事
基于Dais—CMX模型機(jī)的斐波那契數(shù)列指令集設(shè)計(jì)
求矩陣特征值的一個(gè)簡單方法
什么是AMD64