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

    采用隱式跳轉(zhuǎn)的控制流混淆技術(shù)

    2021-10-28 05:52:26陳耀陽
    關(guān)鍵詞:基本塊控制流靜態(tài)

    陳耀陽,陳 偉

    南京郵電大學(xué) 計(jì)算機(jī)學(xué)院,南京 210023

    近年來,隨著計(jì)算機(jī)技術(shù)的發(fā)展,針對軟件本身的保護(hù)逐漸引起人們的關(guān)注。對于軟件的攻擊形式有很多種,一般而言,軟件保護(hù)技術(shù)主要對以下三種類型[1]的攻擊進(jìn)行防護(hù):軟件盜版、逆向工程以及軟件篡改。在這幾種攻擊中,逆向工程是相對比較基礎(chǔ)同時也是危害性最大的一種攻擊形式。

    逆向工程[2]是指對一項(xiàng)目標(biāo)產(chǎn)品進(jìn)行逆向分析和研究,在無法輕易獲得必要產(chǎn)品信息的情況下,直接從成品分析,推導(dǎo)產(chǎn)品的設(shè)計(jì)原理。在計(jì)算機(jī)領(lǐng)域中,特別是針對程序的二進(jìn)制代碼進(jìn)行的逆向工程也稱“代碼逆向工程”。一次成功的逆向,對于競爭者而言可以輕易獲取產(chǎn)品中的敏感數(shù)據(jù)、算法以及設(shè)計(jì)思想;而對于惡意攻擊者來說,則可以獲取到軟件中漏洞,從而加以利用,造成嚴(yán)重后果。

    靜態(tài)分析往往是逆向分析的第一步。以Java為代表的語言,需要編譯成與平臺無關(guān)的字節(jié)碼形式,所以可以通過解析字節(jié)碼文件輕易還原出源程序的實(shí)現(xiàn)信息。而對于以C語言為代表的需要編譯成機(jī)器碼的語言,也可以通過翻譯機(jī)器碼從而轉(zhuǎn)化為匯編指令來進(jìn)行代碼分析。所以,通過靜態(tài)分析可以輕易地構(gòu)建軟件的控制流信息,未經(jīng)保護(hù)的控制流信息暴露了包括源程序靜態(tài)結(jié)構(gòu)、代碼邏輯在內(nèi)的大量信息,因此對于許多逆向工具而言,控制流圖都是必須構(gòu)造的數(shù)據(jù)結(jié)構(gòu)。本文研究的主要目的是抵御靜態(tài)代碼分析。

    抵抗靜態(tài)代碼分析特別是控制流分析的主要技術(shù)是代碼混淆,這個概念最早由Collerg等[3]提出并加以分類及實(shí)現(xiàn)。代碼混淆技術(shù)是將一些結(jié)構(gòu)良好、易于理解的代碼轉(zhuǎn)換為難以閱讀分析的代碼,但是還能完整地保留其所實(shí)現(xiàn)的功能,著名的國際C語言混亂代碼大賽[4]就是典型的例子。一般而言,混淆技術(shù)可以分為4類:結(jié)構(gòu)混淆、數(shù)據(jù)混淆、控制流混淆以及動態(tài)混淆。其中控制流混淆的主要目的就是抵御逆向工具對代碼控制流信息的分析,目前應(yīng)用比較廣泛的控制流混淆技術(shù)有指令替換、虛假控制流、控制流平坦化等。但是目前這些技術(shù)都存在一些缺點(diǎn),如通用性差、性能消耗過大、控制流信息隱藏不徹底等。

    鑒于這些現(xiàn)狀,本文提出一種通用的、輕量級的、細(xì)粒度代碼保護(hù)方案。通過對代碼的控制流信息進(jìn)行分析并建立原始控制流圖,之后從基本塊跳轉(zhuǎn)、函數(shù)調(diào)用與變量引用入手,隱藏這些敏感信息,減少靜態(tài)分析時所能獲取到的有價(jià)值信息,實(shí)現(xiàn)對程序的保護(hù)。同時通過構(gòu)建狀態(tài)轉(zhuǎn)移模型和實(shí)施基于環(huán)境密鑰的兩階段加密方案,解決了密鑰安全和密文重復(fù)出現(xiàn)問題,彌補(bǔ)了其他方案的不足,提高了軟件保護(hù)的能力。

    1 相關(guān)工作

    代碼混淆的概念由來已久,在20世紀(jì)90年代末這個概念就已經(jīng)被提出。它的形式有很多,其中最簡單的一種形式是符號混淆,它通過將源碼中的函數(shù)名、類名以及變量名替換成一些無意義的符號,來增加攻擊者的理解難度,具有代表性的項(xiàng)目是ProGuard[5],由于其并不改變原代碼的結(jié)構(gòu),其抗逆向能力非常差,所以現(xiàn)在多作為一種優(yōu)化工具或者其他混淆技術(shù)的輔助工具來使用。

    由于簡單的符號混淆并不能滿足代碼保護(hù)的要求,一些研究人員又提出了結(jié)構(gòu)混淆的概念。結(jié)構(gòu)混淆是從代碼的類、函數(shù)等組成入手,破壞其整體結(jié)構(gòu),增加靜態(tài)分析的復(fù)雜度。這方面比較典型的是Foket等人[6]的研究成果,他們以Java語言為例闡述并實(shí)現(xiàn)了包括類繼承結(jié)構(gòu)平坦化、方法合并、接口合并以及對象創(chuàng)建工廠化在內(nèi)的多種結(jié)構(gòu)混淆技術(shù)。雖然結(jié)構(gòu)混淆能起到一定的抗逆向效果,但是其混淆的粒度較大,實(shí)際的逆向工程中,攻擊者很少會逆向全部代碼,一般都是從一部分關(guān)鍵代碼入手,也被稱為“局部攻擊”,這時就需要更細(xì)粒度的混淆。

    控制流混淆是目前較為流行的方案,它通過修改程序控制流來阻礙攻擊者對代碼進(jìn)行靜態(tài)分析。常用的控制流混淆技術(shù)主要有同義指令替換、不透明分支以及控制流平坦化以及等。

    同義指令替換[7]多是將一些簡單的指令替換為有相同功能但形式非常復(fù)雜的指令,來增大代碼理解難度,如公式(1)所示;但是這種混淆方法有很大的局限性:首先并不是所有的指令都可以替換,多用在算術(shù)運(yùn)算上;其次一般所替換的指令都比較復(fù)雜,也降低了程序的性能。

    虛假控制流又稱為插入不透明謂詞[8],它通過在程序的控制流中插入一些結(jié)果恒定的布爾表達(dá)式來引入虛假分支,如圖1所示;由于被插入的布爾表達(dá)在運(yùn)行過程中值恒等不變,所以虛假分支并不影響程序運(yùn)行,所以這是一種低成本高收益的混淆技術(shù)。生成虛假控制流的不透明謂詞可以分為靜態(tài)不透明謂詞[9]、上下文不透明謂詞[10]以及動態(tài)不透明謂詞[11]等。但是由于不透明謂詞插入后的特征比較明顯,現(xiàn)在已有很多方案[12]可以去識別和去除。虛假控制流混淆雖然改變了代碼的控制流信息,但只是在局部上的修改,難以全局應(yīng)用,并且過多的不透明謂詞也會大幅降低程序性能。

    圖1 虛假控制流Fig.1 Bogus control flow

    控制流平坦化[13]混淆如圖2所示,是通過構(gòu)造分發(fā)器,將原本控制流重構(gòu)為一個類似switch-case的結(jié)構(gòu),由分發(fā)器在運(yùn)行時決定下一個將要執(zhí)行的基本塊。這樣可以徹底打亂原有的控制流圖,具有很強(qiáng)的反逆向能力,但是這種方法只是將控制流信息從形式上打亂,其實(shí)際的控制流信息還是不變,通過分析case的值,也可以局部或者整體還原代碼的控制流信息,重構(gòu)原始的控制流圖。

    圖2 控制流平坦化Fig.2 Control flow flattening

    前面介紹的控制流混淆方案大多都是通過引入額外基本塊來修改源程序控制流圖中基本塊之間的關(guān)系,從而實(shí)現(xiàn)代碼混淆。除此之外,還可以通過修改基本塊的跳轉(zhuǎn)形式來實(shí)現(xiàn)這個目的,也就是將顯示跳轉(zhuǎn)改為隱式跳轉(zhuǎn)。隱式跳轉(zhuǎn)又稱間接跳轉(zhuǎn),是將源程序中的直接跳轉(zhuǎn)形式改為間接形式,這樣無論是反編譯工具還是人為分析,都不能輕易分析任意基本塊的前后關(guān)系,這樣也就阻止了靜態(tài)分析,實(shí)現(xiàn)了程序保護(hù)。這方面比較典型的是Hikari[14]項(xiàng)目,它通過將程序中跳轉(zhuǎn)指令的目標(biāo)地址由明文改為數(shù)組匹配的方式來實(shí)現(xiàn)隱式跳轉(zhuǎn)。但作為一種混淆策略,其實(shí)現(xiàn)形式過于簡單而導(dǎo)致安全性較差(詳見2.1節(jié)分析),同時也僅處理了基本塊之間的跳轉(zhuǎn),對于其他敏感信息并未做相關(guān)的安全保護(hù),所以在實(shí)際應(yīng)用中價(jià)值較低。

    2 基于隱式跳轉(zhuǎn)的混淆技術(shù)

    前一章介紹的幾種代碼保護(hù)技術(shù)中,都只是在宏觀上對控制流進(jìn)行修改,實(shí)際各個基本塊之間的跳轉(zhuǎn)關(guān)系還會保留,而且也不能保護(hù)函數(shù)調(diào)用以及變量引用這些敏感信息。因此,本文通過隱藏基本塊之間的跳轉(zhuǎn)關(guān)系,并在此基礎(chǔ)上對程序其他敏感信息如函數(shù)的調(diào)用以及變量引用也加以隱藏,從而實(shí)現(xiàn)程序的控制流混淆,以此來保護(hù)程序。

    2.1 基本概念

    控制流圖是一個程序的抽象表示,最早由Frances E.Allen提出,它利用圖的形式將一個程序的所有可能執(zhí)行路徑表示出來,不僅是靜態(tài)分析的重要工具,也是現(xiàn)代編譯器所需要維護(hù)的一種重要數(shù)據(jù)結(jié)構(gòu)。一個控制流圖可以表示為,其中V表示基本塊的集合,E則表示連接兩個基本塊之間的路徑的集合,也就是控制流?;緣K是人為地將源程序劃分為一個個基本的功能單元,通常一個函數(shù)或者一個代碼塊包含若干個基本塊,基本塊包含若干條指令,而指令則被認(rèn)為是程序的最小單元。連接兩個基本塊就是控制流,控制流是一個抽象的概念,在實(shí)際代碼中并不會出現(xiàn),而是人為地根據(jù)一些跳轉(zhuǎn)指令去構(gòu)建,它表示了程序在執(zhí)行過程中是如何從一個基本塊轉(zhuǎn)移到另外一個基本塊的。在代碼被編譯過后,無論是編譯為某種字節(jié)碼文件或者是二進(jìn)制文件,都可以根據(jù)指令的含義輕松地構(gòu)建控制流圖。圖3(b)與圖3(c)就是圖3(a)中程序所對應(yīng)的匯編代碼和控制流圖,通過控制流圖可以清晰的知道這段程序可以簡單分為4個基本塊,基本塊A之后有兩條分支路徑,對應(yīng)的就是源碼中的if-else結(jié)構(gòu)。

    圖3 控制流圖示例Fig.3 Example of control flow graph

    在控制流圖中,控制流從一個基本塊到另外一個基本塊的轉(zhuǎn)移多是通過一系列跳轉(zhuǎn)指令實(shí)現(xiàn),所要跳轉(zhuǎn)的目標(biāo)地址在原始情況下是以明文方式作為指令的操作數(shù)出現(xiàn)的,這樣的跳轉(zhuǎn)形式稱之為顯示跳轉(zhuǎn),以圖3(b)為例,一共出現(xiàn)了兩個跳轉(zhuǎn)指令,分別是地址為040056B處的條件跳轉(zhuǎn)指令和地址為0400585處的無條件跳轉(zhuǎn)指令,這兩條指令的操作數(shù)都是直接的明文地址(圖中顯示的是LABEL偽指令,表示的是某個地址,目的是便于閱讀),由于是明文地址,無論從哪一個基本塊開始都可以輕松地推斷出程序接下來的流程。

    與顯示跳轉(zhuǎn)對應(yīng)的是隱式跳轉(zhuǎn),這種形式下,跳轉(zhuǎn)的目的地址需要通過一系列計(jì)算得出,圖4所示的是圖3(a)中的代碼經(jīng)過Hikari的間接分支處理后的部分匯編代碼,對應(yīng)的就是圖3(c)中的基本塊A,但是與之不同的是圖4中的基本塊最后的跳轉(zhuǎn)指令的操作數(shù)并不是一個直接地址,而以一個寄存器表示,根據(jù)寄存器中存儲的值,去跳轉(zhuǎn)的相應(yīng)地址,至于寄存器中所存儲的地址則是在跳轉(zhuǎn)前計(jì)算出來的,這就是隱式跳轉(zhuǎn)的一種形式。這里所做的處理是將某個基本塊的所有可能后繼基本塊插入一個全局跳轉(zhuǎn)表中,然后修改原始基本塊的內(nèi)容,將原來的明文地址替換為數(shù)組尋址的方式,如圖4中地址0400575處所示。這種隱式跳轉(zhuǎn)方法,由于隱藏了目標(biāo)地址,所以一些工具如IDA Pro[15]就不能通過靜態(tài)分析去構(gòu)建程序的控制流圖,僅能顯示如圖4所示的控制流圖的第一個基本塊。

    雖然這種形式的隱式跳轉(zhuǎn)雖然能在一定程度上阻礙控制流圖被構(gòu)建,但是若對跳轉(zhuǎn)前部分指令的含義進(jìn)行簡單分析還是可以推斷出該基本塊的后繼。以圖4為例,在輸入值與10做減法之后,根據(jù)EFLAGS寄存器的ZF標(biāo)志位的情況,在_LcondInBrTable數(shù)組中取不同的值存入rsi寄存器中進(jìn)行跳轉(zhuǎn),由此知道當(dāng)輸入等于10時,取數(shù)組中第二個元素,否則取第一個元素。而_LcondInBrTable數(shù)組中存儲的都是明文地址,由此還是可以構(gòu)建出局部或者全局的控制流圖。

    2.2 控制流的隱式跳轉(zhuǎn)

    前一節(jié)中Hikari實(shí)現(xiàn)了較為初級的隱式跳轉(zhuǎn),但是依舊是將地址明文存儲到全局跳轉(zhuǎn)表中,這樣的效果等同于做了一次稍微復(fù)雜的間接尋址,雖然可以欺騙一些靜態(tài)分析工具,但是并沒有達(dá)到理想的保護(hù)效果。本文通過對地址加密來增強(qiáng)保護(hù),但是由于對軟件的靜態(tài)分析是處于一種MATE[16](Man At The End)環(huán)境下,此時攻擊者完全掌握軟件運(yùn)行環(huán)境,可以對軟件進(jìn)行徹底的反編譯和監(jiān)控,傳統(tǒng)的加密并不能明顯提升保護(hù)效果,所以本文通過構(gòu)建狀態(tài)轉(zhuǎn)移模型來確保密鑰安全,利用二者的結(jié)合來實(shí)現(xiàn)代碼保護(hù)。

    S:狀態(tài)集合;

    S0:初始狀態(tài);

    I:輸入集合;

    O:輸出集合;

    T:轉(zhuǎn)移函數(shù),描述系統(tǒng)中各個狀態(tài)之間轉(zhuǎn)移的規(guī)則;

    G:輸出函數(shù),描述系統(tǒng)在狀態(tài)轉(zhuǎn)移后的輸出。

    首先定義一個程序控制流圖由n個基本塊構(gòu)成:,控制流圖的入口為BB0。假設(shè)控制流內(nèi)部的跳轉(zhuǎn)是根據(jù)基本塊的地址定位的,第i個基本塊的地址表示為Ai,該地址對應(yīng)的加密后密文表示為,其對應(yīng)的密鑰表示為key i,密鑰是在編譯期隨機(jī)生成的,不直接存儲在代碼中。

    系統(tǒng)的各部分定義如下:系統(tǒng)的狀態(tài)集合即為全體密鑰的集合S={}key i|0≤i≤n,當(dāng)程序要從BB i跳轉(zhuǎn)到BB j時,系統(tǒng)的當(dāng)前狀態(tài)即為k eyi,將來狀態(tài)為key j,系統(tǒng)的初始狀態(tài)為key0;系統(tǒng)某次狀態(tài)轉(zhuǎn)移時的輸入由兩部分組成,一部分用于計(jì)算新狀態(tài),定義為k ij,該值直接存儲在BB i中;另一部分用于計(jì)算輸出,即BB j的密文;故系統(tǒng)的輸入可以用如下二元組的集合表示,系統(tǒng)在轉(zhuǎn)移后的輸出即基本塊地址的集合,O={A j|0≤i≤n}。

    系統(tǒng)的輸出函數(shù)描述的就是狀態(tài)轉(zhuǎn)移后系統(tǒng)產(chǎn)生的一個輸出,這里以輸入的密文以及當(dāng)前狀態(tài)為參數(shù)并輸出基本塊地址,所以輸出函數(shù)就是解密函數(shù),它和編譯時的加密函數(shù)互為反函數(shù)。若加密函數(shù)定義為如下形式:

    則輸出函數(shù)的形式為:

    關(guān)于加解密函數(shù)的具體實(shí)現(xiàn)沒有特殊要求,但是由于需要在指令層面進(jìn)行運(yùn)行時解密,為了保證運(yùn)行時性能,要盡量選擇運(yùn)算量少的算法,如異或運(yùn)算。

    系統(tǒng)的轉(zhuǎn)移函數(shù)描述了狀態(tài)轉(zhuǎn)移規(guī)則,其形式如下:

    轉(zhuǎn)移函數(shù)實(shí)際上是以迭代的形式描述了如何從一個狀態(tài)轉(zhuǎn)移到下一個狀態(tài),這種形式的定義可以保證在靜態(tài)分析時中間狀態(tài)的隱蔽性,從而間接保證目標(biāo)地址的安全。攻擊者在對程序進(jìn)行靜態(tài)分析構(gòu)建控制流圖時,由于完整的控制流圖一般都比較龐大,構(gòu)建起來耗時耗力,所以攻擊者一般更愿意從某個感興趣的基本塊入手,構(gòu)建局部的控制流圖,此時需要完成的目標(biāo)有如下兩點(diǎn):

    (1)確定某個基本塊的所有直接后繼塊;

    (2)確定某個基本塊的所有直接前驅(qū)塊。

    在未處理之前,指令中所有目標(biāo)地址都是明文出現(xiàn)的,所以目標(biāo)1可以通過分析基本塊中的跳轉(zhuǎn)指令及相鄰基本塊的邏輯關(guān)系而實(shí)現(xiàn),目標(biāo)2可以通過匹配全局的絕對跳轉(zhuǎn)地址和相對跳轉(zhuǎn)地址來實(shí)現(xiàn)。在使用本文方案之后,聯(lián)合轉(zhuǎn)移函數(shù)與輸出函數(shù),若從BBi轉(zhuǎn)移到BB j,目標(biāo)基本塊地址需要經(jīng)過如下計(jì)算:

    當(dāng)攻擊者從控制流圖中某一基本塊開始靜態(tài)分析時,所能獲取到的信息只有該基本塊的地址A i,以及所有可能的k ij和。由公式(5)可知,還缺少參數(shù)keyi,而keyi是系統(tǒng)的當(dāng)前狀態(tài),它在程序中的表現(xiàn)是一個可讀寫的全局變量,它隨著控制流的轉(zhuǎn)移而更新,而直接從中間某一基本塊入手時,是無法直接獲得當(dāng)前基本塊對應(yīng)狀態(tài)值,所以不能計(jì)算出下一基本塊的地址,這樣目標(biāo)1就很難完成。另外,由于在基本塊中,原始狀態(tài)下所有目標(biāo)地址都是以密文形式呈現(xiàn)的,當(dāng)攻擊者知道某一基本塊的明文地址,而要計(jì)算對應(yīng)的密文地址時需要進(jìn)行如下式的運(yùn)算(假設(shè)BB k是BBi的一個前驅(qū)塊):

    根據(jù)系統(tǒng)的狀態(tài)轉(zhuǎn)移模型,key k是在執(zhí)行到基本塊BB k時的狀態(tài),k ki的值也僅存在于BB k內(nèi)部的,所以在前驅(qū)塊未知的情況下,想要計(jì)算當(dāng)前基本塊對應(yīng)的密文信息,以及以此為基礎(chǔ)去尋找所有前驅(qū)塊是比較困難的,所以目標(biāo)2也難以實(shí)現(xiàn)。

    前文分析了模型在抵御靜態(tài)分析時的能力,證明了當(dāng)從控制流圖的非起始位置入手時,并不能有效地還原出程序的控制流圖。但是,當(dāng)從控制流入口開始靜態(tài)分析時,系統(tǒng)狀態(tài)能否安全地初始化決定了程序控制流圖能否被順利構(gòu)建。目前,程序中類似的安全初始化問題依舊是亟待解決的,不過一些現(xiàn)有的方法可以在一定程度上解決這個問題,如白盒加密、外部輸入以及從環(huán)境元素生成狀態(tài)信息等。即使在無法保證安全初始化的情況下,在經(jīng)過本方案處理過之后,攻擊者也只能從控制流圖的入口開始分析,當(dāng)程序足夠龐大時,這將是一個漫長的過程。另外本方案關(guān)注于隱藏控制流的跳轉(zhuǎn)信息,所以可以通過增加冗余的虛假基本塊、對基本塊進(jìn)行分裂或者結(jié)合已有的控制流混淆技術(shù)來增大靜態(tài)分析的難度。

    2.3 隱式調(diào)用與隱式引用

    除了控制流信息是抵抗靜態(tài)分析時需要保護(hù)的信息,函數(shù)的調(diào)用與變量的引用也是一類需要保護(hù)敏感信息。例如通過對關(guān)鍵函數(shù)的調(diào)用及特殊字符串的搜索可以快速定位到關(guān)鍵部分,提高靜態(tài)分析的效率。傳統(tǒng)的關(guān)于這兩類信息的保護(hù)都注重于內(nèi)容的保護(hù),如對函數(shù)進(jìn)行包裝、對字符串內(nèi)容加密等。這樣的處理不僅有較大性能損耗,同時也并不能達(dá)到理想的效果。本文在隱式跳轉(zhuǎn)的基礎(chǔ)上從對象與指令間的關(guān)系入手對這兩類信息進(jìn)行保護(hù)。

    與基本塊的跳轉(zhuǎn)類似,在指令層面函數(shù)的調(diào)用與變量的引用都是以地址為基礎(chǔ)。如圖3(b)中的幾處call指令和包括0400571地址在內(nèi)的幾處變量引用指令,都是把目標(biāo)對象的地址直接作為操作數(shù)放在指令后。所以可以推廣隱式跳轉(zhuǎn)的思想,將對應(yīng)的地址加密隱藏,實(shí)現(xiàn)函數(shù)的隱式調(diào)用和變量的隱式引用。同樣在上一節(jié)構(gòu)建的狀態(tài)轉(zhuǎn)移系統(tǒng)的基礎(chǔ)上,依賴系統(tǒng)當(dāng)前狀態(tài)與輸入?yún)?shù)在運(yùn)行時解密出真實(shí)地址,而不直接存儲密鑰,使得靜態(tài)分析時無法確定真實(shí)地址,以此切斷相關(guān)對象和程序的關(guān)聯(lián),也就無法利用特殊的函數(shù)和變量去定位關(guān)鍵邏輯。另外,也可以插入相似的冗余函數(shù)和變量,進(jìn)一步干擾攻擊者的靜態(tài)分析。

    2.4 環(huán)境密鑰與兩階段加密

    前文介紹的模型雖能較好在靜態(tài)分析時保護(hù)程序各種敏感信息,但是各種加密行為都是在編譯期完成的,所以在后續(xù)的指令修改中,同樣的密文可能多次出現(xiàn),這樣做是有一定風(fēng)險(xiǎn)的。如在基本塊的隱式跳轉(zhuǎn)中,若BB j是BB i的直接后繼,雖然在BB i中無法直接計(jì)算出BB j的實(shí)際地址,但是將會出現(xiàn)在所有BB j的前驅(qū)塊中,此時通過搜索可以找到BB j的所有前驅(qū)節(jié)點(diǎn)。同樣的問題也出現(xiàn)在函數(shù)隱式調(diào)用與全局變量隱式引用的處理中,利用對密文的全局搜索可以找到調(diào)用相同函數(shù)或引用相同變量的所有指令,再結(jié)合一些統(tǒng)計(jì)學(xué)的知識,還是可以獲取一些有價(jià)值信息。

    為了解決這個問題,這里引入環(huán)境密鑰與兩階段加密的概念,基本思路是在不同環(huán)境中(即不同的基本塊中)表示出不同的密文。以基本塊隱式跳轉(zhuǎn)為例,除了使用主密鑰keyi,還需要一個環(huán)境密鑰ckeyi,每個基本塊對應(yīng)一個環(huán)境密鑰,為了保證唯一性,比較簡單的就是取基本塊的地址作為環(huán)境密鑰。在編譯期進(jìn)行加密時使用兩個加密函數(shù)進(jìn)行兩階段加密,分別是使用環(huán)境密鑰進(jìn)行的預(yù)加密和使用主密鑰進(jìn)行的正式加密,這里定義預(yù)加密函數(shù)如下:

    預(yù)加密函數(shù)需要保證在給出相同的A i,對于任意兩個ckey j,其結(jié)果一定不相同。此時結(jié)合2.2節(jié)中定義的加密函數(shù),完整的加密運(yùn)算如下所示(表示BBi的地址在BB j環(huán)境下所對應(yīng)的密文):

    注意這里選取的預(yù)加密函數(shù)P可以和F一樣,但要保證函數(shù)對解密順序敏感,也就是解密時若先用環(huán)境密鑰再用主密鑰時不能獲得正確結(jié)果,以防靜態(tài)分析時可以對密文進(jìn)行預(yù)處理。在公式(8)中對于同一明文A j,對應(yīng)不同的ckey j則有不同的結(jié)果,也就實(shí)現(xiàn)同一個基本塊在不同的環(huán)境下展示不同的密文。

    同樣對于函數(shù)的隱式調(diào)用和全局變量的隱式引用,也可以使用環(huán)境密鑰和兩階段解密實(shí)現(xiàn)密文不重復(fù)出現(xiàn)。但是對于這兩者,還存在一種特殊情況,也就是在同一個基本塊內(nèi)多次調(diào)用同一個函數(shù)或引用同一個全局變量,這樣仍然會出現(xiàn)密文重復(fù),有效的解決方法是對基本塊進(jìn)行分裂,在兩個相同的函數(shù)調(diào)用或者變量引用之間插入無條件跳轉(zhuǎn)指令,將一個基本塊分裂為多個基本塊,保證兩次相同的調(diào)用或引用不出現(xiàn)在一個基本塊內(nèi),再進(jìn)行隱式轉(zhuǎn)換,就可以保證密文的唯一。

    利用環(huán)境密鑰的兩階段加密沒有必要對全部對象都使用,在使用前可以統(tǒng)計(jì)對象在源程序中的出現(xiàn)次數(shù),若僅出現(xiàn)一次,就可以省去兩階段加密以減少性能損耗。

    3 實(shí)驗(yàn)分析

    為了評估本文所提出的方案,這里選取了一些樣本進(jìn)行測試,并與原始程序和其他已有方案進(jìn)行比較從而得出結(jié)論,本文的方案實(shí)現(xiàn)是基于OLLVM[17]實(shí)現(xiàn)的。

    3.1 測試樣本與實(shí)驗(yàn)環(huán)境

    本文從編譯后程序的空間開銷和時間開銷兩個維度進(jìn)行測試。這兩個維度使用不同的樣本集,分別是GNU Coreutils[18]內(nèi)的部分模塊以及排序、散列、加密以及壓縮等領(lǐng)域中有代表性的程序,樣本源碼語言都為C語言。另外關(guān)于方案的正確性與通用性可以通過觀察樣本是否能正確編譯以及正確執(zhí)行來判斷。具體樣本信息如表1所示。

    表1 樣本詳情Table 1 Sample details

    在實(shí)驗(yàn)中分別對每個樣本都進(jìn)行如表2所述的幾組實(shí)驗(yàn)。

    表2 實(shí)驗(yàn)內(nèi)容Table 2 Experiment details

    其中實(shí)驗(yàn)B、C因?yàn)榭梢詫?shí)現(xiàn)類似效果,所以有較直觀的對比。本次實(shí)驗(yàn)的環(huán)境如表3所示。

    表3 實(shí)驗(yàn)環(huán)境Table 3 Experimental environment

    3.2 結(jié)果與分析

    按表2描述的四種處理方法對10個樣本進(jìn)行編譯,首先各個樣本均能通過編譯并正常運(yùn)行,這一點(diǎn)說明本文方案對一般源代碼程序的處理具有較好的通用性和正確性,具體編譯后可執(zhí)行文件的大小如表4所示。

    表4 可執(zhí)行文件大小Table 4 Executable file size Byte

    通過表4可以看出,任何一種處理手段都會伴隨出現(xiàn)文件體積增大現(xiàn)象。其中,僅做控制流隱式跳轉(zhuǎn)處理的對照組中,文件體積平均增大29%左右,在此基礎(chǔ)上若對函數(shù)調(diào)用與變量引用也做處理,文件體積再增加15%左右。

    通過分析編譯后程序的匯編指令,可以得出文件增大的原因。以實(shí)驗(yàn)B為例,若要實(shí)現(xiàn)一個簡單的無條件跳轉(zhuǎn)指令從顯式到隱式的轉(zhuǎn)換,需要在基本塊中添加:當(dāng)前系統(tǒng)狀態(tài)讀取、輔助變量讀取與密鑰計(jì)算、密文讀取與解密、系統(tǒng)狀態(tài)更新以及跳轉(zhuǎn)指令替換等操作,在實(shí)際轉(zhuǎn)換中,這些操作將在原基本塊中增加約10條指令。另外,對于有條件跳轉(zhuǎn)指令及函數(shù)調(diào)用指令等一些較為復(fù)雜的指令,在實(shí)際轉(zhuǎn)換將會增加更多指令。其次,隨著基本塊數(shù)量的增多,控制流圖中邊的數(shù)量也越多,要轉(zhuǎn)換的指令也越多,所以編譯后文件體積會有一定的增加。

    雖然本文方案最后文件體積會有一定增加,但相比控制流平坦化而言,在達(dá)到類似效果的基礎(chǔ)上,實(shí)際實(shí)驗(yàn)中二者文件的體積上并沒有明顯的差異。而且原始的控制流平坦化方案只是在形式上打亂了控制流,若要更加安全地保護(hù)控制流信息則需要對分發(fā)器的邏輯復(fù)雜化,這樣只會進(jìn)一步增加文件體積。

    實(shí)驗(yàn)的第二項(xiàng)內(nèi)容是測試經(jīng)過處理后程序的性能對比,關(guān)于性能可以通過程序運(yùn)行時間得到直觀的表現(xiàn)。這里對后四種樣本進(jìn)行測試,其中每組實(shí)驗(yàn)之后得到的二進(jìn)制文件都執(zhí)行如表5所示的一定操作并記錄執(zhí)行時間,重復(fù)執(zhí)行100次,最后取平均時間。

    表5 操作詳情Table 5 Operation details

    各個樣本的最終運(yùn)行時間如圖5所示。

    圖5 運(yùn)行時間Fig.5 Execution time

    通過圖5可知,在經(jīng)過控制流扁平化處理之后的程序耗時是最多的,本文所提供的方案中,若只進(jìn)行控制流隱式跳轉(zhuǎn),則平均增加了44%的耗時,若全部處理,則再增加約15%的耗時,雖然最后運(yùn)行時間相對原始程序都有一定增加,但是相對于控制流平坦化,執(zhí)行耗時上平均減少約23%,有較大的提升。

    通過前面的分析可知由于增加了額外指令,所以在運(yùn)行時不可避免地增加了運(yùn)行時間。雖然本文所提方案與控制流平坦化方案都是通過增加額外指令實(shí)現(xiàn)控制流混淆,但是本文所增加的額外指令都直接插入到原始的基本塊中,而且與原基本塊內(nèi)的指令在地址上是相鄰的,同時大多數(shù)是一些簡單的數(shù)據(jù)存儲指令。而控制流平坦化方案中由于匯編指令無法直接實(shí)現(xiàn)類似switch結(jié)構(gòu)的分發(fā)器,所以只能通過增加大量子分發(fā)器將控制流圖轉(zhuǎn)為一個多層的樹型結(jié)構(gòu),這樣控制流從主分發(fā)器出發(fā),要通過大量子分發(fā)器經(jīng)過層層比較與跳轉(zhuǎn)才能到達(dá)源程序的有效邏輯塊,另外這些子分發(fā)器在地址上多數(shù)都是不相鄰的,也會造成一定影響。所以相比較來看控制流平坦化方案比本文的方案會造成更大的影響。

    通過上面兩方面的實(shí)驗(yàn)可以得出,不管何種保護(hù)方法都是有一定負(fù)面效應(yīng)的,不過這也是不可避免的,由于在實(shí)驗(yàn)中默認(rèn)對全部代碼都進(jìn)行保護(hù)處理,所以影響比較明顯,實(shí)際過程中可以有選擇性地對關(guān)鍵代碼進(jìn)行保護(hù)處理,從而降低對性能的影響。

    4 結(jié)束語

    本文提出并實(shí)現(xiàn)了一種采用隱式跳轉(zhuǎn)的控制流混淆方案,它不僅能隱藏程序的控制流信息,同時也能保護(hù)包括函數(shù)調(diào)用及變量引用在內(nèi)的多種敏感信息,增強(qiáng)程序的抗靜態(tài)分析能力。由于是建立在抽象的控制流圖基礎(chǔ)上,所以該方案不受具體編程語言及代碼結(jié)構(gòu)的限制,也不需要對源碼進(jìn)行任何修改,是一種通用的控制流混淆方案。并且還能結(jié)合已有的混淆方案保護(hù)實(shí)現(xiàn)更好的保護(hù)效果。未來的研究工作將從如下兩點(diǎn)進(jìn)行:首先是優(yōu)化狀態(tài)轉(zhuǎn)移系統(tǒng)進(jìn)一步減小編譯后文件體積的大小;其次是優(yōu)化轉(zhuǎn)移函數(shù)和輸出函數(shù),使性能損耗降到最低。

    猜你喜歡
    基本塊控制流靜態(tài)
    基于級聯(lián)森林的控制流錯誤檢測優(yōu)化算法
    靜態(tài)隨機(jī)存儲器在軌自檢算法
    抵御控制流分析的Python 程序混淆算法
    距離與權(quán)重相結(jié)合的導(dǎo)向式灰盒模糊測試方法
    工控系統(tǒng)中PLC安全漏洞及控制流完整性研究
    電子科技(2021年2期)2021-01-08 02:25:58
    抵御控制流分析的程序混淆算法
    一種檢測控制流錯誤的多層分段標(biāo)簽方法
    機(jī)床靜態(tài)及動態(tài)分析
    具7μA靜態(tài)電流的2A、70V SEPIC/升壓型DC/DC轉(zhuǎn)換器
    基于控制流隱藏的代碼迷惑
    性插视频无遮挡在线免费观看| 亚洲片人在线观看| www.色视频.com| 国产精品女同一区二区软件 | 亚洲精品久久国产高清桃花| 好男人在线观看高清免费视频| 国产淫片久久久久久久久 | 免费无遮挡裸体视频| 亚洲av二区三区四区| 亚洲无线观看免费| 午夜精品一区二区三区免费看| 级片在线观看| av专区在线播放| 免费无遮挡裸体视频| 此物有八面人人有两片| 久久精品夜夜夜夜夜久久蜜豆| 国产av不卡久久| 亚洲自偷自拍三级| 少妇裸体淫交视频免费看高清| 国产成人影院久久av| 好男人在线观看高清免费视频| 免费在线观看亚洲国产| 成人亚洲精品av一区二区| 丰满人妻熟妇乱又伦精品不卡| 国产色爽女视频免费观看| 夜夜躁狠狠躁天天躁| 午夜视频国产福利| 啦啦啦韩国在线观看视频| 欧美日本视频| av天堂中文字幕网| 久久精品人妻少妇| 他把我摸到了高潮在线观看| 成年女人永久免费观看视频| 91在线精品国自产拍蜜月| 99riav亚洲国产免费| 夜夜夜夜夜久久久久| 黄色丝袜av网址大全| 国产欧美日韩精品一区二区| 9191精品国产免费久久| 国产精品不卡视频一区二区 | 我要搜黄色片| 午夜免费激情av| 老司机午夜福利在线观看视频| 国产在线精品亚洲第一网站| 国产精品亚洲美女久久久| 亚洲人成网站在线播放欧美日韩| 91午夜精品亚洲一区二区三区 | 国产真实伦视频高清在线观看 | 69人妻影院| 久久99热6这里只有精品| 波多野结衣巨乳人妻| 国内少妇人妻偷人精品xxx网站| 亚洲,欧美精品.| 夜夜爽天天搞| 天堂网av新在线| 两个人的视频大全免费| 噜噜噜噜噜久久久久久91| 午夜激情福利司机影院| 国产精品亚洲美女久久久| 少妇人妻一区二区三区视频| 欧美成人a在线观看| 亚洲一区高清亚洲精品| 精品一区二区三区av网在线观看| 天堂av国产一区二区熟女人妻| 国产精品野战在线观看| 国产熟女xx| 亚洲电影在线观看av| 欧美一区二区精品小视频在线| 一进一出抽搐gif免费好疼| 国产三级在线视频| 亚洲av成人不卡在线观看播放网| 亚洲精品成人久久久久久| 国产91精品成人一区二区三区| 女生性感内裤真人,穿戴方法视频| 性色av乱码一区二区三区2| 中国美女看黄片| 久久性视频一级片| 可以在线观看的亚洲视频| 日韩欧美三级三区| 国产一区二区在线av高清观看| 欧美日韩福利视频一区二区| 成人永久免费在线观看视频| 久久这里只有精品中国| 性色avwww在线观看| 久久久久久久亚洲中文字幕 | 亚洲成人久久爱视频| 美女被艹到高潮喷水动态| 亚洲专区中文字幕在线| 国产三级黄色录像| 一级av片app| 看十八女毛片水多多多| www.999成人在线观看| 一级作爱视频免费观看| 国产伦一二天堂av在线观看| 村上凉子中文字幕在线| 一边摸一边抽搐一进一小说| 可以在线观看毛片的网站| 日韩免费av在线播放| 午夜福利免费观看在线| 色av中文字幕| 人妻夜夜爽99麻豆av| 欧美性猛交黑人性爽| 国产69精品久久久久777片| 亚洲欧美日韩东京热| 一区福利在线观看| a在线观看视频网站| 国产精品一区二区免费欧美| 老熟妇仑乱视频hdxx| 亚洲av日韩精品久久久久久密| 非洲黑人性xxxx精品又粗又长| 国产亚洲精品av在线| 国产真实伦视频高清在线观看 | 蜜桃亚洲精品一区二区三区| 又紧又爽又黄一区二区| 国产精品三级大全| 97超级碰碰碰精品色视频在线观看| 欧美日本视频| 午夜a级毛片| 岛国在线免费视频观看| 给我免费播放毛片高清在线观看| 午夜精品久久久久久毛片777| 精品欧美国产一区二区三| 成人鲁丝片一二三区免费| 国产精品永久免费网站| 国产毛片a区久久久久| 人人妻人人澡欧美一区二区| 国产国拍精品亚洲av在线观看| 欧美成人a在线观看| 久久久国产成人精品二区| 午夜精品一区二区三区免费看| 免费看光身美女| 国内精品美女久久久久久| 欧美在线黄色| 国产不卡一卡二| 宅男免费午夜| 国产一区二区激情短视频| 日本 欧美在线| 亚洲欧美清纯卡通| 国产视频内射| 亚洲在线观看片| 91九色精品人成在线观看| 小说图片视频综合网站| 日本五十路高清| 久久中文看片网| 亚洲性夜色夜夜综合| 国产成人影院久久av| aaaaa片日本免费| 日本一本二区三区精品| 免费无遮挡裸体视频| 人人妻人人澡欧美一区二区| 亚洲自偷自拍三级| 久久午夜福利片| 成人亚洲精品av一区二区| 亚洲国产日韩欧美精品在线观看| 人妻夜夜爽99麻豆av| 亚洲自拍偷在线| 草草在线视频免费看| 日韩欧美一区二区三区在线观看| 精品一区二区免费观看| 午夜影院日韩av| 国产蜜桃级精品一区二区三区| 我要看日韩黄色一级片| 日韩高清综合在线| 欧美3d第一页| 欧美潮喷喷水| 国产亚洲精品久久久久久毛片| 美女免费视频网站| 我要看日韩黄色一级片| 简卡轻食公司| 国产 一区 欧美 日韩| 日韩精品中文字幕看吧| 村上凉子中文字幕在线| 一二三四社区在线视频社区8| 欧美xxxx黑人xx丫x性爽| 亚洲avbb在线观看| 天天一区二区日本电影三级| 波多野结衣高清无吗| 我的女老师完整版在线观看| 嫩草影院新地址| 亚洲五月婷婷丁香| 俺也久久电影网| 最近在线观看免费完整版| 久久草成人影院| 免费观看精品视频网站| 日韩国内少妇激情av| 亚洲精品亚洲一区二区| 国产av不卡久久| 美女cb高潮喷水在线观看| 别揉我奶头 嗯啊视频| 婷婷亚洲欧美| 国产免费一级a男人的天堂| 久久人人精品亚洲av| 无遮挡黄片免费观看| 国产欧美日韩一区二区三| 有码 亚洲区| 老鸭窝网址在线观看| 女人被狂操c到高潮| 好看av亚洲va欧美ⅴa在| 一进一出好大好爽视频| 欧美3d第一页| 亚洲一区二区三区色噜噜| 国产主播在线观看一区二区| 亚洲av一区综合| 嫩草影院入口| 最近在线观看免费完整版| 国产单亲对白刺激| 直男gayav资源| 两性午夜刺激爽爽歪歪视频在线观看| 麻豆成人av在线观看| 精品一区二区免费观看| 女人被狂操c到高潮| 夜夜看夜夜爽夜夜摸| 偷拍熟女少妇极品色| 国产大屁股一区二区在线视频| 婷婷精品国产亚洲av在线| 久久天躁狠狠躁夜夜2o2o| 色综合婷婷激情| 黄色女人牲交| 男人狂女人下面高潮的视频| 亚洲中文字幕一区二区三区有码在线看| 乱人视频在线观看| 窝窝影院91人妻| 国产主播在线观看一区二区| 久久精品国产99精品国产亚洲性色| 永久网站在线| 亚洲内射少妇av| 国产人妻一区二区三区在| 别揉我奶头 嗯啊视频| 99久久精品一区二区三区| 久久久久国产精品人妻aⅴ院| 欧美精品啪啪一区二区三区| 亚洲成人久久性| 99久久精品热视频| 亚洲欧美清纯卡通| 一个人看的www免费观看视频| 国产三级黄色录像| 亚洲av成人精品一区久久| 久久国产乱子免费精品| 国产成人aa在线观看| 久久国产精品影院| 狠狠狠狠99中文字幕| 美女被艹到高潮喷水动态| 18禁黄网站禁片免费观看直播| 嫩草影院新地址| 一级av片app| 欧美一级a爱片免费观看看| 麻豆一二三区av精品| 亚洲午夜理论影院| 日韩人妻高清精品专区| 99在线人妻在线中文字幕| 欧美色视频一区免费| 中文在线观看免费www的网站| 欧美日韩综合久久久久久 | 精品福利观看| 亚洲综合色惰| 亚洲精品久久国产高清桃花| 色综合欧美亚洲国产小说| 看黄色毛片网站| 波野结衣二区三区在线| 我的老师免费观看完整版| 日韩欧美三级三区| 嫩草影院入口| 亚洲av不卡在线观看| 欧美激情久久久久久爽电影| 中文字幕人成人乱码亚洲影| 搡老妇女老女人老熟妇| 成年女人毛片免费观看观看9| 久久久久久久久久成人| eeuss影院久久| 一区二区三区免费毛片| 欧美高清性xxxxhd video| 91狼人影院| 18禁黄网站禁片免费观看直播| 亚洲欧美日韩卡通动漫| 丰满人妻熟妇乱又伦精品不卡| 国语自产精品视频在线第100页| 亚洲人成网站在线播放欧美日韩| 日韩欧美 国产精品| 国产精品免费一区二区三区在线| 在线观看午夜福利视频| 九色国产91popny在线| 身体一侧抽搐| 天堂√8在线中文| 国产中年淑女户外野战色| 成人永久免费在线观看视频| 精品久久久久久,| 91久久精品国产一区二区成人| 亚洲第一电影网av| 日本黄大片高清| 国产精品精品国产色婷婷| 亚洲欧美精品综合久久99| 人人妻人人看人人澡| 国产一区二区三区视频了| 3wmmmm亚洲av在线观看| 国产精品女同一区二区软件 | 日韩av在线大香蕉| 两人在一起打扑克的视频| 人妻制服诱惑在线中文字幕| 久久这里只有精品中国| 午夜福利视频1000在线观看| 国产精品人妻久久久久久| 亚洲激情在线av| 精品日产1卡2卡| 免费看a级黄色片| 亚洲成人久久爱视频| 999久久久精品免费观看国产| 夜夜爽天天搞| 欧美精品啪啪一区二区三区| 狠狠狠狠99中文字幕| 欧美日本视频| 国产精品自产拍在线观看55亚洲| 老司机福利观看| 成人av一区二区三区在线看| 嫩草影院精品99| 国产亚洲欧美98| 99国产精品一区二区三区| 又粗又爽又猛毛片免费看| 亚洲自偷自拍三级| 欧美乱妇无乱码| 怎么达到女性高潮| 亚洲av成人不卡在线观看播放网| 亚洲欧美日韩卡通动漫| 熟妇人妻久久中文字幕3abv| 亚洲无线在线观看| 午夜视频国产福利| 亚洲国产欧美人成| 国产成人啪精品午夜网站| 悠悠久久av| 亚洲狠狠婷婷综合久久图片| 精品人妻熟女av久视频| 精品久久久久久久久久免费视频| 日本成人三级电影网站| 亚洲国产欧洲综合997久久,| 别揉我奶头~嗯~啊~动态视频| 欧美日韩国产亚洲二区| 午夜福利欧美成人| 欧美色视频一区免费| 熟妇人妻久久中文字幕3abv| 人妻久久中文字幕网| 女同久久另类99精品国产91| a级毛片免费高清观看在线播放| 亚洲欧美精品综合久久99| 久久香蕉精品热| www.999成人在线观看| 欧美乱妇无乱码| 免费在线观看日本一区| 悠悠久久av| 99国产综合亚洲精品| 亚洲av电影不卡..在线观看| 亚洲 欧美 日韩 在线 免费| 亚洲性夜色夜夜综合| 国产欧美日韩精品一区二区| 色综合站精品国产| 看黄色毛片网站| 欧美日韩中文字幕国产精品一区二区三区| 人人妻人人看人人澡| 久久精品综合一区二区三区| 成人精品一区二区免费| 国产精品精品国产色婷婷| 99久久99久久久精品蜜桃| 露出奶头的视频| 国产在线男女| 俄罗斯特黄特色一大片| 成人永久免费在线观看视频| 一区二区三区四区激情视频 | 精品一区二区三区人妻视频| 国产成人福利小说| 亚洲欧美日韩高清专用| 亚洲av成人精品一区久久| 日韩欧美 国产精品| a级毛片免费高清观看在线播放| 婷婷丁香在线五月| 日韩欧美 国产精品| 女人十人毛片免费观看3o分钟| 两性午夜刺激爽爽歪歪视频在线观看| 久久久久久久精品吃奶| 色5月婷婷丁香| 天堂√8在线中文| 精品久久久久久成人av| 国内精品美女久久久久久| a级毛片a级免费在线| 一进一出抽搐动态| 欧美+日韩+精品| 美女黄网站色视频| 99久久精品国产亚洲精品| 亚洲人成网站在线播放欧美日韩| 波多野结衣高清作品| 亚洲成a人片在线一区二区| 欧美最新免费一区二区三区 | 一本一本综合久久| 欧美不卡视频在线免费观看| 国产精品日韩av在线免费观看| 欧洲精品卡2卡3卡4卡5卡区| 永久网站在线| 91久久精品国产一区二区成人| 国内精品久久久久精免费| 神马国产精品三级电影在线观看| 欧美性感艳星| 又爽又黄无遮挡网站| 亚洲色图av天堂| 美女高潮喷水抽搐中文字幕| 桃色一区二区三区在线观看| 99久久九九国产精品国产免费| 91麻豆精品激情在线观看国产| 99热这里只有是精品在线观看 | 夜夜爽天天搞| 亚洲无线观看免费| 九色成人免费人妻av| 亚洲第一电影网av| 天堂动漫精品| 看片在线看免费视频| 亚洲最大成人av| 91九色精品人成在线观看| 一夜夜www| 看十八女毛片水多多多| 青草久久国产| 日韩欧美国产一区二区入口| 国产中年淑女户外野战色| av在线蜜桃| 性色avwww在线观看| 久久久久国产精品人妻aⅴ院| 九色成人免费人妻av| 一卡2卡三卡四卡精品乱码亚洲| 99久久久亚洲精品蜜臀av| 亚洲av熟女| 最近最新中文字幕大全电影3| 91久久精品电影网| 超碰av人人做人人爽久久| 国产探花在线观看一区二区| 最新中文字幕久久久久| 可以在线观看的亚洲视频| 免费av不卡在线播放| 一级毛片久久久久久久久女| 久久久久久久亚洲中文字幕 | 国产麻豆成人av免费视频| 国产精品久久久久久久电影| 色播亚洲综合网| 亚洲,欧美,日韩| 亚洲最大成人av| 欧美最黄视频在线播放免费| 亚洲激情在线av| 欧美成人免费av一区二区三区| 免费在线观看影片大全网站| 久久久久久久精品吃奶| 蜜桃久久精品国产亚洲av| 人妻夜夜爽99麻豆av| 99久久无色码亚洲精品果冻| 午夜日韩欧美国产| 国产黄a三级三级三级人| 校园春色视频在线观看| 午夜福利高清视频| 一个人观看的视频www高清免费观看| 人人妻人人看人人澡| 九色成人免费人妻av| 99热这里只有是精品50| 久久久久久久久大av| 蜜桃久久精品国产亚洲av| 国内精品美女久久久久久| 日韩欧美精品v在线| 午夜激情福利司机影院| av在线蜜桃| 高清毛片免费观看视频网站| h日本视频在线播放| 岛国在线免费视频观看| 99国产精品一区二区三区| 久久6这里有精品| 亚洲最大成人中文| 在线观看美女被高潮喷水网站 | 国产成+人综合+亚洲专区| 五月玫瑰六月丁香| 老司机午夜福利在线观看视频| 国产视频一区二区在线看| 搡老妇女老女人老熟妇| 日韩大尺度精品在线看网址| 91麻豆精品激情在线观看国产| 最新在线观看一区二区三区| 亚洲 欧美 日韩 在线 免费| av视频在线观看入口| 看片在线看免费视频| 成年女人永久免费观看视频| 精品国内亚洲2022精品成人| 精品午夜福利在线看| 欧洲精品卡2卡3卡4卡5卡区| 国产乱人视频| 51午夜福利影视在线观看| 亚洲第一电影网av| 亚洲乱码一区二区免费版| 成年人黄色毛片网站| 一本久久中文字幕| 搞女人的毛片| 国产黄色小视频在线观看| 国产成+人综合+亚洲专区| 欧美精品国产亚洲| 日本三级黄在线观看| 国产男靠女视频免费网站| 99在线视频只有这里精品首页| 国产精品久久久久久久电影| 少妇人妻精品综合一区二区 | 国产伦人伦偷精品视频| 国产精品亚洲一级av第二区| 男人的好看免费观看在线视频| 精品福利观看| 99久久无色码亚洲精品果冻| 久久精品国产亚洲av涩爱 | 欧美性猛交黑人性爽| 亚洲久久久久久中文字幕| 日本五十路高清| 少妇人妻精品综合一区二区 | 在线观看免费视频日本深夜| 国产成人av教育| 美女大奶头视频| 欧洲精品卡2卡3卡4卡5卡区| 国产主播在线观看一区二区| 亚洲美女搞黄在线观看 | 国内精品久久久久久久电影| 国产精品98久久久久久宅男小说| 亚洲国产欧美人成| 亚洲美女搞黄在线观看 | 欧美xxxx性猛交bbbb| 免费av不卡在线播放| 欧美黑人巨大hd| 国产精品久久久久久久电影| 欧美成狂野欧美在线观看| 国产精品久久久久久久电影| 成人无遮挡网站| 在线a可以看的网站| 亚洲国产精品成人综合色| 成人欧美大片| 少妇丰满av| 一级黄片播放器| 午夜福利高清视频| 18禁裸乳无遮挡免费网站照片| 国产精品亚洲美女久久久| 亚洲性夜色夜夜综合| 91在线观看av| 高清毛片免费观看视频网站| 亚洲自拍偷在线| 精品久久久久久久久久免费视频| 一夜夜www| 免费在线观看影片大全网站| 一卡2卡三卡四卡精品乱码亚洲| 亚洲内射少妇av| 99久久九九国产精品国产免费| 亚洲人成电影免费在线| 久久这里只有精品中国| 国产精品人妻久久久久久| 在线观看午夜福利视频| 日本与韩国留学比较| 精品久久久久久成人av| 亚洲美女视频黄频| 中文字幕人妻熟人妻熟丝袜美| 他把我摸到了高潮在线观看| 欧美日韩亚洲国产一区二区在线观看| 色在线成人网| 好男人在线观看高清免费视频| 国产精品亚洲一级av第二区| 久久亚洲真实| 91狼人影院| 亚洲av电影在线进入| 精品一区二区三区av网在线观看| 天堂√8在线中文| 国产精品野战在线观看| 嫩草影院入口| 国产男靠女视频免费网站| 真实男女啪啪啪动态图| 日本a在线网址| 我的老师免费观看完整版| 久久99热6这里只有精品| avwww免费| av在线老鸭窝| 亚洲国产欧洲综合997久久,| 看免费av毛片| 久久精品影院6| 国产精品电影一区二区三区| 久久久久久国产a免费观看| 中文字幕久久专区| 欧美性猛交黑人性爽| 国产精品人妻久久久久久| 淫秽高清视频在线观看| 中文字幕av在线有码专区| 久久精品综合一区二区三区| 可以在线观看毛片的网站| 黄色视频,在线免费观看| 91九色精品人成在线观看| 亚洲国产欧美人成| 天堂av国产一区二区熟女人妻| 国产一区二区三区在线臀色熟女| 久久久久久久久中文| 欧美成人a在线观看| 自拍偷自拍亚洲精品老妇| 亚洲欧美日韩高清在线视频| 啪啪无遮挡十八禁网站| 免费看a级黄色片| 中文字幕久久专区| 亚洲精华国产精华精| 久久精品人妻少妇| 成熟少妇高潮喷水视频| 亚洲av美国av| 91在线观看av| 色播亚洲综合网| 国产精品1区2区在线观看.| 成人无遮挡网站| 动漫黄色视频在线观看| 一本久久中文字幕| 成人av一区二区三区在线看| 欧美日韩福利视频一区二区| 三级国产精品欧美在线观看| 亚洲国产色片| 亚洲美女黄片视频| 色尼玛亚洲综合影院| 亚洲av美国av| 成人欧美大片| 精品免费久久久久久久清纯| 日本成人三级电影网站| 国产美女午夜福利|