新四季網

應用程式的處理方法及處理裝置與流程

2023-05-01 02:26:22 1


本申請涉及計算機領域,具體而言,涉及一種應用程式的處理方法及處理裝置。



背景技術:

應用程式的數據流和控制流被廣泛用於計算機行業的諸多領域,例如軟體測試領域、漏洞挖掘領域以及病毒行為分析領域等。其中,數據流(dataflow)是指一組有順序、有起點和終點的字節集合,應用程式從輸入設備獲取數據、向文件中寫入數據、或是在網絡連接上進行數據的讀寫操作,都可以使用數據流來完成。控制流(controlflow)是指程序邏輯行之間的控制關係。

目前,一般採用動態方法或靜態方法來獲取應用程式的數據流和控制流,然而,對於動態方法而言,一般受限於應用程式的運行環境和運行狀態,而導致不能發現應用程式的所有行為,無法準確獲取應用程式的數據流和控制流;對於靜態方法而言,由於缺失應用程式運行過程中的一些環境變量(如高級語言中的繼承關係、遠程伺服器交互等),而導致無法準確獲取應用程式的數據流和控制流。

針對上述的問題,目前尚未提出有效的解決方案。

申請內容

本申請實施例提供了一種應用程式的處理方法及處理裝置,以至少解決現有技術獲取到的應用程式的控制流和數據流的準確率較低的技術問題。

根據本申請實施例的一個方面,提供了一種應用程式的處理方法,包括:獲取目標應用程式的控制流圖,其中,上述控制流圖中包含由上述目標應用程式中的函數分解而成的多個程序塊,每個程序塊包含當前程序塊id和後繼程序塊id,上述後繼程序塊id用於指向所跳轉的程序塊;按照上述控制流圖中的上述當前程序塊id和上述後繼程序塊id所構成的執行路徑,執行上述多個程序塊,得到每個程序塊對應的狀態信息,其中,上述狀態信息用於指示執行每個程序塊時所使用的數據狀態;基於上述狀態信息和上述控制流圖生成上述目標應用程式的上述控制流和上述數據流。

根據本申請實施例的另一方面,還提供了一種應用程式的處理裝置,包括:獲取 單元,用於獲取目標應用程式的控制流圖,其中,上述控制流圖中包含由上述目標應用程式中的函數分解而成的多個程序塊,每個程序塊包含當前程序塊id和後繼程序塊id,上述後繼程序塊id用於指向所跳轉的程序塊;執行單元,用於按照上述控制流圖中的上述當前程序塊id和上述後繼程序塊id所構成的執行路徑,執行上述多個程序塊,得到每個程序塊對應的狀態信息,其中,上述狀態信息用於指示執行每個程序塊時所使用的數據狀態;生成單元,用於基於上述狀態信息和上述控制流圖生成上述目標應用程式的上述控制流和上述數據流。

在本申請實施例中,採用獲取目標應用程式的控制流圖,其中,控制流圖中包含由目標應用程式中的函數分解而成的多個程序塊,每個程序塊包含當前程序塊id和後繼程序塊id,後繼程序塊id用於指向所跳轉的程序塊;按照控制流圖中的當前程序塊id和後繼程序塊id所構成的執行路徑,執行多個程序塊,得到每個程序塊對應的狀態信息,其中,狀態信息用於指示執行每個程序塊時所使用的數據狀態;基於狀態信息和控制流圖生成目標應用程式的控制流和數據流的方式,通過獲取目標應用程式的控制流圖,並根據控制流圖中的執行路徑執行多個程序塊得到每個程序塊對應的狀態信息,採用動靜態執行結合的方法,達到了基於狀態信息和控制流圖生成目標應用程式的控制流和數據流的目的,從而實現了有效監控目標應用程式的數據流、避免遺漏掉程序行為、提高控制流和數據流的準確率的技術效果,進而解決了現有技術獲取到的應用程式的控制流和數據流的準確率較低的技術問題。

附圖說明

此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用於解釋本申請,並不構成對本申請的不當限定。在附圖中:

圖1是根據本申請實施例的一種運行文件檢測方法的計算機終端的硬體結構框圖;

圖2是根據本申請實施例的一種可選的應用程式的處理方法的流程示意圖;

圖3是根據本申請實施例的另一種可選的應用程式的處理方法的流程示意圖;

圖4是根據本申請實施例的又一種可選的應用程式的處理方法的流程示意圖;

圖5是根據本申請實施例的又一種可選的應用程式的處理方法的結構示意圖;

圖6是根據本申請實施例的一種可選的應用程式的處理裝置的結構示意圖;

圖7是根據本申請實施例的另一種可選的應用程式的處理裝置的結構示意圖;

圖8是根據本申請實施例的又一種可選的應用程式的處理裝置的結構示意圖;

圖9是根據本申請實施例的又一種可選的應用程式的處理裝置的結構示意圖;

圖10是根據本申請實施例的又一種可選的應用程式的處理裝置的結構示意圖;

圖11是根據本申請實施例的一種計算機終端的結構框圖。

具體實施方式

為了使本技術領域的人員更好地理解本申請方案,下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分的實施例,而不是全部的實施例。基於本申請中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都應當屬於本申請保護的範圍。

需要說明的是,本申請的說明書和權利要求書及上述附圖中的術語「第一」、「第二」等是用於區別類似的對象,而不必用於描述特定的順序或先後次序。應該理解這樣使用的數據在適當情況下可以互換,以便這裡描述的本申請的實施例能夠以除了在這裡圖示或描述的那些以外的順序實施。此外,術語「包括」和「具有」以及他們的任何變形,意圖在於覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統、產品或設備不必限於清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或對於這些過程、方法、產品或設備固有的其它步驟或單元。

實施例1

根據本申請實施例,還提供了一種應用程式的處理方法的方法實施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執行指令的計算機系統中執行,並且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同於此處的順序執行所示出或描述的步驟。

本申請實施例一所提供的方法實施例可以在移動終端、計算機終端或者類似的運算裝置中執行。以運行在計算機終端上為例,圖1是本申請實施例的一種應用程式的處理方法的計算機終端的硬體結構框圖。如圖1所示,計算機終端10可以包括一個或多個(圖中僅示出一個)處理器102(處理器102可以包括但不限於微處理器mcu或可編程邏輯器件fpga等的處理裝置)、用於存儲數據的存儲器104、以及用於通信功能的傳輸裝置106。本領域普通技術人員可以理解,圖1所示的結構僅為示意,其並不對上述電子裝置的結構造成限定。例如,計算機終端10還可包括比圖1中所示更多 或者更少的組件,或者具有與圖1所示不同的配置。

存儲器104可用於存儲應用軟體的軟體程序以及模程序塊,如本申請實施例中的應用程式的處理方法對應的程序指令/模程序塊,處理器102通過運行存儲在存儲器104內的軟體程序以及模程序塊,從而執行各種功能應用以及數據處理,即實現上述的應用程式的漏洞檢測方法。存儲器104可包括高速隨機存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、快閃記憶體、或者其他非易失性固態存儲器。在一些實例中,存儲器104可進一步包括相對於處理器102遠程設置的存儲器,這些遠程存儲器可以通過網絡連接至計算機終端10。上述網絡的實例包括但不限於網際網路、企業內部網、區域網、移動通信網及其組合。

傳輸裝置106用於經由一個網絡接收或者發送數據。上述的網絡具體實例可包括計算機終端10的通信供應商提供的無線網絡。在一個實例中,傳輸裝置106包括一個網絡適配器(networkinterfacecontroller,nic),其可通過基站與其他網絡設備相連從而可與網際網路進行通訊。在一個實例中,傳輸裝置106可以為射頻(radiofrequency,rf)模程序塊,其用於通過無線方式與網際網路進行通訊。

在上述運行環境下,本申請提供了如圖2所示的應用程式的處理方法。圖2是根據本申請實施例一的應用程式的處理方法的流程圖。

如圖2所示,該應用程式的處理方法可以包括如下實現步驟:

步驟s202,獲取目標應用程式的控制流圖。

本申請上述步驟s202中,控制流圖中包含由目標應用程式中的函數分解而成的多個程序塊,每個程序塊包含當前程序塊id和後繼程序塊id,後繼程序塊id用於指向所跳轉的程序塊。控制流圖(controlflowgraph,簡稱cfg)又稱為控制流程圖,是一個過程或者程序的抽象表現,通常以數據鏈的形式表示。控制流圖是用在編譯器中的一個抽象數據結構,由編譯器進行內部維護。

需要說明的是,需獲取目標應用程式的控制流和數據流可以包括如下幾種情況:

情況一、需要對目標應用程式進行軟體測試。其中,該軟體測試可以為測試人員在開發環境下進行的測試,也可以為測試人員在模擬實際操作環境下進行的測試,例如α測試。

情況二、需要對目標應用程式進行漏洞挖掘。

情況三、需要對目標應用程式進行病毒行為分析。

需要說明的是,上述三種情況僅為示例性描述,並不用於限制需獲取目標應用程式的控制流和數據流的其他情況。

可選地,程序塊是可由彙編程序、編譯程序、裝入程序或翻譯程序作為一個整體來處理的一級獨立的、可識別的程序指令。一般,程序塊能被裝入內存中運行的可執行代碼和數據集合。程序塊id為程序塊的標識,即每個程序塊都有一個獨立的當前程序塊id用以唯一地表示該程序塊以及該程序塊在smali(目標應用程式的字節碼)代碼中的位置。當前程序塊id可以由如下所示的組成部分組成:

類名/方法名/方法參數和返回值/當前程序塊首條指令在函數中的偏移。

可選地,每個程序塊除包含當前程序塊id之外,還包含後繼程序塊id。前述每個程序塊需是由一個函數調用指令或者跳轉指令結束,當前程序塊的後繼程序塊就是上述跳轉指令的跳轉地址,因此,後繼程序塊id就是當前程序塊將要或已經跳轉所至的程序塊的id。

本實施例中,目標應用程式可以但不限於為c語言程序、基於ios系統的程序或者基於android系統的程序(以下簡稱android程序)。若目標應用程式為android程序,則該目標應用程式的格式為apk(androidpackage,安卓安裝包)格式,apk格式通常是一個zip(一種計算機文件壓縮算法)格式的壓縮包,其包含一個classes.dex文件作為執行主體。此外,若目標應用程式為android程序,則其字節碼為smali。

步驟s204,按照控制流圖中的當前程序塊id和後繼程序塊id所構成的執行路徑,執行多個程序塊,得到每個程序塊對應的狀態信息,其中,狀態信息用於指示執行每個程序塊時所使用的數據狀態。

本申請上述步驟s204中,該狀態信息可以包括以下一種或幾種:調用棧、函數執行返回值、類的實例、寄存器、指令集以及類的繼承關係等。後繼程序塊id實質上為當前程序塊的跳轉信息,後繼程序塊id用於指示當前程序塊按照其指示的執行路徑跳轉至後繼程序塊。

例如,某控制流圖中包含程序塊a、程序塊b、程序塊c、程序塊d和程序塊e共計5個程序塊,其中,若程序塊a包含程序塊a的id和程序塊b的id,則可以確定程序塊b為程序塊a的後繼程序塊,程序塊b的id用於指向所跳轉的程序塊b,且程序塊a的id和程序塊b的id構成由程序塊a到程序塊b的執行路徑「a→b」(箭頭「→」表示執行路徑的方向);若程序塊b包含程序塊b的id和程序塊d的id,則程序塊b的id和程序塊d的id構成由程序塊b到程序塊d的執行路徑「b→d」。

再例如,若兩條不同的執行路徑均連接至同一程序塊,且該程序塊同時作為其中一條執行路徑的起點以及另一條執行路徑的終點,則該兩條不同的執行路徑可構成同一條執行路徑,如上述執行路徑「a→b」和「b→d」可構成執行路徑「a→b→d」。

又例如,從某程序塊到另一程序塊之間的執行路徑可能有多條,例如,從程序塊a到程序塊e之間的執行路徑可以為「a→b→c→d→e」,也可以為「a→b→d→e」,還可以為「a→c→e」,甚至可以為「a→e」。

步驟s206,基於狀態信息和控制流圖生成目標應用程式的控制流和數據流。

本申請上述步驟s206中,控制流即為最終的控制流圖本身,對於數據流,即由狀態信息組成,因此,基於動靜態結合方法獲得的狀態信息和控制流圖所生成的目標應用程式的控制流和數據流,可以避免現有技術中的動態方法存在漏報的問題,也可以避免現有技術中的靜態方法由於無法獲取目標應用程式調用的外部程序庫中的代碼、從而導致目標應用程式中的一些函數調用存在解釋不清的問題。

由上可知,本申請上述實施例一所提供的方案,通過獲取目標應用程式的控制流圖,並根據控制流圖中的執行路徑執行多個程序塊得到每個程序塊對應的狀態信息,達到了基於狀態信息和控制流圖生成目標應用程式的控制流和數據流的目的,從而實現了有效監控目標應用程式的數據流、避免遺漏掉任何程序行為的技術效果,進而解決了現有技術獲取到的應用程式的控制流和數據流的準確率較低的技術問題。

本申請上述實施例提供的一種可選方案中,圖3是根據本申請實施例的另一種可選的應用程式的處理方法的流程示意圖,如圖3所示,上述步驟s202,獲取目標應用程式的控制流圖可以包括:

步驟s302,將目標應用程式轉換為代碼文件,代碼文件包含函數以及函數的標識信息。

本申請上述步驟s302中,該代碼文件可以為原始碼,也可以為通過反編譯或者反彙編的方式還原而成的低級別的彙編代碼或字節碼,還可以為由上述代碼轉化而成的中間代碼。需要說明的是,將目標應用程式轉換為代碼文件需要保證不造成目標應用程式的數據信息或控制信息的丟失。

以目標應用程式為android程序為例,android上的應用程式是apk格式,apk實際是一個zip格式的壓縮包,裡面包含了classes.dex文件是執行的主體,android應用程式的字節碼是smali。可以通過backsmali(一款apk編譯/反編譯工具)將dex類型的文件轉換為smali文件。

可選地,對上述smali代碼進行文本分析,可以確定該段smali代碼中包含的函數方法指令、類名成員變量以及繼承關係等信息。

步驟s304,遍歷代碼文件中的函數,將函數分解成多個程序塊。

本申請上述步驟s304中,通過遍歷smali代碼中的每個類的每個函數,可以將每個函數分解成多個程序塊,其中,程序塊是能夠順序執行的最大的指令集。因此,函數調用、跳轉指令等都會結束當前程序塊,並催生一個新的程序塊的創建。

步驟s306,依據多個程序塊,生成具有目標應用程式執行方向的控制流圖。

本申請上述步驟s306中,因每個程序塊都包含當前程序塊id和後繼程序塊id,對於每一個程序塊,僅需通過後繼程序塊id查找到其指示的後繼程序塊,並將該後繼程序塊添加到當前程序塊所在的控制流圖中,進而將每個程序塊與其後繼程序塊用邊連接,從而可以生成具有目標應用程式執行方向的控制流圖。需要說明的是,每條邊都具有方向,其方向由其連接的當前程序塊指向後繼程序塊,且最終生成的控制流圖在整體上是一個有向有環圖。

可選地,函數的標識信息包括以下一種或幾種:函數的函數名、類名、返回值以及類的成員變量的名稱。具體地,以該目標應用程式為android程序為例,通過backsmali(一款apk編譯/反編譯工具)將dex類型的文件轉換為smali文件之後,smali文件中包含文本格式的smali代碼以及該smali代碼的函數名、類名、返回值等,同時也包含類的所有成員變量的名稱。

本申請上述實施例提供的一種可選方案中,步驟s204,按照控制流圖中的當前程序塊id和後繼程序塊id所構成的執行路徑,執行多個程序塊可以包括:

步驟s10,從控制流圖中確定多個程序塊的入口程序塊,其中,多個程序塊的入口程序塊是指執行多個程序塊的起點。

本申請上述步驟s10中,由於控制流圖是一個有向有環圖,因此在執行控制流圖時,需要找到一個起點,即上述的入口程序塊。具體如何從控制流圖中確定多個程序塊的入口程序塊後續實施例中會進行詳細描述,此處不做贅述。

步驟s12,根據入口程序塊以及執行路徑,執行多個程序塊。

本申請上述步驟s12中,在確定了入口程序塊之後,以入口程序塊為起點,按照上述的執行路徑,執行每個程序塊。控制流圖中的邊即為上述執行路徑。

本申請上述實施例提供的一種可選方案中,步驟s10,從控制流圖中確定多個程 序塊的入口程序塊可以包括:

步驟s20,在多個程序塊中,判斷每個程序塊的入度是否為第一標識。

本申請上述步驟s20中,在控制流圖中,入度通常指某程序塊作為圖中執行路徑的終點的次數之和。若該第一標識為0,則可以確定控制流圖中的程序塊不作為任何執行路徑的終點,也就是說,該程序塊可以作為連接該程序塊的所有執行路徑的起點。具體地,可以在多個程序塊中,判斷每個程序塊的入度是否為0。

步驟s22,從入度為第一標識的程序塊中,篩選出預定義的入口程序塊。

本申請上述步驟s22中,若程序塊的入度為0,篩選出預定義的入口程序塊的方式可以為:獲取入度為0的程序塊的當前程序塊id中的名稱信息,通過該名稱信息確定該程序塊是否為預定義的入口程序塊,進而篩選出預定義的入口程序塊。

此外,篩選預定義的入口程序塊的方法還可以為調用入口程序塊列表,該入口程序塊列表中記錄了可作為入口程序塊的所有程序塊的名稱信息,該名稱信息可以為類名或方法名,進而,通過該入口程序塊列表中的名稱信息可以確定並篩選出預定義的入口程序塊。

步驟s24,將預定義的入口程序塊確定為多個程序塊的入口程序塊。

本申請上述步驟s24中,入口程序塊可以為多個,多個入口程序塊可以以列表方式顯示,從而向其他非入口程序塊指示可作為程序入口的函數。上述步驟的必要性在於,本申請實施例一中步驟s10提供的確定入口程序塊的方式有別於c語言程序或android程序確定入口程序塊的方式。具體的,c語言程序的入口程序塊可以為main函數,android程序的入口程序塊可以封裝於activity組件中的oncreat函數、onstart函數或者onpause函數。

可選地,根據入口程序塊以及執行路徑,執行多個程序塊包括:從入口程序塊開始,沿執行路徑,調用預設的缺陷執行列表,對多個程序塊進行缺陷執行,其中,缺陷執行列表用於指示在執行多個程序塊的過程中需獲取的狀態信息,狀態信息包括預設變量的預設屬性。

可選地,可以通過執行引擎(executionengine)根據入口程序塊以及執行路徑,執行多個程序塊。具體地,執行引擎在根據控制流圖中的執行路徑進行缺陷執行時,同時維護類的實例、類的繼承關係等信息,執行引擎還可以將一些僅能通過動態方法獲取到的執行流程反饋至控制流圖,以使控制流圖愈加完善。需要說明的是,缺陷執行為本申請實施例一所提供的一種對目標應用程式動態運行的模擬。較實際的動態運 行而言,缺陷執行至少具備下述特徵:

特徵一、缺陷執行只關心部分變量的部分屬性,即對於目標應用程式運行過程中的所有變量,缺陷執行只保證部分關鍵變量的某些特定屬性的變化是準確的。

特徵二、缺陷執行對有指令進行缺陷解釋,基於缺陷執行只關心某些變量的某些屬性,因此對指令進行解釋時,缺陷執行只關注該指令對這些特定屬性的操作以及影響。其中,缺陷解釋可以被理解為對目標對象的局部特徵的局部說明。

特徵三、缺陷執行不需要解釋全部的指令集,即某些指令具有不操作屬性時,則缺陷執行無需解釋這條指令。

特徵四、缺陷執行不解釋跳轉指令,由於執行引擎依據控制流圖執行,而控制流圖中已經包含了程序的全部跳轉信息,所以僅需沿控制流圖中的邊(執行路徑)執行即可。

特徵五、缺陷執行中的每個跳轉指令能夠覆蓋其所有分支。例如,一個具有兩個分支的跳轉指令,會在控制流圖中產生一個節點和兩個分支。執行引擎會依次執行每個分支,保證能夠還原出程序的全部行為。其中,具有兩個分支的跳轉指令可以為條件跳轉指令。

特徵六、缺陷執行對於目標應用程式所需要的運行環境變量,除非被顯示指定特殊值,否則全部標記成為「未知」。這使得在缺陷執行過程中可以引入未知變量,這部分變量可以保證缺陷執行的正常運行,而不會因為某些變量的缺失或不確定導致缺陷執行發生異常或崩潰。

特徵七、缺陷執行可以模擬其它應用程式運行時的所有特徵或機制,比如高級語言的類的實例化、面向對象的繼承以及一些系統相關的行為等信息。

可選地,缺陷執行除過上述特徵,還包含若干執行指令,具體如下:

指令一、跳轉指令,執行引擎對跳轉指令不進行解釋,而是根據從控制流圖中獲取到的執行路徑依次執行,從而保證每個分支都可以執行到。

指令二、數據操作指令。執行引擎對數據操作指令都進行缺陷解釋,即只關注該指令對目標數據的某些屬性所產生的影響。以android系統中的「move」指令為例,若某條指令為「movev1,v2」,執行引擎執行該指令會導致寄存器v2中的指令被複製到寄存器v1中。在執行引擎執行該條指令之前,該條指令中v1=0且v2=1,在執行引擎執行該條指令之後,該條指令中v1=v2=0。假設測試人員需要通過缺陷執行得到數據流以用作汙點分析,則測試人員僅需關注數據的汙點屬性,也就是說,對於該條指 令,缺陷執行所需進行的操作就是把v2中數據的汙點屬性複製給v1寄存器中的數據,而無需確定其具體的數值。

指令三、高級語言特徵相關指令。對於高級語言相關的一些特徵,如類的繼承多態等,缺陷執行和實際的動態運行時的行為一致。反饋這部分信息可以完善控制流圖。以類的繼承為例,類a包含函數a,類b繼承自a,並且沒有重載函數a。當創建一個類b的實例ib並調用ib的a方法時,基於純靜態的控制流圖則無法找到ib的a方法,從而導致控制流圖不完整。但藉助執行引擎,則可以判斷出ib的a方法繼承自a類,進而在缺陷執行時,執行引擎可以自動跳轉到a類的a方法繼續執行,控制流圖中的該部分信息也可以得到補全。

需要說明的是,由於執行引擎是針對目標應用程式的分析進行缺陷執行,但是目標應用程式調用的系統api(applicationprogramminginterface,應用程式編程接口)會對目標應用程式內部的數據流產生影響,因此,本申請實施例一提供了一種基於描述的未知調用建模,用以消除上述影響。具體地,若只關心數據的某些特定屬性,則僅描述這些未知調用過程中對特定屬性(該特定屬性可以為未知屬性)的影響即可。例如,假設存在字符串拼接函數a(a1,a2)屬於未知調用,其功能是將a1和a2的值拼接在一起並返回,也就是說,若存在a1=「123」,a2=「abc」,那麼調用a(a1,a2)的返回值則為「123abc」。再例如,在汙點分析場景中,若參數a1或者a2中存在被汙染參數情形,為確定返回值是否同樣被汙染,則只要簡單的通過描述告訴執行引擎對於該類未知調用,若參數被汙染則返回值也要被汙染即可。遵循上述方法,可以省去重寫函數a的代碼的諸多繁瑣。

本申請上述實施例提供的一種可選方案中,圖4是根據本申請實施例的又一種可選的應用程式的處理方法的流程示意圖,如圖4所示,該方法可以包括如下步驟:

步驟s402,執行引擎開始執行。

步驟s404,獲取當前程序塊中的指令。

其中,該當前程序塊中可以包含至少一條指令,例如,該指令可以為「move」指令、「add」指令和「push」指令等多語言指令。

步驟s406,進行指令解釋。

其中,該指令解釋可以為對某條指令進行缺陷解釋,進行缺陷解釋的對象可以為當前程序塊中的全部指令,也可以為當前程序塊中的部分指令。例如,執行引擎可以對「move」指令進行缺陷解釋、而對「invoke」指令和「return」指令進行正常解釋。

步驟s408,判斷指令是否為當前程序塊的最後指令。

例如,當前程序塊中的某條指令為「end」指令,則可以通過判斷該條指令是否為無條件結束指令,進而確定該條指令是否為當前程序塊的最後指令。

若執行完成步驟s408,且結果為是,則執行步驟s410;若執行完成步驟s408,且執行結果為否,則返回執行步驟s404。

步驟s410,判斷當前程序塊是否有後繼程序塊。

具體地,可以通過判斷當前程序塊中是否包含後繼程序塊id,進而確定當前程序塊是否有後繼程序塊。

若執行完成步驟s410,且結果為是,則執行步驟s412;若執行完成步驟s410,且執行結果為否,則執行步驟s414。

步驟s412,解釋每個後繼程序塊。

具體地,解釋每個後繼程序塊可以為對每個後繼程序塊中的指令進行缺陷解釋。

步驟s414,執行引擎結束執行。

本申請步驟s414中,執行引擎結束缺陷執行,流程結束。

本申請上述實施例提供的一種可選方案中,圖5是根據本申請實施例的又一種可選的應用程式的處理方法的結構示意圖,如圖5所示,執行引擎包括指令解釋組件502和狀態信息獲取組件504,其中,該指令解釋組件502可用於對程序塊中的每條指令進行解釋,例如,指令解釋組件502可以對程序塊中的「move」指令、「invoke」指令和「return」指令等進行缺陷解釋。該狀態信息獲取組件504可以獲取每條指令的狀態信息,該狀態信息可以包括調用棧、函數執行返回值、類的實例、寄存器、指令集以及類的繼承關係等。此外,指令解釋組件502基於控制流圖和入口程序塊對程序塊中所包含的指令進行解釋,從而得到每條指令的狀態信息。需要說明的是,圖5中的執行引擎可用於執行本申請實施例一中的上述步驟s402至步驟s414。

本申請上述實施例提供的一種可選方案中,步驟s206,基於狀態信息和控制流圖生成目標應用程式的控制流以及數據流包括:

步驟s30,根據狀態信息,更新控制流圖。

步驟s32,依據更新後的控制流圖生成控制流,以及依據狀態信息生成數據流。

本申請上述步驟s30至s32中,控制流與數據流的生成都依賴於狀態信息,由於 執行引擎在進行缺陷執行時,狀態信息的獲取方法規避了前述動態方法和靜態方法各自的缺點,獲取到的狀態信息也更為全面和準確,從而保證了基於狀態信息生成的控制流和數據流的準確性。

可選地,狀態信息包括以下一種或幾種:調用棧、函數執行返回值、類的實例、寄存器、指令集以及類的繼承關係。

其中,調用棧(callstack)用於記錄目標應用程式運行過程中的函數調用。函數執行返回值即函數名變量,通常用於把函數的處理結果數據帶回給調用函數。類的實例為根據類創造出來的一個真實的對象。寄存器是cpu的內部組成部分,其為有限存儲容量的高速存儲部件,可以用於暫存指令、數據和地址,具體地,cpu控制部件中的寄存器可以為指令寄存器(instructionregister,簡稱ir)或程序計數器(programcounter,簡稱pc),cpu算術及邏輯部件中的寄存器可以為累加器(accumulator,簡稱acc)。指令集(instructionset)是存儲在cpu內部的程序,用於對cpu運算進行指導和優化,以使cpu更為高效的運行。類的繼承關係中,繼承指的是一個類(稱為子類或子接口)繼承另外的一個類(稱為父類或父接口)的功能、並可以增加自身新功能的能力。在uml(unifiedmodelinglanguage,統一建模語言)類圖設計中,繼承用一條帶空心三角箭頭的實線表示,並由子類指向父類,或者由子接口指向父接口。

需要說明的是,對於前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本申請並不受所描述的動作順序的限制,因為依據本申請,某些步驟可以採用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬於優選實施例,所涉及的動作和模塊並不一定是本申請所必須的。

通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到根據上述實施例的方法可藉助軟體加必需的通用硬體平臺的方式來實現,當然也可以通過硬體,但很多情況下前者是更佳的實施方式。基於這樣的理解,本申請的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟體產品的形式體現出來,該計算機軟體產品存儲在一個存儲介質(如rom/ram、磁碟、光碟)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,伺服器,或者網絡設備等)執行本申請各個實施例所述的方法。

實施例2

根據本申請實施例,還提供了一種用於實施上述應用程式的處理方法的應用程式 的處理裝置,如圖6所示,該裝置可以包括:獲取單元602,執行單元604,生成單元606。

其中,獲取單元602,用於獲取目標應用程式的控制流圖,其中,控制流圖中包含由目標應用程式中的函數分解而成的多個程序塊,每個程序塊包含當前程序塊id和後繼程序塊id,後繼程序塊id用於指向所跳轉的程序塊;執行單元604,用於按照控制流圖中的當前程序塊id和後繼程序塊id所構成的執行路徑,執行多個程序塊,得到每個程序塊對應的狀態信息,其中,狀態信息用於指示執行每個程序塊時所使用的數據狀態;生成單元606,用於基於狀態信息和控制流圖生成目標應用程式的控制流和數據流。

此處需要說明的是,上述獲取單元602,執行單元604,生成單元606對應於實施例一中的步驟s202至步驟s206,三個單元與對應的步驟所實現的示例和應用場景相同,但不限於上述實施例一所公開的內容。需要說明的是,上述單元作為裝置的一部分可以運行在實施例一提供的計算機終端10中。

由上可知,本申請上述實施例二所提供的方案,通過獲取目標應用程式的控制流圖,並根據控制流圖中的執行路徑執行多個程序塊得到每個程序塊對應的狀態信息,達到了基於狀態信息和控制流圖生成目標應用程式的控制流和數據流的目的,從而實現了有效監控目標應用程式的數據流、避免遺漏掉任何程序行為的技術效果,進而解決了現有技術獲取到的應用程式的控制流和數據流的準確率較低的技術問題。

可選地,如圖7所示,獲取單元可以602包括:轉換模塊702,分解模塊704,生成模塊706。

其中,轉換模塊702,用於將目標應用程式轉換為代碼文件,代碼文件包含函數以及函數的標識信息;分解模塊704,用於遍歷代碼文件中的函數,將函數分解成多個程序塊;生成模塊706,用於依據多個程序塊,生成具有目標應用程式執行方向的控制流圖。

此處需要說明的是,上述轉換模塊702,分解模塊704,生成模塊706對應於實施例一中的步驟s302至步驟s306,三個模塊與對應的步驟所實現的示例和應用場景相同,但不限於上述實施例一所公開的內容。需要說明的是,上述模塊作為裝置的一部分可以運行在實施例一提供的計算機終端10中。

可選地,上述實施例二中函數的標識信息包括以下一種或幾種:函數的函數名、類名、返回值以及類的成員變量的名稱。

可選地,如圖8所示,執行單元604包括:確定模塊802,執行模塊804。

其中,確定模塊802,用於從控制流圖中確定多個程序塊的入口程序塊,其中,多個程序塊的入口程序塊是指執行多個程序塊的起點;執行模塊804,用於根據入口程序塊以及執行路徑,執行多個程序塊。

此處需要說明的是,上述確定模塊802,執行模塊804對應於實施例一中的步驟s10至步驟s12,兩個模塊與對應的步驟所實現的示例和應用場景相同,但不限於上述實施例一所公開的內容。需要說明的是,上述模塊作為裝置的一部分可以運行在實施例一提供的計算機終端10中。

可選地,如圖9所示,確定模塊802包括:判斷子模塊902,篩選子模塊904,確定子模塊906。

其中,判斷子模塊902,用於在多個程序塊中,判斷每個程序塊的入度是否為第一標識;篩選子模塊904,用於從入度為第一標識的程序塊中,篩選出預定義的入口程序塊;確定子模塊906,用於將預定義的入口程序塊確定為多個程序塊的入口程序塊。

此處需要說明的是,上述判斷子模塊902,篩選子模塊904,確定子模塊906對應於實施例一中的步驟s20至步驟s24,三個子模塊與對應的步驟所實現的示例和應用場景相同,但不限於上述實施例一所公開的內容。需要說明的是,上述子模塊作為裝置的一部分可以運行在實施例一提供的計算機終端10中。

可選地,上述實施例二中的執行模塊804用於執行以下步驟根據入口程序塊以及執行路徑,執行多個程序塊:從入口程序塊開始,沿執行路徑,調用預設的缺陷執行列表,對多個程序塊進行缺陷執行,其中,缺陷執行列表用於指示在執行多個程序塊的過程中需獲取的狀態信息,狀態信息包括預設變量的預設屬性。

可選地,如圖10所示,生成單元706包括:更新模塊1002,生成模塊1004。

其中,更新模塊1002,用於根據狀態信息,更新控制流圖;生成模塊1004,用於依據更新後的控制流圖生成控制流,以及依據狀態信息生成數據流。

此處需要說明的是,上述更新模塊1002,生成模塊1004對應於實施例一中的步驟s30至步驟s32,兩個模塊與對應的步驟所實現的示例和應用場景相同,但不限於上述實施例一所公開的內容。需要說明的是,上述模塊作為裝置的一部分可以運行在實施例一提供的計算機終端10中。

可選地,上述實施例二中的狀態信息包括以下一種或幾種:調用棧、函數執行返回值、類的實例、寄存器、指令集以及類的繼承關係。

實施例3

本申請的實施例可以提供一種計算機終端,該計算機終端可以是計算機終端群中的任意一個計算機終端設備。可選地,在本實施例中,上述計算機終端也可以替換為移動終端等終端設備。

可選地,在本實施例中,上述計算機終端可以位於計算機網絡的多個網絡設備中的至少一個網絡設備。

在本實施例中,上述計算機終端可以執行應用程式的漏洞檢測方法中以下步驟的程序代碼:獲取目標應用程式的控制流圖,其中,控制流圖中包含由目標應用程式中的函數分解而成的多個程序塊,每個程序塊包含當前程序塊id和後繼程序塊id,後繼程序塊id用於指向所跳轉的程序塊;按照控制流圖中的當前程序塊id和後繼程序塊id所構成的執行路徑,執行多個程序塊,得到每個程序塊對應的狀態信息,其中,狀態信息用於指示執行每個程序塊時所使用的數據狀態;基於狀態信息和控制流圖生成目標應用程式的控制流和數據流。

可選地,圖11是根據本申請實施例的一種計算機終端的結構框圖。如圖11所示,該計算機終端a可以包括:一個或多個(圖中僅示出一個)處理器1102、存儲器1104、以及傳輸裝置1106。

其中,存儲器1104可用於存儲軟體程序以及模程序塊,如本申請實施例中的安全漏洞檢測方法和裝置對應的程序指令/模程序塊,處理器1102通過運行存儲在存儲器1104內的軟體程序以及模程序塊,從而執行各種功能應用以及數據處理,即實現上述的系統漏洞攻擊的檢測方法。存儲器1104可包括高速隨機存儲器,還可以包括非易失性存儲器,如一個或者多個磁性存儲裝置、快閃記憶體、或者其他非易失性固態存儲器。在一些實例中,存儲器1104可進一步包括相對於處理器遠程設置的存儲器,這些遠程存儲器可以通過網絡連接至終端a。上述網絡的實例包括但不限於網際網路、企業內部網、區域網、移動通信網及其組合。

上述的傳輸裝置1106用於經由一個網絡接收或者發送數據。上述的網絡具體實例可包括有線網絡及無線網絡。在一個實例中,傳輸裝置1106包括一個網絡適配器(networkinterfacecontroller,nic),其可通過網線與其他網絡設備與路由器相連從而可與網際網路或區域網進行通訊。在一個實例中,傳輸裝置1106為射頻(radiofrequency,rf)模塊,其用於通過無線方式與網際網路進行通訊。

其中,具體地,存儲器1104用於存儲預設動作條件和預設權限用戶的信息、以及應用程式。

處理器1102可以通過傳輸裝置調用存儲器存儲的信息及應用程式,以執行下述步驟:獲取目標應用程式的控制流圖,其中,控制流圖中包含由目標應用程式中的函數分解而成的多個程序塊,每個程序塊包含當前程序塊id和後繼程序塊id,後繼程序塊id用於指向所跳轉的程序塊;按照控制流圖中的當前程序塊id和後繼程序塊id所構成的執行路徑,執行多個程序塊,得到每個程序塊對應的狀態信息,其中,狀態信息用於指示執行每個程序塊時所使用的數據狀態;基於狀態信息和控制流圖生成目標應用程式的控制流和數據流。

由上可知,本申請上述實施例三所提供的方案,通過獲取目標應用程式的控制流圖,並根據控制流圖中的執行路徑執行多個程序塊得到每個程序塊對應的狀態信息,達到了基於狀態信息和控制流圖生成目標應用程式的控制流和數據流的目的,從而實現了有效監控目標應用程式的數據流、避免遺漏掉任何程序行為的技術效果,進而解決了現有技術獲取到的應用程式的控制流和數據流的準確率較低的技術問題。

可選的,上述處理器1102還可以執行如下步驟的程序代碼:將目標應用程式轉換為代碼文件,代碼文件包含函數以及函數的標識信息;遍歷代碼文件中的函數,將函數分解成多個程序塊;依據多個程序塊,生成具有目標應用程式執行方向的控制流圖。

可選的,上述處理器1102還可以執行如下步驟的程序代碼:從控制流圖中確定多個程序塊的入口程序塊,其中,多個程序塊的入口程序塊是指執行多個程序塊的起點;根據入口程序塊以及執行路徑,執行多個程序塊。

可選的,上述處理器1102還可以執行如下步驟的程序代碼:在多個程序塊中,判斷每個程序塊的入度是否為第一標識;從入度為第一標識的程序塊中,篩選出預定義的入口程序塊;將預定義的入口程序塊確定為多個程序塊的入口程序塊。

可選的,上述處理器1102還可以執行如下步驟的程序代碼:從入口程序塊開始,沿執行路徑,調用預設的缺陷執行列表,對多個程序塊進行缺陷執行,其中,缺陷執行列表用於指示在執行多個程序塊的過程中需獲取的狀態信息,狀態信息包括預設變量的預設屬性。

可選地,上述處理器1102還可以執行如下步驟的程序代碼:根據狀態信息,更新控制流圖;依據更新後的控制流圖生成控制流,以及依據狀態信息生成數據流。

本領域普通技術人員可以理解,圖11所示的結構僅為示意,計算機終端也可以是智慧型手機(如android手機、ios手機等)、平板電腦、掌聲電腦以及移動網際網路設備(mobileinternetdevices,mid)、pad等終端設備。圖11其並不對上述電子裝置的結構造成限定。例如,計算機終端a還可包括比圖11中所示更多或者更少的組件(如 網絡接口、顯示裝置等),或者具有與圖11所示不同的配置。

本領域普通技術人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令終端設備相關的硬體來完成,該程序可以存儲於一計算機可讀存儲介質中,存儲介質可以包括:快閃記憶體盤、只讀存儲器(read-onlymemory,rom)、隨機存取器(randomaccessmemory,ram)、磁碟或光碟等。

實施例4

本申請的實施例還提供了一種存儲介質。可選地,在本實施例中,上述存儲介質可以用於保存上述實施例一所提供的應用程式的處理方法所執行的程序代碼。

可選地,在本實施例中,上述存儲介質可以位於計算機網絡中計算機終端群中的任意一個計算機終端中,或者位於移動終端群中的任意一個移動終端中。

可選地,在本實施例中,存儲介質被設置為存儲用於執行以下步驟的程序代碼:獲取目標應用程式的控制流圖,其中,控制流圖中包含由目標應用程式中的函數分解而成的多個程序塊,每個程序塊包含當前程序塊id和後繼程序塊id,後繼程序塊id用於指向所跳轉的程序塊;按照控制流圖中的當前程序塊id和後繼程序塊id所構成的執行路徑,執行多個程序塊,得到每個程序塊對應的狀態信息,其中,狀態信息用於指示執行每個程序塊時所使用的數據狀態;基於狀態信息和控制流圖生成目標應用程式的控制流和數據流。

此處需要說明的是,上述計算機終端群中的任意一個可以與網站伺服器和掃描器建立通信關係,掃描器可以掃描計算機終端上php執行的web應用程式的值命令。

上述本申請實施例序號僅僅為了描述,不代表實施例的優劣。

在本申請的上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。

在本申請所提供的幾個實施例中,應該理解到,所揭露的技術內容,可通過其它的方式實現。其中,以上所描述的裝置實施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特徵可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模程序塊的間接耦合或通信連接,可以是電性或其它的形式。

所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位於一個地方,或者也可以分布到 多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。

另外,在本申請各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以採用硬體的形式實現,也可以採用軟體功能單元的形式實現。

所述集成的單元如果以軟體功能單元的形式實現並作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中。基於這樣的理解,本申請的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟體產品的形式體現出來,該計算機軟體產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可為個人計算機、伺服器或者網絡設備等)執行本申請各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:u盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、移動硬碟、磁碟或者光碟等各種可以存儲程序代碼的介質。

以上所述僅是本申請的優選實施方式,應當指出,對於本技術領域的普通技術人員來說,在不脫離本申請原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本申請的保護範圍。

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀