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

    使用指向分析的安卓庫函數(shù)數(shù)據(jù)流摘要方法

    2018-04-13 10:54:22高穎慧楊亞東
    小型微型計算機系統(tǒng) 2018年4期
    關(guān)鍵詞:數(shù)據(jù)流指針指向

    高穎慧,楊亞東,張 源,楊 珉

    1(復(fù)旦大學(xué) 軟件學(xué)院,上海 201203) 2(上海通用識別技術(shù)研究所,上海 201100) E-mail:yuanxzhang@fudan.edu.cn

    1 引 言

    近年來,移動智能手機在人們的日常生活中發(fā)揮著越來越重要的作用,其中Android是現(xiàn)在最受歡迎的智能手機操作系統(tǒng).手機上的應(yīng)用軟件以其不斷豐富的功能吸引著用戶的同時也能訪問到更多的用戶隱私信息,而這些敏感數(shù)據(jù)的泄漏將給用戶的安全造成一定的威脅.

    針對海量應(yīng)用軟件隱私泄漏的問題,研究人員提出了多種自動化程序分析方法和工具,其中靜態(tài)數(shù)據(jù)流分析是一種非常常用的技術(shù)手段.Android平臺為了減輕應(yīng)用程序開發(fā)者的負擔(dān)和增加代碼復(fù)用,提供大量的Android應(yīng)用程序編程接口(Application Programming Interface,簡稱API).應(yīng)用程序的開發(fā)和執(zhí)行過程中會大量使用到這些API.為了更加精確地分析軟件的行為,靜態(tài)數(shù)據(jù)流分析工具不僅要分析應(yīng)用程序的代碼,也要分析這些API對應(yīng)的庫函數(shù)代碼.

    然而,庫函數(shù)數(shù)目眾多、邏輯復(fù)雜,分析庫代碼將會為程序分析引入大量的開銷,遠超過應(yīng)用程序本身的開銷,往往使得分析最終以超時或內(nèi)存不足而告終.同時,針對每一個應(yīng)用軟件都需要對庫代碼重新分析,嚴重制約了靜態(tài)數(shù)據(jù)流分析技術(shù)應(yīng)用于海量應(yīng)用軟件的分析.

    處理庫函數(shù)的分析一個比較好的辦法是為庫函數(shù)生成數(shù)據(jù)流摘要,摘要能對每個庫函數(shù)的行為建模,使得分析應(yīng)用程序時無需再分析庫函數(shù)代碼,只需要使用庫函數(shù)摘要就可以得到庫函數(shù)對應(yīng)用程序產(chǎn)生的效果.同時,數(shù)據(jù)流摘要在生成

    1http://wala.sf.net/

    后,可以被重復(fù)運用于分析各個應(yīng)用程序.但是Android平臺提供的庫函數(shù)數(shù)量巨大,如何為這些函數(shù)生成精確的數(shù)據(jù)流摘要是一個非常重要的問題.通過人工方式編寫函數(shù)摘要需要理解大量代碼才能進行數(shù)據(jù)流建模,無法應(yīng)對百萬級API的數(shù)據(jù)流摘要生成.簡單地基于啟發(fā)式規(guī)則去建模庫函數(shù)數(shù)據(jù)流摘要粒度太粗,無法精確表征庫函數(shù)代碼的實際行為,也不能反應(yīng)各個API之間的差異性行為.

    StubDroid[1]是第一個針對Android數(shù)據(jù)流分析問題自動化生成庫函數(shù)摘要的工具.通過自動化地分析庫函數(shù)代碼執(zhí)行期間對數(shù)據(jù)流傳播的影響,StubDroid可以為每個API生成數(shù)據(jù)流摘要,并且應(yīng)用于以FlowDroid[2]為代表的靜態(tài)分析工具中.然而,本文發(fā)現(xiàn)StubDroid只對庫函數(shù)的數(shù)據(jù)依賴關(guān)系建模,并未為庫函數(shù)內(nèi)指針指向信息生成摘要.Java語言的動態(tài)綁定機制使得Android應(yīng)用程序必須根據(jù)對象的實際類型調(diào)用相應(yīng)的函數(shù),是以靜態(tài)分析為了得到精確的函數(shù)調(diào)用圖,需要通過指向分析確定變量在運行時可能指向的對象信息.使用StubDroid生成摘要的靜態(tài)數(shù)據(jù)流分析工具由于不再分析庫代碼,將缺失庫函數(shù)中的指針指向信息,從而生成不精確的函數(shù)調(diào)用關(guān)系并且采取比較保守的方式加載庫函數(shù)摘要中的數(shù)據(jù)流,而這些都將會產(chǎn)生不正確的數(shù)據(jù)流傳播,為數(shù)據(jù)流分析引入假陰性和假陽性的結(jié)果.

    因此,本文設(shè)計并實現(xiàn)了一種融合指向分析的自動化數(shù)據(jù)流摘要生成與使用工具Point2Droid.Point2Droid生成的摘要不僅包含庫函數(shù)的數(shù)據(jù)依賴關(guān)系,也為其中的指向關(guān)系建立模型,從而有效補充了StubDroid的不足.同時,我們設(shè)計了四組實驗對Point2Droid的性能進行測試,實驗結(jié)果顯示,Point2Droid能在平均30s內(nèi)為單個庫類生成摘要,生成的摘要經(jīng)人工驗證正確模擬了庫函數(shù)對數(shù)據(jù)流的影響.使用Point2Droid生成的摘要使得靜態(tài)隱私檢測工具的分析效率大大提高,并且檢測出了更多的隱私泄露路徑.

    2 背景與相關(guān)工作

    2.1 數(shù)據(jù)流分析與指針指向分析

    數(shù)據(jù)流分析指的是一組用來獲取有關(guān)數(shù)據(jù)如何沿著程序執(zhí)行路徑流動的相關(guān)信息的靜態(tài)分析技術(shù)(基于變量作用域的數(shù)據(jù)流分析)[3].它能提取出程序的語義信息,在不實際運行應(yīng)用程序的情況下,推測其運行時可能發(fā)生的所有可能的行為,掌握應(yīng)用程序的功能,具有批量化分析、覆蓋率高等優(yōu)點.

    指針指向分析是指通過不斷解析賦值語句,根據(jù)右值的指向信息計算和更新左值的指向信息,得到程序運行時各引用變量可能指向的對象,從而確定程序根據(jù)動態(tài)綁定實際所執(zhí)行的函數(shù)的過程.指針指向分析算法主要包括:Steensgaards[5]風(fēng)格算法,一種基于等價(equivalence-based)的指向分析,算法復(fù)雜度為Ο(n),但準確度不高;Andersen[4]風(fēng)格算法,一種基于子集(subset-based)的指向分析,它認為賦值語句將左右兩邊的引用變量產(chǎn)生一種集合包含關(guān)系,即左邊引用變量指針指向集合(Points-to Set)是右邊引用變量Points-to Set的子集,算法復(fù)雜度是Ο(n3),但準確度相對Steensgaards算法好一些.經(jīng)過效率和精度的權(quán)衡,靜態(tài)分析會選擇其中一種算法進行優(yōu)化和改進,現(xiàn)有的靜態(tài)分析框架也提供了基于兩種算法的指針指向分析框架,如本文選擇的Soot Pointer Analysis Research Kit(SPARK)[8]是Soot基于Andersen風(fēng)格算法提供的指向分析框架.

    2.2 相關(guān)工作

    在靜態(tài)分析方面,Vallée-Rai等人提出了Soot[6]和Fink等人提出的WALA1[7]是最為廣泛使用的兩大Java開源靜態(tài)分析框架,它們將Java字節(jié)碼轉(zhuǎn)化成不同形式的中間表達式,并在此之上實現(xiàn)對應(yīng)用程序進行過程內(nèi)和過程間的分析.隨著對Android安全研究的深入,學(xué)術(shù)界提出各種Android靜態(tài)分析框架:Arzt等人和Gordon等人基于Soot框架分別提出FlowDroid[2]和DroidSafe[9].Lu等人和Wei等人基于WALA框架分別提出了CHEX[10]和Amandroid[11].這些靜態(tài)分析工具雖然在設(shè)計思想、性能及檢測結(jié)果上存在差異,但都需要使用模型加速對庫函數(shù)的分析.其中FlowDroid和CHEX使用一些過于簡單的規(guī)則概括部分庫函數(shù)對數(shù)據(jù)流的影響,Amandroid和DroidSafe則人工精確建模常用的庫函數(shù).由于人工需要耗費極大的精力且版本更新需要重新分析,而簡單規(guī)則過于粗粒度,所以這些工具都并未很好解決庫函數(shù)的問題.

    在庫函數(shù)摘要方面,Juan Zhai等人[12]根據(jù)Java庫函數(shù)中的文檔說明對庫函數(shù)行為進行了人工建模,但這種人工方法精度不高且費時費力,無法大規(guī)模應(yīng)用.Yinzhi Cao等人提出EdgeMiner[13],將庫函數(shù)對應(yīng)用程序的回調(diào)總結(jié)在一些規(guī)則中,能自動化地得到Android中的回調(diào)函數(shù),這雖然能協(xié)助建立完整控制流圖,但無法改進對庫函數(shù)的數(shù)據(jù)流分析.Hao Tang等人[14]認為庫函數(shù)的分析結(jié)果使用依賴于上下文,他們提出了一種新的形式化語言TAL來描述這一類庫函數(shù)行為.但此工作目前仍然處于形式化表述的階段,未能生成可用的工具.

    3 StubDroid以及存在的問題

    StubDroid是為庫函數(shù)中數(shù)據(jù)流關(guān)系建模的全自動工具.它每次只針對一個庫函數(shù),為函數(shù)內(nèi)的變量之間的數(shù)據(jù)依賴關(guān)系建立模型,生成摘要存儲到文件中.當靜態(tài)污點分析工具稍后處理在應(yīng)用程序代碼中對庫函數(shù)調(diào)用時,只需要簡單地插入從摘要文件中得到的信息,在截斷其進一步對被調(diào)用的庫函數(shù)和所有傳遞被調(diào)用者(即庫函數(shù)內(nèi)調(diào)用的函數(shù))分析的情況下,依然可以精確地計算得到這些被調(diào)用的庫函數(shù)和傳遞的被調(diào)用者對污點傳播產(chǎn)生的影響.

    具體做法是以對當前庫函數(shù)的參數(shù)、當前對象的this引用和全局變量所涉及的訪問路徑(access path)的數(shù)據(jù)讀取(如圖1第5行的p1)作為source,并以對當前庫函數(shù)的參數(shù)、當前對象的this引用和返回值和全局變量所涉及的訪問路徑(access path)的數(shù)據(jù)寫入(如圖1第5行的this.mX)作為sink,使用FlowDroid執(zhí)行污點分析生成source到sink的數(shù)據(jù)流映射,每一條數(shù)據(jù)流映射表明source和sink之間存在數(shù)據(jù)依賴關(guān)系(即數(shù)據(jù)傳播關(guān)系,如a?b表明變量b依賴于變量a,變量a的數(shù)據(jù)傳播到變量b).如圖1所示,StubDroid在分析完XYHolder構(gòu)造函數(shù)以后會生成參數(shù)1與this.mX、參數(shù)2與this.mY之間的數(shù)據(jù)流映射.分析完成之后將這些數(shù)據(jù)流映射存儲到摘要文件中,之后在靜態(tài)數(shù)據(jù)流分析工具分析應(yīng)用程序代碼遇到庫函數(shù)調(diào)用時會加載相應(yīng)的摘要文件,遍歷從摘要中獲取到數(shù)據(jù)流映射,根據(jù)被依賴變量(source)當前在程序中的狀態(tài),計算依賴變量(sink)的狀態(tài),這樣就完成了根據(jù)數(shù)據(jù)流映射做數(shù)據(jù)傳播,在所有的數(shù)據(jù)流映射處理完之后,就能得到目標庫函數(shù)對程序產(chǎn)生影響后的數(shù)據(jù)狀態(tài).

    對于簡單的庫函數(shù),StubDroid能夠很容易使用上述方法建模生成摘要,但當庫函數(shù)內(nèi)存在回調(diào),即庫函數(shù)將通過客戶端傳入的指針調(diào)用函數(shù),由于StubDroid為該庫函數(shù)生成摘要時不會分析客戶端代碼,所以無法確定實際回調(diào)的函數(shù),進而無法得到它的數(shù)據(jù)流傳播.如圖1的evaluate函數(shù),StubDroid為其生成摘要時無法確定傳入對象引用所指向的對象的具體類型,因而不能確定實際調(diào)用的是哪個類的getX()函數(shù)和getY()函數(shù),導(dǎo)致無法進一步分析.為了解決這個問題,避免回調(diào)函數(shù)數(shù)據(jù)流信息的缺失對生成摘要產(chǎn)生的影響,StubDroid使用gap對每一個無法確定的回調(diào)函數(shù)進行占位,并且記錄該函數(shù)簽名,同時建模從source到gap以及從gap到sink之間的數(shù)據(jù)流映射.當對應(yīng)用程序的靜態(tài)分析使用到摘要時,才在gap處插入對應(yīng)的回調(diào)函數(shù)的數(shù)據(jù)流傳播.因此,圖1的evaluate函數(shù)的摘要文件中會包含簽名分別為的gap.

    然而,在使用摘要時,由于不再分析庫代碼,失去了庫函數(shù)內(nèi)對象的指向信息,StubDroid只能保守地根據(jù)摘要中g(shù)ap對應(yīng)的函數(shù)簽名依據(jù)以下步驟查找所有可能的回調(diào)函數(shù):

    1)從摘要文件目錄查找所有可能的實現(xiàn)或者繼承了該簽名的方法所包含的數(shù)據(jù)流映射.

    2)若1中沒有成功加載到數(shù)據(jù)流映射,則遍歷程序,獲取客戶端代碼中實現(xiàn)或者繼承了該簽名的方法,然后對每一個方法進行靜態(tài)數(shù)據(jù)流分析.

    這種保守的方法會產(chǎn)生不正確的數(shù)據(jù)流傳播,從而對數(shù)據(jù)流分析的準確性產(chǎn)生影響.如圖2所示的應(yīng)用程序代碼,當靜態(tài)分析到第8行語句時會加載庫函數(shù)evaluate(圖1)的摘要信息,而evaluate的摘要文件中存在簽名為的gap,StubDroid沒有該gap的指向信息,只能根據(jù)步驟1從XYHolder的摘要文件中找到 getX()(圖1的8~10行)方法并加載其中包含的數(shù)據(jù)流映射,得到返回值this.mX.然而程序在實際運行中,調(diào)用的是BenignXYHolder的getX()(圖2的18到20行)函數(shù),該函數(shù)返回的是常量.于是在這種情況下,將會使得靜態(tài)分析到圖2的第10行產(chǎn)生假陽性的結(jié)果.

    4 Point2Droid基本架構(gòu)

    為了建模庫函數(shù)行為,本文基于StubDroid設(shè)計并實現(xiàn)了一種融合指向分析的自動化數(shù)據(jù)流摘要生成與使用工具Point2Droid.如圖3所示,Point2Droid根據(jù)功能主要分成兩個模塊:摘要生成模塊和摘要使用模塊.

    4.1 摘要生成模塊

    該模塊以庫的二進制代碼作為輸入,通過庫代碼中每一個公開(public)函數(shù)執(zhí)行一遍摘要生成所需要的分析得到相應(yīng)的函數(shù)模型摘要,并依此代表每個API會對應(yīng)用程序分析產(chǎn)生的效果.為了進一步提高分析效率,摘要生成過程中會將一個類中所有函數(shù)的摘要輸出到同一個摘要文件中,以節(jié)省內(nèi)存占用、方便共享和復(fù)用.

    圖3 Point2Droid系統(tǒng)架構(gòu)示意圖Fig.3 System architecture of Point2Droid

    庫函數(shù)模型摘要主要分成兩部分:指針指向摘要和數(shù)據(jù)依賴摘要,其中數(shù)據(jù)依賴摘要由StubDroid生成.為了生成指針指向摘要,Point2Droid首先為當前分析構(gòu)造入口函數(shù),然后從該入口函數(shù)出發(fā)執(zhí)行指針指向分析,指向分析能得到當前分析中所有變量的指向?qū)ο蠹?通過對結(jié)果的處理,得到目標庫函數(shù)在調(diào)用前后對引用變量指向?qū)ο笏鞒龅脑摳淖?并將這一改變記錄下來,建模成函數(shù)指針指向摘要.

    4.2 摘要使用模塊

    該模塊應(yīng)用于應(yīng)用程序的靜態(tài)分析中,當分析到應(yīng)用程序調(diào)用API時,摘要使用模塊截斷其對庫代碼的進一步分析,通過加載和解析摘要文件中的庫函數(shù)模型,得到API對應(yīng)用程序產(chǎn)生的影響,然后根據(jù)如下公式計算出應(yīng)用程序在函數(shù)調(diào)用后的狀態(tài).這樣既能保證分析的精度,又能節(jié)省對庫函數(shù)分析所浪費的時間和內(nèi)存.

    Statusbefore+Changesummary=Statusafter

    摘要使用模塊也分成兩部分:指針指向摘要的使用和數(shù)據(jù)依賴摘要的使用.

    5 Point2Droid設(shè)計與實現(xiàn)

    Point2Droid通過改進Soot[6]內(nèi)置的指向分析框架SPARK[8]生成庫函數(shù)的指向信息摘要,同時基于StubDroid生成數(shù)據(jù)依賴摘要,最后將得到的庫函數(shù)指針指向信息和數(shù)據(jù)傳播信息應(yīng)用于靜態(tài)污點分析工具FlowDroid中.

    5.1 構(gòu)造入口函數(shù)

    為庫函數(shù)生成指針指向摘要時,由于單個庫函數(shù)不是完整的可執(zhí)行程序,沒有main方法,因而需要構(gòu)造一個DummyMain方法,并且在方法體內(nèi)構(gòu)造調(diào)用當前被分析庫函數(shù)的語句.然后Soot將統(tǒng)一以DummyMain為入口函數(shù)并作為起點,執(zhí)行接下來的分析.

    5.2 摘要生成模塊的指針指向分析

    為了得到庫函數(shù)中所有指針指向?qū)ο蟮男畔?需要通過如圖4所示的指針指向分析流程為庫函數(shù)生成指針指向摘要.其核心是迭代式地根據(jù)當前可達函數(shù)構(gòu)建指針賦值圖(Pointer Assignment Graph,PAG),然后沿著圖中的邊不斷更新節(jié)點對應(yīng)的引用變量的指向信息.與此同時,依次訪問圖中節(jié)點獲取更新后的指向信息,更新函數(shù)調(diào)用圖,從而添加新的可達函數(shù).最初的可達函數(shù)為入口函數(shù)DummyMain.

    圖4 摘要生成的指針指向分析流程圖Fig.4 Points-to analysis of summarization

    5.2.1 創(chuàng)建PAG

    PAG是用來描述變量與對象指向關(guān)系的有向圖,在Soot中PAG圖中有三類節(jié)點:內(nèi)存分配節(jié)點(Allocation Node,AllocNode),代表代碼中創(chuàng)建一個新的對象(new C());變量節(jié)點(Variable Node,VarNode),代表代碼中的本地變量、方法參數(shù)、 返回值及靜態(tài)域(dst);域引用節(jié)點(Field Dereference Node,FieldRefNode),代表代碼中的域變量(src.f)[8].節(jié)點的指向信息由集合表示,稱為指針指向集合(Points-to Set).指向分析根據(jù)分析語句的不同來生成不同類型的邊,并對不同類型的邊產(chǎn)生不同的Points-to Set傳播規(guī)則,具體如表1所示.

    表1 Points-to Set傳播規(guī)則
    Table 1 Rules of Points-to Set propagation

    語句類型邊(a表示newC())邊類型傳播規(guī)則dst=newC()a→dstAllocNode→VarNodeAllocationa→pt(dst)dst=srcsrc→dstVarNode→VarNodeAssignmentpt(src)→pt(dst)dst.f=srcsrc→dst.fVarNode→FieldRefNodeFieldStoreptsrc()→pta.f()a∈pt(dst)dst=src.fsrc.f→dstFieldRefNode→VarNodeFieldLoadpta.f()→ptdst()a∈pt(src)

    5.2.2 創(chuàng)建DummyAllocNode

    由于庫函數(shù)做指向分析生成摘要時,缺失參數(shù)以及this引用的指向信息,且?guī)旌瘮?shù)生成的摘要需要適用于所有可能的應(yīng)用和使用上下文中,Point2Droid會在創(chuàng)建PAG時為被分析函數(shù)的參數(shù)和this引用創(chuàng)建DummyAllocNode節(jié)點抽象表示變量在函數(shù)調(diào)用之前所有可能的指向信息,并且在DummyAllocNode和變量節(jié)點之間添加一條Allocation邊(表示為該變量new了一個新對象,見表1).此外,由于參數(shù)和this引用相關(guān)的域變量(如this.f)在函數(shù)調(diào)用前的指向信息也是缺失的,為了區(qū)分二者,當庫函數(shù)內(nèi)使用這些變量時,Point2Droid會為其創(chuàng)建DummyFieldAllocNode節(jié)點.其中DummyFieldAllocNode類繼承自DummyAllocNode類,表示DummyFieldAllocNode節(jié)點是一種特殊的DummyAllocNode節(jié)點.

    5.2.3 Points-to Set的傳播與函數(shù)調(diào)用圖的更新

    指針指向分析會以所有AllocNode為起點遍歷PAG的邊,使用表1中的規(guī)則傳播和更新節(jié)點的Points-to Set.同時,在節(jié)點更新Points-to Set以后,訪問以該節(jié)點表示的變量為調(diào)用基的調(diào)用點,添加相應(yīng)的函數(shù)調(diào)用邊,更新函數(shù)調(diào)用圖.如調(diào)用點v.m(…)在v更新指向信息后,可以得到v實際指向的對象類型,根據(jù)該類型以及調(diào)用語句聲明的函數(shù)子簽名,解析得到的函數(shù)即為其實際調(diào)用的函數(shù)(callee).

    5.2.4 為無法確定的函數(shù)調(diào)用創(chuàng)建gap

    由于Points-to Set中存在DummyAllocNode節(jié)點,它是抽象出來的對象,其實際類型需要在客戶端代碼運行時才能確定,所以以指向該節(jié)點的引用變量為調(diào)用基的調(diào)用點在摘要生成階段無法確定其實際的callee,這也將無法計算該callee對指針指向信息所產(chǎn)生的影響,從而影響到整個庫函數(shù)的分析.為了消除不確定callee的影響,Points2Droid借用StubDroid中g(shù)ap的概念,使用gap為該函數(shù)占位,并且記錄進入gap前與gap相關(guān)引用變量(調(diào)用點的調(diào)用基、傳入的參數(shù)和返回值)的指向信息,以及創(chuàng)建DummyAllocNode為離開gap之后的相關(guān)引用變量所有可能的指向信息抽象建模.

    5.3 生成指針指向摘要

    在指針指向分析得到各引用變量的Points-to Set以后,需要計算出整個目標庫函數(shù)對指針指向?qū)ο笏龅母淖?并將其記錄為摘要.這樣應(yīng)用程序的分析就不再需要庫代碼只需要摘要即可完成Points-to Set的更新與傳播.

    由于庫函數(shù)通過參數(shù)、返回值和this引用(統(tǒng)稱為對外開放引用變量)與應(yīng)用程序傳遞指針且會保存gap相關(guān)引用變量的指向信息,所以庫函數(shù)的摘要只需要關(guān)心庫函數(shù)對上述6種引用變量及其域變量的指向信息改變.對于對外開放引用變量及其域變量而言,由于其函數(shù)調(diào)用前指向信息不確定,均使用DummyAllocNode建模其指向信息,所以其函數(shù)調(diào)用前的Points-to Set(用pt(before)表示)只有一個與變量唯一對應(yīng)的DummyAllocNode節(jié)點;而對于gap相關(guān)變量及其域變量而言,其函數(shù)調(diào)用前指向信息為空,pt(after)-pt(before)=pt(after).所以,庫函數(shù)的摘要就是記錄上述6種引用變量及其域變量的Points-to Set.

    Points-to Set中主要存儲了兩類節(jié)點,一類是指向庫函數(shù)內(nèi)部實例化的對象AllocNode節(jié)點,另一類是為了建模引用變量可能的指向信息所創(chuàng)建的DummyAllocNode,表示當前變量與被建模的引用變量指向同一對象.這兩類節(jié)點都可以表述為映射關(guān)系,前者為對象和變量之間的映射,后者為變量與變量之間的映射.因此最終生成的摘要應(yīng)是一種多對多的指向映射關(guān)系,為了方便,Point2Droid使用多對一的Map來存儲.

    綜上所述,Point2Droid首先找到上面提到的6種基本變量,然后根據(jù)這6種基本變量找到其域變量,在得到這些變量的Points-to Set之后,遍歷Points-to Set中的節(jié)點,提取出如下所示關(guān)系(→表示指向關(guān)系映射),存儲在Map中.

    6種引用變量及其域變量→6種引用變量及其域變量

    實例類型→6種引用變量及其域變量

    5.4 生成摘要文件

    Point2Droid使用StubDroid生成數(shù)據(jù)依賴摘要,當一個庫類分析完成以后,它將類中所有函數(shù)的指針指向摘要和數(shù)據(jù)依賴摘要一起存儲到xml格式文件中.xml作為可擴展標記語言,具有結(jié)構(gòu)清晰,讀寫方便等優(yōu)點.

    Point2Droid針對圖1示例中的XYEvaluator類生成的摘要文件結(jié)構(gòu)如圖5所示,由于篇幅,只選取了其中部分映射關(guān)系.methods元素是一個類中所有函數(shù)摘要的合集,每一個函數(shù)對應(yīng)一個method元素,屬性signature是該函數(shù)的簽名.每一個函數(shù)摘要包含兩類信息,指針指向關(guān)系映射和數(shù)據(jù)依賴關(guān)系映射,這兩類信息由三類元素表示.

    ?baseobject:該類元素主要是為了簡化object中的訪問路徑,代表庫函數(shù)中的六種引用變量.

    ?object: 該類元素使用屬性p2set和屬性field代表多對一的指針指向關(guān)系映射,表示如下所示Points-to Set的傳播規(guī)則.

    src∈p2set,pt(src)→pt(field)

    ?flow: 該類元素使用屬性from和屬性to代表數(shù)據(jù)依賴映射,表示to變量的數(shù)據(jù)依賴于from變量.

    Methods之后的gaps元素是類中所有使用到的gap的合集,被baseobject和flow元素中的gap屬性引用到.

    5.5 指針指向摘要的使用

    指針指向摘要將應(yīng)用于應(yīng)用程序靜態(tài)分析的指針指向分析階段,圖6是使用摘要的指針指向分析流程的示意圖,圖中虛線部分與摘要生成的指針指向分析相同.

    圖6 使用摘要的指針指向分析流程圖Fig.6 Points-to Analysis of using summary

    5.5.1 加載解析摘要文件

    對摘要文件的使用不是直接將目錄下所有的摘要文件都加載到內(nèi)存中,而是當分析程序檢測到應(yīng)用程序調(diào)用API時,Point2Droid才會從磁盤請求此類的摘要文件并將其加載到內(nèi)存中.如果磁盤上存在大量(或許多不同)庫的摘要,則可以大大降低內(nèi)存消耗.

    5.5.2 創(chuàng)建DummyVarNode

    為了將摘要中指向信息映射到PAG上,我們需要創(chuàng)建DummyVarNode來代表庫函數(shù)中的變量節(jié)點,DummyVarNode繼承自VarNode,表示一個在程序中不存在代碼的變量.但摘要中具有映射關(guān)系的不僅有變量還有域變量和實例對象,是以要分情況生成不同的節(jié)點:

    ·實例對象,解析出該對象的具體類型,創(chuàng)建AllocNode.

    ·基本變量,直接創(chuàng)建DummyVarNode.

    ·域變量,從左到右依次解析訪問路徑,拿到或者創(chuàng)建被引用變量的DummyVarNode,并且根據(jù)DummyVarNode和域創(chuàng)建FieldRefNode,再為域變量創(chuàng)建DummyVarNode,然后在兩個新創(chuàng)建的節(jié)點之間添加一條Load類型的邊.

    5.5.3 構(gòu)造PAG

    首先為當前庫函數(shù)生成一個過程內(nèi)的指針賦值圖MethodPAG,并在其中根據(jù)函數(shù)簽名信息創(chuàng)建this引用、參數(shù)和返回值對應(yīng)的VarNode節(jié)點.然后根據(jù)摘要中指針指向關(guān)系的映射,在MethodPAG創(chuàng)建相應(yīng)的DummyVarNode節(jié)點,并在兩個具有指向關(guān)系的節(jié)點之間添加一條Assignment邊.最后根據(jù)應(yīng)用程序中的調(diào)用語句按照圖7所示的關(guān)系將MethodPAG與整個應(yīng)用程序的PAG連接起來.這樣就能在不需要庫函數(shù)代碼的情況下依然可以構(gòu)建出完整的PAG,同時得到每個節(jié)點的Points-to Set.

    5.5.4 處理Gap和生成GapEdge

    由于gap的存在,在DummyVarNode更新得到它的Points-to Set后,需要解析以這個節(jié)點為調(diào)用基的gap所對應(yīng)的callee.遍歷節(jié)點的Points-to Set,取出每個AllocNode,判斷AllocNode的類型是對應(yīng)一個庫函數(shù)類還是一個應(yīng)用程序類.庫函數(shù)類則從摘要文件中加載相應(yīng)文件取出對應(yīng)摘要信息,應(yīng)用程序類則根據(jù)類型和子簽名得到真正的函數(shù).解析得到gap調(diào)用的callee之后,則為這一調(diào)用生成一個特殊的函數(shù)調(diào)用邊GapEdge并保存在函數(shù)調(diào)用圖中,然后再沿著GapEdge更新PAG.

    圖7 連接PAG和Method PAGFig.7 Add Method PAG into PAG

    5.6 數(shù)據(jù)流摘要的使用

    Point2Droid基于StubDroid使用數(shù)據(jù)依賴摘要.但是本文提到過,StubDroid之前因為缺乏指針指向信息,會使用一些保守的方法查找調(diào)用點或者gap所調(diào)用的函數(shù),并且加載所有可能的數(shù)據(jù)依賴,從而產(chǎn)生不正確的數(shù)據(jù)傳播.而Point2Droid能獲得程序完整的指向信息,生成精確的函數(shù)調(diào)用圖,因此將StubDroid改進為根據(jù)調(diào)用點或者gap真實調(diào)用的函數(shù)加載數(shù)據(jù)依賴,得到準確的數(shù)據(jù)傳播,應(yīng)用于數(shù)據(jù)流分析中.

    6 實驗與分析

    本部分,我們將從摘要生成和摘要使用兩個方面對Point2Droid的性能進行實驗,摘要生成方面將從摘要生成效率和摘要準確性的角度進行衡量,摘要使用方面也將就使用摘要對靜態(tài)分析工具的分析效率和分析結(jié)果方面產(chǎn)生的影響進行評估.

    實驗環(huán)境為:具有40核心(Intel Xeon E7-4830,2.13Ghz),內(nèi)核版本3.16.0,物理內(nèi)存大小為128G的Linux服務(wù)器.服務(wù)器的操作系統(tǒng)為64位的CentOS 7,運行Java版本為1.8的64位HotSpot虛擬機(build 25.111-b14,mixed mode).在針對摘要生成的測評時將最大內(nèi)存(-Xmx)設(shè)置為16G,在針對摘要使用的測評時將最大內(nèi)存設(shè)置為96G.

    6.1 摘要生成的效率測試

    我們使用Point2Droid為Android SDK和Oracle JDK中的庫代碼中17個常用類生成摘要文件,并統(tǒng)計其時間開銷.實驗用的測試樣本是由摘要生成相關(guān)實驗的樣本是Android AOSP 4.2手動構(gòu)建的android.jar(Google分發(fā)的SDK只有Stub沒有具體函數(shù)實現(xiàn)),和Java 8(1.8.0_91)使用的rt.jar.

    表2的測試結(jié)果顯示Point2Droid能在平均30s內(nèi)為一個類生成摘要,這表明Point2Droid生成摘要不是一個耗時耗力的工作.Android SDK和Oracle JDK所產(chǎn)生的結(jié)果幾乎一致,但有些微的差別,這表明兩者在庫函數(shù)的實現(xiàn)上略有差別,但它們的庫函數(shù)對應(yīng)用程序影響是差不多的.此外可以看到生成摘要的時間與objects、flows的數(shù)目不是一個正相關(guān)的關(guān)系,這是因為庫函數(shù)代碼的復(fù)雜程度與指向關(guān)系映射、數(shù)據(jù)流映射條數(shù)沒有關(guān)系.

    表2 摘要生成效率測試的結(jié)果
    Table 2 Experiment result of summarization efficiency

    類名OracleJDKAndroidSDKobject數(shù)目flow數(shù)目生成時間(s)object數(shù)目flow數(shù)目生成時間(s)java.util.ArrayDeque6415143.156815736.30java.util.ArrayList3811135.484311430.43java.util.HashMap5312523.748212118.77java.util.HashSet7112722.827111918.86java.util.IdentityHash-Map416218.15456517.74java.util.WeakHashMap6514230.367111918.16java.util.Hashtable699128.386013821.54java.util.Stack7520960.986216947.12java.util.Vector6118550.945715543.14java.util.concurrent.Concur-rentHashMap6526559.306616839.81java.util.concurrent.CopyOn-WriteArraySet506927.92397216.87java.io.BufferedReader1614117.652018717.26java.io.CharArrayWriter347538.57337327.71java.io.DataInputStream4516528.753512127.78java.io.ByteArrayInput-Stream22513.6922414.80java.io.BufferedArray-OuputStream134111.01123911.44java.io.FilterOutput-Stream8209.9482110.41平均4511830.644611024.60

    6.2 摘要的準確性測試

    為了驗證Point2Droid生成指針指向摘要的準確性,我們?nèi)斯ぷ粉檸旌瘮?shù)中的指針傳遞,并為庫函數(shù)最終產(chǎn)生的指向關(guān)系建模,然后對比人工建模的指向關(guān)系映射與Point2Droid生成結(jié)果的差異.由于庫函數(shù)比較復(fù)雜,人工追蹤指針傳遞將花費極大的精力,所以我們只分析了Android SDK中五個類(見表3 )的函數(shù)實現(xiàn),最后結(jié)果顯示Point2Droid生成的指針指向摘要完全與人工分析的結(jié)果完全一致.這證明Point2Droid這樣的自動化摘要生成工具可以為庫函數(shù)生成正確的指向信息,避免人工去編寫摘要.

    表3 摘要準確性測試的樣本
    Table 3 Test sample of summarization accuracy

    類名函數(shù)數(shù)目object數(shù)目指向關(guān)系映射數(shù)目java.util.Observable81617java.util.ArrayDeque286868java.util.Hashtable176066java.io.BufferedWriter173944java.lang.Integer152122

    6.3 摘要對靜態(tài)數(shù)據(jù)流分析效率的測試

    為了驗證Point2Droid生成的摘要對應(yīng)用程序數(shù)據(jù)流分析性能產(chǎn)生的影響,我們隨機選取的5個大小合適的樣本分別在不使用摘要且加入整個庫函數(shù)的分析、使用StubDroid工具生成的摘要以及使用Point2Droid生成的摘要三種模式下使用靜態(tài)分析工具FlowDroid執(zhí)行數(shù)據(jù)流分析,并且將它們各自的超時(timeout,時間限制)設(shè)為一小時,其它所有運行環(huán)境和參數(shù)均保持一致,最后統(tǒng)計各個分析的時間開銷.

    表4 靜態(tài)分析在三種模式下的時間開銷對比
    Table 4 Compare time overhead of static analysis in three modes

    應(yīng)用程序應(yīng)用程序大小(M)運行時間(s)分析整個庫函數(shù)的FlowDroid使用StubDroid生成摘要的FlowDroid使用Point2Droid生成摘要的FlowDroidDroidCoupon0.86超時57.1124.56ADRD1.62超時28.098.78DroidKungFuSapp2.14超時37.1115.81DogWars4.39超時40.4620.34Plankton8.54超時34.0110.94平均3.51N/A39.3616.09

    表4是本次實驗的結(jié)果,由結(jié)果我們可以看到,若應(yīng)用程序的分析中加入對庫函數(shù)的分析往往會導(dǎo)致超時從而得不到分析結(jié)果,而使用摘要替代庫代碼的分析能將整個數(shù)據(jù)流分析的時間開銷降低為幾十秒.此外,我們還注意到,使用Point2Droid生成的摘要模式下執(zhí)行的數(shù)據(jù)流分析將明顯快于在使用StubDroid生成的摘要模式下的分析,前者平均16s而后者平均39s.因此,我們可以認為Point2Droid生成的摘要對靜態(tài)數(shù)據(jù)流分析的效率有顯著的提升.

    表5 靜態(tài)污點分析在三種模式下檢測到的隱私泄漏對比
    Table 5 Compare leak detection of static analysis in three modes

    應(yīng)用程序使用Point2Droid生成摘要使用StubDroid生成摘要不分析庫函數(shù)庫函數(shù)/數(shù)據(jù)流隱私泄漏數(shù)目庫函數(shù)/數(shù)據(jù)流隱私泄漏數(shù)目隱私泄漏數(shù)目DroidKungFuUp-date13485115753Endofday324662851954N/A28DogWars17841830240175Plankton62771614874DroidKungFu1151511318352138DroidKungFu22712234455962010DroidKungFu3197727348632727DroidCoupon20911936791196DroidDreamLight1413632162243219GoldDream189132229932RogueSPPush134758212635837Asroot42441514744CoinPirate1910258346365856Zsone104121243852121GingerMaster159353262505350BeanBot3015023395162311KMin2719244365804240YZHC1819869252726932DroidKungFuSapp159574284627040DroidDream317855845055平均1811629424

    6.4 摘要對靜態(tài)數(shù)據(jù)流分析效果的測試

    為了測試Point2Droid生成的摘要對靜態(tài)數(shù)據(jù)流分析的檢測效果產(chǎn)生的影響,我們隨機從Android惡意軟件基因組項目[15]中挑選了20個樣本分別在不使用摘要且不分析庫函數(shù)、使用StubDroid工具生成的摘要以及使用Point2Droid生成的摘要三種模式下使用FlowDroid執(zhí)行污點分析,并且統(tǒng)計分析檢測到的隱私泄漏數(shù)目.

    本次實驗結(jié)果(表5)顯示,使用Point2Droid的摘要相比于使用StubDroid生成的摘要,需要加載的庫函數(shù)數(shù)目和數(shù)據(jù)流數(shù)目明顯減少,而分析出的隱私泄漏數(shù)目不僅沒有減少,反而有所提高.其中,利用StubDroid生成的摘要進行測試的EndofDay出現(xiàn)了超時,而其它兩種模式下沒有,這是因為使用StubDroid生成的摘要會加載更多的數(shù)據(jù)流從而使得靜態(tài)污點分析將更多的數(shù)據(jù)打上污點,分析的時間增加,導(dǎo)致超時,這也驗證了6.3的結(jié)果.在StubDroid生成摘要模式下和在Point2Droid生成摘要模式下檢測到的隱私泄漏均多于未使用摘要且不分析庫函數(shù)模式下的檢測結(jié)果.

    7 總 結(jié)

    為了避免庫函數(shù)為程序分析帶來的過多開銷,需要為庫函數(shù)建模生成摘要.針對現(xiàn)有的自動化摘要技術(shù)StubDroid中因缺乏對庫函數(shù)中指向信息建模而產(chǎn)生的數(shù)據(jù)流分析的精確度和覆蓋率上的問題,本文提出了Point2Droid系統(tǒng).Point2Droid實現(xiàn)了對庫函數(shù)的指向信息進行自動化的摘要生成并且在靜態(tài)數(shù)據(jù)流分析過程中自動加載指向信息摘要,通過庫函數(shù)中指向信息的支持,靜態(tài)數(shù)據(jù)流分析工具能生成準確的函數(shù)調(diào)用圖,加載正確的庫函數(shù)信息流,有效地解決了StubDroid系統(tǒng)中存在的精確性和覆蓋率問題.

    [1] Arzt S,Bodden E.StubDroid:automatic inference of precise data-flow summaries for the android framework[C].Proceedings of the 38th International Conference on Software Engineering,ACM,2016:725-735.

    [2] Arzt S,Rasthofer S,Fritz C,et al.Flowdroid:precise context,flow,field,object-sensitive and lifecycle-aware taint analysis for android apps[J]. ACM Sigplan Notices,2014,49(6):259-269.

    [3] Alfred V A,Monica S L,Ravi S,et al.Compilers principles,techniques and tools(2nd )[M].Beijing:China Machine Press,2009:382-402

    [4] Andersen L O.Program analysis and specialization for the C programming language[D].University of Cophenhagen,1994.

    [5] Steensgaard B.Points-to analysis in almost linear time[C].Proceedings of the 23rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages,ACM,1996:32-41.

    [6] Vallée-Rai R,Co P,Gagnon E,et al.Soot-a Java bytecode optimization framework[C].Proceedings of the 1999 Conference of the Centre for Advanced Studies on Collaborative Research,IBM Press,1999:13.

    [7] Fink S,Dolby J.WALA-the TJ watson libraries for analysis[EB/OL].https://wala.sourceforge.net,2017.

    [8] Lhoták O,Hendren L.Scaling Java points-to analysis using Spark[C].International Conference on Compiler Construction.Springer Berlin Heidelberg,2003:153-169.

    [9] Gordon M I,Kim D,Perkins J,et al.Information-flow analysis of Android applications in droid safe[C]. Network and Distributed System Security Symposium.2015.

    [10] Lu L,Li Z,Wu Z,et al.CHEX:statically vetting Android apps for component hijacking vulnerabilities[C]. ACM Conference on Computer and Communications Security,ACM,2012:229-240.

    [11] Wei F,Roy S,Ou X,et al.Amandroid:a precise and general inter-component data flow analysis framework for security vetting of Android apps[C]. ACM Sigsac Conference on Computer and Communications Security,ACM,2014:1329-1341.

    [12] Zhai J,Huang J,Ma S,et al.Automatic model generation from documentation for Java API functions[C]. International Conference on Software Engineering,ACM,2016:380-391.

    [13] Cao Y,Fratantonio Y,Bianchi A,et al.EdgeMiner:automatically detecting implicit control flow transitions through the Android framework[C]. Network and Distributed System Security Symposium,2015.

    [14] Tang H,Wang X,Zhang L,et al.Summary-based context-sensitive data-dependence analysis in presence of callbacks[C].ACM SIGPLAN Notices,ACM,2015,50(1):83-95.

    [15] Zhou Y,Jiang X.Dissecting android malware:Characterization and evolution[C].Security and Privacy (SP),2012 IEEE Symposium on.IEEE,2012:95-109.

    附中文參考文獻:

    [3] Alfred V A,Monica S L,Ravi S,et al.編輯原理[M].北京:機械工業(yè)出版社,2009:382-402.

    猜你喜歡
    數(shù)據(jù)流指針指向
    科學(xué)備考新指向——不等式選講篇
    汽車維修數(shù)據(jù)流基礎(chǔ)(下)
    偷指針的人
    娃娃畫報(2019年5期)2019-06-17 16:58:10
    一種提高TCP與UDP數(shù)據(jù)流公平性的擁塞控制機制
    把準方向盤 握緊指向燈 走好創(chuàng)新路
    傳媒評論(2017年8期)2017-11-08 01:47:36
    為什么表的指針都按照順時針方向轉(zhuǎn)動
    基于數(shù)據(jù)流聚類的多目標跟蹤算法
    基于改進Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
    電測與儀表(2015年5期)2015-04-09 11:30:42
    北醫(yī)三院 數(shù)據(jù)流疏通就診量
    ARM Cortex—MO/MO+單片機的指針變量替換方法
    激情在线观看视频在线高清| 一卡2卡三卡四卡精品乱码亚洲| 久久亚洲精品不卡| 婷婷亚洲欧美| 在线十欧美十亚洲十日本专区| 精品久久久久久久人妻蜜臀av| 国产久久久一区二区三区| 色av中文字幕| 精品久久蜜臀av无| 国产亚洲欧美98| 操出白浆在线播放| 久久亚洲真实| 亚洲五月天丁香| 又大又爽又粗| 国产亚洲av嫩草精品影院| 一个人免费在线观看电影 | 亚洲性夜色夜夜综合| 我要搜黄色片| 欧美激情在线99| 香蕉丝袜av| 久久久久久国产a免费观看| 一二三四社区在线视频社区8| 国产私拍福利视频在线观看| 亚洲激情在线av| 一进一出好大好爽视频| 国产欧美日韩一区二区三| 日本精品一区二区三区蜜桃| 久久久久久久久久黄片| 国产精品av视频在线免费观看| 精品久久久久久,| 国产真人三级小视频在线观看| 国产三级中文精品| 亚洲 国产 在线| 身体一侧抽搐| 在线观看免费视频日本深夜| 日韩中文字幕欧美一区二区| 精品电影一区二区在线| 最好的美女福利视频网| 亚洲美女黄片视频| 国产高清激情床上av| 在线免费观看的www视频| 久久99热这里只有精品18| 美女黄网站色视频| 久久精品影院6| 亚洲狠狠婷婷综合久久图片| 搡老妇女老女人老熟妇| 久久午夜亚洲精品久久| 男插女下体视频免费在线播放| cao死你这个sao货| 岛国在线免费视频观看| www.www免费av| 99在线视频只有这里精品首页| 可以在线观看的亚洲视频| aaaaa片日本免费| 亚洲avbb在线观看| 最新美女视频免费是黄的| 国产1区2区3区精品| 可以在线观看毛片的网站| 欧美日本视频| 欧美日韩瑟瑟在线播放| 国产精品98久久久久久宅男小说| 婷婷精品国产亚洲av| 欧美三级亚洲精品| 国产爱豆传媒在线观看| 午夜免费成人在线视频| 亚洲欧美日韩无卡精品| 99久久精品热视频| 亚洲美女视频黄频| 天堂√8在线中文| 97超视频在线观看视频| a级毛片a级免费在线| 两个人视频免费观看高清| 嫁个100分男人电影在线观看| 桃红色精品国产亚洲av| 欧美成狂野欧美在线观看| 精品熟女少妇八av免费久了| 无人区码免费观看不卡| 两人在一起打扑克的视频| 亚洲精品456在线播放app | 国产成人一区二区三区免费视频网站| 久久久国产成人免费| 亚洲成人久久爱视频| 母亲3免费完整高清在线观看| 亚洲精品粉嫩美女一区| 99久久精品热视频| 丰满的人妻完整版| 国产亚洲欧美在线一区二区| 国产黄a三级三级三级人| 90打野战视频偷拍视频| 制服丝袜大香蕉在线| 一夜夜www| 欧美xxxx黑人xx丫x性爽| tocl精华| 老司机午夜福利在线观看视频| 老司机午夜福利在线观看视频| 美女扒开内裤让男人捅视频| 级片在线观看| 精品久久久久久久久久免费视频| 国产精品一区二区免费欧美| 一级毛片女人18水好多| 亚洲无线观看免费| 亚洲国产精品合色在线| 三级国产精品欧美在线观看 | 欧美xxxx黑人xx丫x性爽| 后天国语完整版免费观看| 99久久国产精品久久久| 成年女人毛片免费观看观看9| 99热这里只有精品一区 | 曰老女人黄片| 日韩中文字幕欧美一区二区| 日韩欧美国产一区二区入口| 日韩成人在线观看一区二区三区| 国产精品久久久久久精品电影| 十八禁网站免费在线| 欧美午夜高清在线| 嫩草影院精品99| 欧美日韩乱码在线| 观看免费一级毛片| 日本一本二区三区精品| 精品国产乱子伦一区二区三区| 国产美女午夜福利| 狂野欧美激情性xxxx| 久久草成人影院| 成人av一区二区三区在线看| 久久久久国产精品人妻aⅴ院| 国产亚洲精品综合一区在线观看| 久久热在线av| 欧美成人免费av一区二区三区| 亚洲欧美精品综合久久99| 成人18禁在线播放| 岛国视频午夜一区免费看| 久久久水蜜桃国产精品网| 叶爱在线成人免费视频播放| 老鸭窝网址在线观看| 欧美乱妇无乱码| 母亲3免费完整高清在线观看| 青草久久国产| a级毛片在线看网站| 很黄的视频免费| 国产在线精品亚洲第一网站| 欧美日韩瑟瑟在线播放| 亚洲成人免费电影在线观看| 最好的美女福利视频网| 久久天堂一区二区三区四区| 99精品欧美一区二区三区四区| 国产成年人精品一区二区| 噜噜噜噜噜久久久久久91| 岛国在线免费视频观看| 精品熟女少妇八av免费久了| 两性夫妻黄色片| 国产精品美女特级片免费视频播放器 | 成人午夜高清在线视频| av在线天堂中文字幕| 两性夫妻黄色片| 好男人在线观看高清免费视频| 美女cb高潮喷水在线观看 | 熟妇人妻久久中文字幕3abv| 日本黄大片高清| 成人三级黄色视频| 中文字幕人妻丝袜一区二区| 欧美性猛交╳xxx乱大交人| 免费观看的影片在线观看| 亚洲avbb在线观看| 看片在线看免费视频| 国产视频一区二区在线看| 成人国产一区最新在线观看| 一进一出好大好爽视频| 51午夜福利影视在线观看| 99在线视频只有这里精品首页| 免费看日本二区| 国产精品野战在线观看| 小说图片视频综合网站| 99re在线观看精品视频| 叶爱在线成人免费视频播放| 国产淫片久久久久久久久 | 国产视频一区二区在线看| 99热这里只有是精品50| 婷婷亚洲欧美| 国产爱豆传媒在线观看| 久久久久久久久久黄片| 亚洲五月天丁香| 欧洲精品卡2卡3卡4卡5卡区| 一本精品99久久精品77| 可以在线观看毛片的网站| 中文亚洲av片在线观看爽| 久久精品aⅴ一区二区三区四区| 天天添夜夜摸| 在线观看免费午夜福利视频| 欧美中文综合在线视频| 国产精品亚洲美女久久久| 国产不卡一卡二| 国模一区二区三区四区视频 | 少妇熟女aⅴ在线视频| 国产精品影院久久| 波多野结衣高清作品| 精品欧美国产一区二区三| 丁香六月欧美| 不卡一级毛片| 丰满的人妻完整版| 午夜福利在线观看吧| 欧美色欧美亚洲另类二区| 脱女人内裤的视频| 久久精品亚洲精品国产色婷小说| 亚洲成人免费电影在线观看| 国产真人三级小视频在线观看| 久久久国产精品麻豆| 国产麻豆成人av免费视频| 国产1区2区3区精品| 身体一侧抽搐| 国产成人福利小说| 欧美日韩一级在线毛片| 亚洲在线观看片| 亚洲中文字幕一区二区三区有码在线看 | 精品久久久久久久毛片微露脸| 久久久色成人| 窝窝影院91人妻| 神马国产精品三级电影在线观看| 久久精品综合一区二区三区| 黄频高清免费视频| 国产精品亚洲av一区麻豆| 国产亚洲精品一区二区www| 午夜福利在线在线| 男人的好看免费观看在线视频| 国产伦精品一区二区三区四那| 搡老岳熟女国产| 日本一二三区视频观看| www日本在线高清视频| 国产成年人精品一区二区| 非洲黑人性xxxx精品又粗又长| 亚洲最大成人中文| 国产一区二区三区在线臀色熟女| 国产精品一区二区免费欧美| 久久精品夜夜夜夜夜久久蜜豆| 别揉我奶头~嗯~啊~动态视频| 国产伦一二天堂av在线观看| 亚洲国产欧洲综合997久久,| 国内久久婷婷六月综合欲色啪| 亚洲成人久久性| 欧美激情在线99| 99久久精品一区二区三区| 婷婷六月久久综合丁香| 欧美中文日本在线观看视频| 大型黄色视频在线免费观看| 久久久色成人| 夜夜看夜夜爽夜夜摸| 日本免费a在线| 夜夜躁狠狠躁天天躁| 日韩 欧美 亚洲 中文字幕| 久久久国产成人免费| 老司机在亚洲福利影院| 亚洲狠狠婷婷综合久久图片| 99精品在免费线老司机午夜| 91老司机精品| 久久这里只有精品中国| 黄色片一级片一级黄色片| 国产精品一区二区三区四区免费观看 | 变态另类丝袜制服| 黑人欧美特级aaaaaa片| 婷婷精品国产亚洲av在线| 99在线人妻在线中文字幕| 亚洲成人久久爱视频| 国产毛片a区久久久久| 长腿黑丝高跟| 最新美女视频免费是黄的| av国产免费在线观看| 一进一出抽搐动态| 国产99白浆流出| 男女视频在线观看网站免费| 免费看光身美女| 亚洲av日韩精品久久久久久密| 精品久久久久久成人av| 巨乳人妻的诱惑在线观看| 一本一本综合久久| 日本黄色视频三级网站网址| www.www免费av| 在线十欧美十亚洲十日本专区| 亚洲熟妇熟女久久| 夜夜躁狠狠躁天天躁| 久久精品国产亚洲av香蕉五月| 可以在线观看的亚洲视频| 全区人妻精品视频| 国产精品久久视频播放| 一个人看的www免费观看视频| 90打野战视频偷拍视频| 夜夜躁狠狠躁天天躁| 婷婷六月久久综合丁香| 国产成人欧美在线观看| 亚洲美女黄片视频| 97超级碰碰碰精品色视频在线观看| 成人特级黄色片久久久久久久| 香蕉丝袜av| 日韩大尺度精品在线看网址| 亚洲精品色激情综合| 日韩欧美在线二视频| 精品久久久久久,| 国产成人av教育| 国产精品亚洲一级av第二区| 欧美xxxx黑人xx丫x性爽| 亚洲最大成人中文| а√天堂www在线а√下载| 黑人操中国人逼视频| 天堂动漫精品| 欧美一级a爱片免费观看看| 婷婷六月久久综合丁香| 久久伊人香网站| 天天躁狠狠躁夜夜躁狠狠躁| 国内精品久久久久久久电影| 亚洲av成人不卡在线观看播放网| 久久九九热精品免费| 久久久久国产精品人妻aⅴ院| 久久久久久久午夜电影| 国产激情欧美一区二区| 国产黄a三级三级三级人| 91老司机精品| 日韩中文字幕欧美一区二区| 免费人成视频x8x8入口观看| 欧美激情久久久久久爽电影| 亚洲av熟女| 欧美绝顶高潮抽搐喷水| 免费大片18禁| netflix在线观看网站| 亚洲av免费在线观看| 法律面前人人平等表现在哪些方面| 午夜免费成人在线视频| 狂野欧美白嫩少妇大欣赏| 人妻夜夜爽99麻豆av| 午夜福利视频1000在线观看| 九九在线视频观看精品| 亚洲五月天丁香| 老熟妇乱子伦视频在线观看| 欧美黑人巨大hd| 成人高潮视频无遮挡免费网站| 精品久久久久久久毛片微露脸| 久久久精品大字幕| 亚洲精品美女久久av网站| 国产成人av激情在线播放| 精品国产三级普通话版| 色尼玛亚洲综合影院| 一区福利在线观看| www国产在线视频色| 色在线成人网| 国产亚洲欧美98| 午夜免费成人在线视频| 亚洲人成伊人成综合网2020| 最好的美女福利视频网| 国产单亲对白刺激| 国产一区二区在线观看日韩 | 欧美成人免费av一区二区三区| 神马国产精品三级电影在线观看| 国产精品av久久久久免费| 成人18禁在线播放| 男人舔女人下体高潮全视频| 国产精品 欧美亚洲| 搡老岳熟女国产| 在线看三级毛片| 午夜福利在线在线| 成人鲁丝片一二三区免费| 亚洲美女黄片视频| 精品午夜福利视频在线观看一区| 亚洲国产精品999在线| 欧美丝袜亚洲另类 | 特大巨黑吊av在线直播| 久久亚洲精品不卡| 欧洲精品卡2卡3卡4卡5卡区| 香蕉av资源在线| 国产精品永久免费网站| 欧美午夜高清在线| 亚洲在线自拍视频| 日韩三级视频一区二区三区| 中文字幕av在线有码专区| 欧美一区二区国产精品久久精品| 国产1区2区3区精品| 免费高清视频大片| 免费一级毛片在线播放高清视频| 国产三级黄色录像| 可以在线观看毛片的网站| 色综合亚洲欧美另类图片| 很黄的视频免费| 国内少妇人妻偷人精品xxx网站 | 国产高潮美女av| cao死你这个sao货| 亚洲av五月六月丁香网| 亚洲五月天丁香| 欧美日韩综合久久久久久 | 好看av亚洲va欧美ⅴa在| 中文字幕熟女人妻在线| 一本综合久久免费| 国产黄色小视频在线观看| 国产精品99久久久久久久久| 欧美成人性av电影在线观看| 岛国在线观看网站| 中亚洲国语对白在线视频| 亚洲专区国产一区二区| 日韩高清综合在线| 亚洲中文字幕一区二区三区有码在线看 | 超碰成人久久| 搡老妇女老女人老熟妇| 亚洲精品一卡2卡三卡4卡5卡| 最近最新中文字幕大全免费视频| 成人高潮视频无遮挡免费网站| 性色av乱码一区二区三区2| 国产伦一二天堂av在线观看| 99国产精品一区二区蜜桃av| 黑人巨大精品欧美一区二区mp4| 精品久久久久久久末码| 国产极品精品免费视频能看的| 禁无遮挡网站| 国产高清视频在线播放一区| 99久久精品国产亚洲精品| 婷婷精品国产亚洲av在线| 美女高潮的动态| 在线视频色国产色| 成人18禁在线播放| 国产欧美日韩精品亚洲av| 日韩大尺度精品在线看网址| or卡值多少钱| 国内精品一区二区在线观看| 国产成人影院久久av| 亚洲成人免费电影在线观看| 操出白浆在线播放| 日本五十路高清| av片东京热男人的天堂| 女人被狂操c到高潮| 美女大奶头视频| 欧美中文综合在线视频| 国产欧美日韩一区二区三| 亚洲在线观看片| 国产一区二区激情短视频| 9191精品国产免费久久| 午夜亚洲福利在线播放| av天堂中文字幕网| 午夜精品久久久久久毛片777| 国产高清视频在线播放一区| 日本黄色片子视频| 国产伦精品一区二区三区视频9 | 日韩欧美在线乱码| 亚洲av熟女| 九九在线视频观看精品| 在线观看免费午夜福利视频| 人人妻,人人澡人人爽秒播| 最新在线观看一区二区三区| 久久精品国产亚洲av香蕉五月| 在线播放国产精品三级| 国产黄a三级三级三级人| 99久久99久久久精品蜜桃| 国产精品自产拍在线观看55亚洲| 99国产精品一区二区三区| 欧美激情在线99| 国产精品亚洲一级av第二区| 国产成人aa在线观看| 国产精品一区二区免费欧美| 国产av不卡久久| 亚洲中文日韩欧美视频| 亚洲九九香蕉| 婷婷亚洲欧美| 男人和女人高潮做爰伦理| 国产三级中文精品| 老司机福利观看| 久久天堂一区二区三区四区| 亚洲欧美日韩高清在线视频| 久久久精品欧美日韩精品| 亚洲国产精品合色在线| 禁无遮挡网站| 亚洲真实伦在线观看| 精品久久久久久成人av| 中文字幕人妻丝袜一区二区| 少妇的逼水好多| 狠狠狠狠99中文字幕| 熟女电影av网| 国产美女午夜福利| www日本黄色视频网| 中文在线观看免费www的网站| 黄片小视频在线播放| 脱女人内裤的视频| 舔av片在线| 老司机在亚洲福利影院| 禁无遮挡网站| 国产男靠女视频免费网站| 午夜福利成人在线免费观看| 国产精品一区二区三区四区久久| 色综合婷婷激情| cao死你这个sao货| 亚洲电影在线观看av| 久久这里只有精品19| 亚洲国产精品999在线| 黄色丝袜av网址大全| 亚洲精品国产精品久久久不卡| 国产成人精品久久二区二区免费| 亚洲av第一区精品v没综合| av福利片在线观看| 国产麻豆成人av免费视频| 国产精品99久久99久久久不卡| 最近最新免费中文字幕在线| 精品电影一区二区在线| 婷婷丁香在线五月| 久久中文看片网| 真人做人爱边吃奶动态| 18禁美女被吸乳视频| 全区人妻精品视频| 欧美色欧美亚洲另类二区| 国产蜜桃级精品一区二区三区| 欧美一级a爱片免费观看看| 偷拍熟女少妇极品色| 日本成人三级电影网站| 99热6这里只有精品| 久久这里只有精品中国| 亚洲av中文字字幕乱码综合| 99国产精品一区二区蜜桃av| 亚洲成人久久性| 欧美一级毛片孕妇| 亚洲av成人av| 亚洲va日本ⅴa欧美va伊人久久| 麻豆av在线久日| 日韩欧美 国产精品| 精品久久蜜臀av无| 国产欧美日韩精品亚洲av| 韩国av一区二区三区四区| 久久亚洲真实| 伊人久久大香线蕉亚洲五| 国产单亲对白刺激| 中文字幕人妻丝袜一区二区| 国产熟女xx| 亚洲精华国产精华精| 好男人电影高清在线观看| www国产在线视频色| 岛国视频午夜一区免费看| 一本综合久久免费| 一边摸一边抽搐一进一小说| 国产三级中文精品| 在线播放国产精品三级| 噜噜噜噜噜久久久久久91| 一级黄色大片毛片| 久99久视频精品免费| 男女下面进入的视频免费午夜| 亚洲av成人精品一区久久| 极品教师在线免费播放| 99视频精品全部免费 在线 | avwww免费| 亚洲av成人精品一区久久| 国产伦人伦偷精品视频| 一区二区三区激情视频| 亚洲人成伊人成综合网2020| 91麻豆精品激情在线观看国产| 一区二区三区国产精品乱码| cao死你这个sao货| 每晚都被弄得嗷嗷叫到高潮| 首页视频小说图片口味搜索| 中文字幕人妻丝袜一区二区| 亚洲专区字幕在线| 青草久久国产| 色在线成人网| 精品国产乱子伦一区二区三区| 免费大片18禁| 色哟哟哟哟哟哟| 欧美日韩亚洲国产一区二区在线观看| 一二三四社区在线视频社区8| 欧美乱色亚洲激情| 国产欧美日韩一区二区精品| 男人舔女人下体高潮全视频| 成人精品一区二区免费| 又大又爽又粗| av天堂在线播放| 国产久久久一区二区三区| a级毛片a级免费在线| 九九在线视频观看精品| 女人被狂操c到高潮| 亚洲av成人av| 国产黄片美女视频| 在线看三级毛片| 深夜精品福利| 熟妇人妻久久中文字幕3abv| 麻豆成人午夜福利视频| 久久精品国产亚洲av香蕉五月| 看片在线看免费视频| 国模一区二区三区四区视频 | 日本在线视频免费播放| 听说在线观看完整版免费高清| 小说图片视频综合网站| 欧美中文日本在线观看视频| 哪里可以看免费的av片| 黄色成人免费大全| 99久久精品国产亚洲精品| 亚洲激情在线av| 亚洲自偷自拍图片 自拍| 欧美乱妇无乱码| 国产精品香港三级国产av潘金莲| 国产欧美日韩精品一区二区| 中国美女看黄片| 午夜免费成人在线视频| 制服人妻中文乱码| 精品免费久久久久久久清纯| 12—13女人毛片做爰片一| 国产精品永久免费网站| 91av网站免费观看| 欧美一区二区精品小视频在线| 精品久久久久久成人av| 听说在线观看完整版免费高清| 国产亚洲精品久久久久久毛片| 两人在一起打扑克的视频| 丰满人妻一区二区三区视频av | 熟女电影av网| 亚洲欧美精品综合久久99| 久久久国产精品麻豆| 动漫黄色视频在线观看| 美女扒开内裤让男人捅视频| 亚洲av日韩精品久久久久久密| 亚洲专区国产一区二区| 国产视频内射| 哪里可以看免费的av片| 麻豆成人av在线观看| 国产单亲对白刺激| 成人特级av手机在线观看| 精品一区二区三区视频在线观看免费| 中出人妻视频一区二区| 综合色av麻豆|