亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于程序控制流的靜態(tài)軟件胎記算法研究

        2020-03-13 10:55:38趙雅霖雷聚超唐俊勇
        關(guān)鍵詞:指令程序檢測(cè)

        趙雅霖 雷聚超 唐俊勇

        (西安工業(yè)大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 陜西 西安 710021)

        0 引 言

        隨著網(wǎng)絡(luò)高速發(fā)展,人們對(duì)各種軟件的使用也越來(lái)越頻繁,軟件給人們生活帶來(lái)了極大的便利和巨大的經(jīng)濟(jì)效益。在這些利益的背后,很多商家或者個(gè)人通過(guò)不正當(dāng)手段來(lái)盜取他人的軟件以獲取非法利益,給軟件著作者帶來(lái)了很大的損失。商業(yè)軟件聯(lián)盟(BSA)在2018年全球軟件調(diào)查報(bào)告中指出,全球PC的軟件盜版率為37%,而中國(guó)的軟件盜版率更是高達(dá)66%。盜版軟件每年造成的損失高達(dá)3 590億美元??梢?jiàn),盜版軟件嚴(yán)重危害了版權(quán)所有者的利益。

        針對(duì)軟件抄襲問(wèn)題,目前主要有兩種解決方法。一種是對(duì)軟件本身的保護(hù),保證軟件不被盜?。涣硪环N是在軟件被盜取之后,通過(guò)找到軟件中可以證明軟件版權(quán)信息的方法來(lái)維權(quán)。由于Java具有跨平臺(tái)運(yùn)行和開(kāi)源的特點(diǎn),利用逆向分析手段將Java指令恢復(fù)為源代碼很容易,因此無(wú)法做到對(duì)軟件的絕對(duì)保護(hù)。在軟件被盜取后,目前常見(jiàn)的證明手段是通過(guò)軟件水印[1]或軟件胎記[2]的方法。軟件水印是指向軟件代碼中嵌入唯一的標(biāo)識(shí)符的技術(shù)手段,盡管在嵌入的時(shí)候已經(jīng)對(duì)這些信息做了一些隱蔽處理,但目前可以通過(guò)多種方法對(duì)這些水印進(jìn)行篡改和移除。

        軟件胎記是指程序中一些與生俱來(lái)的,固有的特征,它具有很強(qiáng)的抗攻擊能力,無(wú)論代碼被進(jìn)行了怎樣的篡改和迷惑,其胎記依然保持不變。在軟件胎記的研究中,陳林等[3]提出一種將程序中所有k-gram碎片頻率構(gòu)成向量生成的軟件胎記算法;Xie等[4]則在計(jì)算k-gram碎片對(duì)單種語(yǔ)義保持變換的頻數(shù)變化率的基礎(chǔ)上,統(tǒng)計(jì)出各碎片的抗攻擊值構(gòu)建胎記向量,以此來(lái)判定抄襲行為。以上兩種軟件胎記一定程度上克服了指令集胎記健壯性不強(qiáng)的問(wèn)題,但并沒(méi)有從本質(zhì)上解決問(wèn)題,因?yàn)樵斐烧Z(yǔ)義丟失的根本原因在于k-gram算法本身。Schuler等[5]提出了基于Java平臺(tái)的API動(dòng)態(tài)軟件胎記算法。Park等[6]提出了一種由靜態(tài)分析程序后得到的API蹤跡的集合生成的軟件胎記算法,但是目前已有研究者提出了針對(duì)系統(tǒng)調(diào)用的攻擊方法使該軟件胎記算法失效。

        本文提出了一種基于控制流的靜態(tài)軟件胎記算法。首先,提取中間文件中的控制流結(jié)構(gòu),并以圖的形式進(jìn)行存儲(chǔ)。其次,對(duì)軟件胎記中的可達(dá)方法引用指令進(jìn)行解引用處理,并對(duì)其中的冗余指令進(jìn)行約減處理,為軟件胎記的比較降低一定的復(fù)雜度,以提高胎記的可信性。最后通過(guò)一種基于VF2[7]算法的胎記對(duì)比模型得出胎記的相似度,進(jìn)而判定兩軟件是否抄襲。

        1 傳統(tǒng)軟件胎記算法

        軟件胎記的概念是由Grover[8]提出的,一個(gè)完整的軟件胎記抄襲檢測(cè)模型主要由兩個(gè)函數(shù)組成:

        (1)

        式中:BP表示程序P的胎記,extract()表示軟件胎記的特征提取函數(shù),similarity為[0,1]區(qū)間上的實(shí)數(shù)。式(1)表明了軟件胎記是由一個(gè)軟件胎記提取算法對(duì)軟件的一方面或多方面特征提取的產(chǎn)物,軟件胎記的相似度是由軟件胎記比較模型對(duì)比兩個(gè)軟件胎記計(jì)算出的數(shù)值,該數(shù)值在0到1之間,通過(guò)該數(shù)值確定軟件是否抄襲。

        1.1 使用軟件胎記檢測(cè)程序抄襲

        使用靜態(tài)軟件胎記進(jìn)行程序檢測(cè)分為以下三步:首先,對(duì)源程序和可疑程序的源碼或中間文件及可執(zhí)行碼進(jìn)行靜態(tài)分析,獲取源程序及可疑程序中的一項(xiàng)或多項(xiàng)特征,通過(guò)對(duì)特征的加工,獲得源程序和可疑程序的軟件胎記。其次,針對(duì)提取出的軟件胎記構(gòu)建一個(gè)比較模型,該模型以源程序及可疑程序的軟件胎記為輸入,輸出兩胎記之間的相似值。最后通過(guò)相似值判定程序是否抄襲,設(shè)α為閾值,P、Q為兩個(gè)程序,BP、BQ分別為兩個(gè)程序的胎記,則軟件抄襲的判定標(biāo)準(zhǔn)為:

        (1) 若comp(BP,BQ)≥1-α,則P、Q為抄襲關(guān)系;

        (2) 若comp(BP,BQ)≤α,則P、Q為非抄襲關(guān)系;

        (3) 若comp(BP,BQ)<1-α或comp(BP,BQ)>α,則P、Q關(guān)系不確定。

        1.2 傳統(tǒng)k-gram胎記

        k-gram軟件胎記是由Myles等[9]提出的,主要思想是從程序指令中提取k-gram碎片,將所提取的所有碎片作為一個(gè)集合來(lái)表示軟件胎記。在提取k-gram碎片時(shí),主要以滑動(dòng)窗口的方式去提取,即按照其物理相鄰地址去劃分。僅考慮物理關(guān)系而不考慮其邏輯關(guān)系或內(nèi)部的控制流情況。

        1.3 軟件胎記的評(píng)價(jià)體系

        軟件胎記的屬性有兩種,分別為可信性和健壯性。

        定義1軟件胎記的可信性:設(shè)P和Q是非抄襲關(guān)系的兩個(gè)程序,extract為軟件胎記的提取函數(shù),Bp與BQ分別為兩個(gè)軟件的軟件胎記,BP=extract(P),BQ=extract(Q),如果BP≠BQ,則稱extract函數(shù)具有可信性。

        定義2軟件胎記的健壯性:設(shè)程序P′是程序P的抄襲程序,extract為軟件胎記的提取函數(shù),Bp與BP′分別為兩個(gè)程序的軟件胎記,BP=extract(P),BP′=extract(P′),如果BP=BP′,則稱extract函數(shù)具有健壯性。

        在系統(tǒng)完成建模之后,通過(guò)精確率(Precision)、召回率(Recall)、F度量值(F-Measure)進(jìn)行評(píng)價(jià)。

        在樣本中,設(shè)T為檢測(cè)結(jié)果正確,F(xiàn)為檢測(cè)結(jié)果錯(cuò)誤。TP表示將盜版程序?qū)z測(cè)為盜版程序?qū)Γ琓N表示將非盜版程序?qū)z測(cè)為非盜版程序?qū)?,F(xiàn)P表示將非盜版程序?qū)z測(cè)為盜版程序?qū)Γ現(xiàn)N表示將盜版檢測(cè)為非盜版程序?qū)Α?/p>

        精確率:盜版檢測(cè)結(jié)果的正確率,即檢測(cè)結(jié)果為盜版的程序?qū)χ袑?shí)際結(jié)果確實(shí)是盜版的比率,計(jì)算公式為:

        召回率:盜版檢測(cè)結(jié)果的正確率,即檢測(cè)結(jié)果為盜版的程序?qū)χ袑?shí)際結(jié)果確實(shí)是盜版的比率。計(jì)算公式為:

        F值計(jì)算公式為:

        2 改進(jìn)的軟件胎記算法

        本文提出一種基于程序控制流的軟件胎記,使用該軟件胎記對(duì)程序?qū)M(jìn)行抄襲檢測(cè)分為以下三步:

        首先,對(duì)Java源程序P與Java可疑程序Q通過(guò)分析各自對(duì)應(yīng)的Class中間文件獲取其對(duì)應(yīng)的控制流特征,將兩程序的控制流特征加工為各自的靜態(tài)軟件胎記。

        其次,構(gòu)建一種基于VF2算法的控制流特征靜態(tài)胎記對(duì)比模型,計(jì)算兩胎記之間的相似度作為源程序與可疑程序之間的相似度。

        最后,設(shè)置檢測(cè)閾值α,使用式(2)所示的判定標(biāo)準(zhǔn)得出兩程序是否抄襲的結(jié)論。

        其流程如圖1所示。

        圖1 抄襲檢測(cè)流程圖

        目前,Java的字節(jié)碼指令共有203個(gè),按照功能可分為10種[10],但從控制流的角度來(lái)說(shuō),本文將指令分為3種:

        單后繼指令:該種指令在讀取完該指令及操作數(shù)后將下一個(gè)字節(jié)翻譯為指令。

        雙后繼指令:該種指令必定附帶操作數(shù),并且在指令附帶的操作數(shù)中必定帶有一個(gè)offset部分。

        非正規(guī)金融組織迎合人們追求發(fā)家致富的心理,通過(guò)預(yù)期高收益誘使大量的農(nóng)村資金進(jìn)入,當(dāng)其經(jīng)營(yíng)狀況不善時(shí),利息只能靠新發(fā)展的存款來(lái)支付,當(dāng)沒(méi)有足夠的新存款來(lái)付息和還本時(shí),就會(huì)發(fā)生嚴(yán)重的社會(huì)風(fēng)波,影響社會(huì)安定。由于缺乏金融風(fēng)險(xiǎn)意識(shí),農(nóng)村經(jīng)濟(jì)主體這種逐利的投機(jī)心理甚至被一些不法分子所引導(dǎo),脫離正常的金融活動(dòng),演變成非法集資等各種經(jīng)濟(jì)詐騙行為,導(dǎo)致農(nóng)村金融秩序混亂和農(nóng)村社會(huì)動(dòng)蕩。

        多后繼指令:該種指令在整個(gè)體系中只有兩條,分別是lookupswitch與tableswitch,這兩條指令都是由switch結(jié)構(gòu)編譯而來(lái)。當(dāng)switch結(jié)構(gòu)中的case值比較稀疏時(shí),會(huì)生成lookupswitch,反之則會(huì)生成tableswitch。這類指令的后繼指令數(shù)目不定,由case分支的數(shù)目決定。

        Java語(yǔ)言用這三類指令即可構(gòu)成程序中最基本的三種控制流結(jié)構(gòu):分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和順序結(jié)構(gòu)。其中雙后繼指令和多后繼指令構(gòu)成了分支結(jié)構(gòu)中的if和switch結(jié)構(gòu),順序結(jié)構(gòu)和循環(huán)結(jié)構(gòu)均由單后繼指令構(gòu)成,稍有不同的是循環(huán)結(jié)構(gòu)中一定會(huì)有一個(gè)goto指令,其后繼是指向之前的某條指令。所有程序的控制流結(jié)構(gòu)均由以上三種基本控制流結(jié)構(gòu)組合而成。

        2.1 生成基于控制流的靜態(tài)程序胎記

        Class文件作為編譯的中間文件,為JVM提供了所有運(yùn)行期必要的符號(hào)信息。一個(gè)Class文件中最主要信息的就是Method數(shù)組中的CodeAttribute,該屬性表記錄了源程序經(jīng)編譯后產(chǎn)生的指令數(shù)組,JVM在運(yùn)行期通過(guò)遍歷該數(shù)組來(lái)執(zhí)行一個(gè)方法。由于JVM的字節(jié)碼指令體系是基于棧的變長(zhǎng)指令體系,所以本文使用map的結(jié)構(gòu)來(lái)存儲(chǔ)程序的控制流信息。

        本文獲取方法M的程序控制流胎記步驟如下:

        (1) 指定jar文件J和迭代深度Rmax,解壓后獲得工程P,設(shè)置Rtemp=1。

        (2) 根據(jù)給定的方法簽名Msign和class文件C,在工程P中獲取方法M的指令數(shù)組,記為code,code首元素必定為一個(gè)指令。

        (3) 遍歷code,根據(jù)虛擬機(jī)字節(jié)碼指令規(guī)范(下稱指令規(guī)范)將字節(jié)數(shù)組code中的信息翻譯到instruction中,步驟如下:

        ① 建立一個(gè)跟code等長(zhǎng)的數(shù)組,記為instruction,建立游標(biāo)index=0。

        ② 將codeindex位置元素拷貝至instructionindex中,查找指令規(guī)范翻譯codeindex為i0,查找指令規(guī)范得到i0的附帶操作數(shù)有l(wèi)en個(gè)字節(jié),codeindex+1至codeindex+len即為i0指令的操作數(shù),將操作數(shù)拷貝至instructionindex元素。

        ③ 將index向后移動(dòng)len+1長(zhǎng)度,重復(fù)②,直至遍歷完code。

        步驟(3)過(guò)程示意圖如圖2所示。

        圖2 instruction生成過(guò)程示意圖

        (4) 遍歷instruction,初始化其中所有不為空的元素的前驅(qū)和后繼,前驅(qū)為0的元素記為起始節(jié)點(diǎn)start,后繼為0的元素記為終止節(jié)點(diǎn)end。記初始化前驅(qū)后繼后的instruction為featurestruct。

        對(duì)如圖3所示的示例程序使用本文提出的胎記提取算法提取出的胎記如圖4所示。

        圖3 示例程序

        圖4 程序胎記示意圖(迭代深度為2)

        2.2 程序控制流胎記的約簡(jiǎn)

        為了對(duì)源程序和可疑程序的胎記進(jìn)行對(duì)比,需要建立一種以圖同構(gòu)算法為核心的對(duì)比模型,而圖同構(gòu)問(wèn)題是NP問(wèn)題,為此,本文提出一種約簡(jiǎn)程序控制流胎記的方法。

        (1) 將胎記B中instruction的所有元素的狀態(tài)初始化為MEANINGLESS。

        (2) 迭代遍歷胎記B中的instruction,設(shè)置所有前驅(qū)數(shù)目不為1或后繼數(shù)目不為1的元素狀態(tài)為MEANINGFUL,特別地,若元素i的后繼數(shù)目大于1,則將i的每個(gè)后繼元素的狀態(tài)也設(shè)置為MEANINGFUL。

        (3) 迭代遍歷胎記B中的instruction,記正在遍歷的元素為i,若i的狀態(tài)為MEANINGLESS,則將i的唯一后繼suc加入至其前驅(qū)pre的后繼集中,將i從其前驅(qū)pre的后繼集中刪除,再將i刪除。

        2.3 使用程序控制流胎記進(jìn)行抄襲檢測(cè)

        本文提出一種使用程序控制流胎記進(jìn)行抄襲檢測(cè)的方法:

        (2) 根據(jù)2.1節(jié)所述方法及步驟(1)中參數(shù),生成源胎記Bsrc與可疑胎記Bd。

        (5) 使用式(2)計(jì)算Msrc與Md的相似度simsrc,d,按照抄襲判定標(biāo)準(zhǔn)和檢測(cè)閾值α給出最終結(jié)論[11]。

        (2)

        3 實(shí)驗(yàn)驗(yàn)證

        本文選擇了4款在業(yè)界廣泛使用的開(kāi)源測(cè)試與分析工具Junit、JMeter、selenium、findbugs,設(shè)置迭代深度Rmax=3,檢測(cè)閾值α設(shè)置為0.3,放大率θ為10,偏置bias為-2。

        本次實(shí)驗(yàn)檢測(cè)同一軟件不同版本之間的對(duì)應(yīng)方法對(duì)與不同軟件之間的隨機(jī)抽取方法,對(duì)于某軟件,在由版本1演進(jìn)至版本2時(shí),較多數(shù)類及方法將會(huì)保留,故同一軟件對(duì)應(yīng)不同版本間的對(duì)應(yīng)方法默認(rèn)結(jié)果為抄襲,即陽(yáng)性。對(duì)不同軟件間的隨機(jī)抽取方法,默認(rèn)其為獨(dú)立開(kāi)發(fā),即陰性。

        為驗(yàn)證本文提出的胎記可信性,抽取8對(duì)陽(yáng)性程序與4對(duì)陰性程序檢測(cè)其實(shí)驗(yàn)結(jié)果,如表1所示。

        表1 程序控制流胎記可信性結(jié)果驗(yàn)證

        由表1可以看出:本文提出的胎記對(duì)受試的14對(duì)程序出現(xiàn)2個(gè)誤判,正確率為85.7%,精確率為87.5%,召回率為87.5%,F(xiàn)度量為87.5;而SKB對(duì)受試的14對(duì)程序出現(xiàn)3個(gè)誤判,正確率為78.6%,精確率為85.7%,召回率為75%,F(xiàn)度量為0.8,兩種胎記受試結(jié)果對(duì)比如圖5所示。

        圖5 程序控制流胎記與SKB效果對(duì)比圖

        為了驗(yàn)證本文提出的胎記的健壯性,從4個(gè)軟件中隨機(jī)尋找各50個(gè)方法,使用proGuard[12]對(duì)共計(jì)200個(gè)受試對(duì)象進(jìn)行迷惑,使用本文提出的胎記對(duì)這200對(duì)程序?qū)M(jìn)行抄襲檢測(cè),結(jié)果如表2所示。

        表2 軟件胎記健壯性結(jié)果驗(yàn)證

        由于是健壯性檢測(cè),故受試程序?qū)Φ膶?shí)際結(jié)果都是陽(yáng)性,不存在FP與FN,對(duì)共計(jì)200對(duì)經(jīng)過(guò)迷惑的程序?qū)Τ霈F(xiàn)23對(duì)誤判,整體正確率為88.5%,說(shuō)明本文提出的胎記具有一定的健壯性。

        4 結(jié) 語(yǔ)

        本文通過(guò)靜態(tài)分析程序的指令流獲取程序的控制流軟件胎記,使用VF2算法來(lái)計(jì)算胎記的相似度,對(duì)常見(jiàn)的四種代碼檢測(cè)和分析工具進(jìn)行胎記可信性和健壯性對(duì)比實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,本文提出的胎記較傳統(tǒng)SKB胎記更具可信性,由于本文的胎記是以中間指令分析為基礎(chǔ),所以更具廣泛適用性,但由于本方法未考慮節(jié)點(diǎn)間的標(biāo)簽,所以仍存在語(yǔ)義丟失的可能。下一步將在兩節(jié)點(diǎn)匹配時(shí)考慮節(jié)點(diǎn)內(nèi)部指令序列的相似對(duì)比因素。

        猜你喜歡
        指令程序檢測(cè)
        聽(tīng)我指令:大催眠術(shù)
        “不等式”檢測(cè)題
        “一元一次不等式”檢測(cè)題
        “一元一次不等式組”檢測(cè)題
        試論我國(guó)未決羈押程序的立法完善
        ARINC661顯控指令快速驗(yàn)證方法
        LED照明產(chǎn)品歐盟ErP指令要求解讀
        “程序猿”的生活什么樣
        英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
        小波變換在PCB缺陷檢測(cè)中的應(yīng)用
        偷拍一区二区三区四区| 无码一区二区三区在线在看| 久久精品韩国日本国产| 美女脱掉内裤扒开下面让人插| 人人妻人人澡人人爽超污| 亚洲永久无码7777kkk| 久久精品国产亚洲av大全相关| 青青视频在线播放免费的| 中文字幕无码中文字幕有码| 国产精品久久久久av福利动漫| 久久频这里精品99香蕉| 伊人狼人激情综合影院| 国产精品无码一区二区三区在| 欧美午夜精品一区二区三区电影| 亚洲国产香蕉视频欧美| 免费av一区男人的天堂 | 亚洲精品一区二区三区蜜臀| 亚洲色图三级在线观看| 亚洲欧洲精品无码av| 亚洲AV毛片无码成人区httP| 淫秽在线中国国产视频| 日韩av无码中文字幕| 人人玩人人添人人澡| www.av在线.com| 久久本道久久综合伊人| 国产农村妇女精品一二区| 综合网在线视频| 亚洲av午夜福利一区二区国产| 欧洲美熟女乱又伦av影片| 久久午夜无码鲁丝片直播午夜精品| 国产高清一级毛片在线看| 日本一区二区三区四区啪啪啪| 国产一区二区三区免费观看在线| 日本VA欧美VA精品发布| 免费国产自拍视频在线观看| 人人妻人人澡人人爽人人dvd| 最新亚洲精品国偷自产在线| 极品av在线播放| 极品av一区二区三区| 全部孕妇毛片丰满孕妇孕交| 国产激情无码Av毛片久久|