生成移動(dòng)智能終端源代碼的抽象語法樹的方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種生成移動(dòng)智能終端源代碼的抽象語法樹的方法,包括:S1.抓取移動(dòng)智能終端的源代碼;S2.對(duì)所述的源代碼進(jìn)行數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,找出數(shù)據(jù)流的入口到出口的跟蹤點(diǎn);S3.根據(jù)所述的跟蹤點(diǎn)調(diào)用多個(gè)處理線程,生成圖形化的結(jié)構(gòu)樹;S4.保存所述的結(jié)構(gòu)樹。本發(fā)明還公開了一種生成移動(dòng)智能終端源代碼的抽象語法樹的裝置。本發(fā)明提供的生成移動(dòng)智能終端源代碼的抽象語法樹的方法及裝置中,抽象語法樹中包含的信息在滿足程序后續(xù)靜態(tài)分析需要的同時(shí),包含的其他信息較少,找出潛在的風(fēng)險(xiǎn)可能性較大,提高了代碼的安全性。
【專利說明】生成移動(dòng)智能終端源代碼的抽象語法樹的方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及源代碼安全的領(lǐng)域,特別涉及一種生成移動(dòng)智能終端源代碼的抽象語法樹的方法及裝置。
【背景技術(shù)】
[0002]在計(jì)算機(jī)科學(xué)中,抽象語法樹(abstractsyntaxtree或者縮寫為AST),或者語法樹(syntaxtree),是源代碼的抽象語法結(jié)構(gòu)的樹狀表現(xiàn)形式,這里特指編程語言的源代碼。樹上的每個(gè)節(jié)點(diǎn)都表示源代碼中的一種結(jié)構(gòu)。之所以說語法是“抽象”的,是因?yàn)檫@里的語法并不會(huì)表示出真實(shí)語法中出現(xiàn)的每個(gè)細(xì)節(jié)。比如,嵌套括號(hào)被隱含在樹的結(jié)構(gòu)中,并沒有以節(jié)點(diǎn)的形式呈現(xiàn);而類似于if-condition-then這樣的條件跳轉(zhuǎn)語句,可以使用帶有兩個(gè)分支的節(jié)點(diǎn)來表示。
[0003]抽象語法樹(AST)的具體形式的選擇,即抽象語法樹中包含的信息的多少,影響程序分析的效率。抽象語法樹能否正確地生成,并包含足夠的信息將決定后續(xù)的程序分析的成敗,如何找到更有效的生成移動(dòng)智能終端源代碼的抽象語法樹的方法及裝置,提高代碼的完全性成為人們的一道課題。
【發(fā)明內(nèi)容】
[0004]為解決以上的問題,本發(fā)明提供生成移動(dòng)智能終端源代碼的抽象語法樹的方法及
>J-U ρ?α裝直。
[0005]本發(fā)明公開了一種生成移動(dòng)智能終端源代碼的抽象語法樹的方法,包括:
[0006]S1.抓取移動(dòng)智能終端的源代碼;
[0007]S2.對(duì)所述的源代碼進(jìn)行數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,找出數(shù)據(jù)流的入口到出口的跟蹤點(diǎn);
[0008]S3.根據(jù)所述的跟蹤點(diǎn)調(diào)用多個(gè)處理線程,生成圖形化的結(jié)構(gòu)樹;
[0009]S4.保存所述的結(jié)構(gòu)樹。
[0010]在本發(fā)明所述的生成移動(dòng)智能終端源代碼的抽象語法樹的方法中,所述的步驟SI至步驟S4均在編譯器前端進(jìn)行。
[0011]在本發(fā)明所述的生成移動(dòng)智能終端源代碼的抽象語法樹的方法中,所述的跟蹤點(diǎn)包括分支點(diǎn)、匯聚點(diǎn)。
[0012]在本發(fā)明所述的生成移動(dòng)智能終端源代碼的抽象語法樹的方法中,所述步驟S4后還包括步驟S5:抓取抽象語法樹中源代碼的漏洞位置并在所述的移動(dòng)智能終端顯示。
[0013]本發(fā)明公開了一種生成移動(dòng)智能終端源代碼的抽象語法樹的裝置,包括:
[0014]源代碼抓取單元,用于抓取移動(dòng)智能終端的源代碼;
[0015]跟蹤點(diǎn)查找單元,用于對(duì)所述的源代碼進(jìn)行數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,找出數(shù)據(jù)流的入口到出口的跟蹤點(diǎn);
[0016]處理線程調(diào)用單元,用于根據(jù)所述的跟蹤點(diǎn)調(diào)用多個(gè)處理線程,生成圖形化的結(jié)構(gòu)樹;[0017]結(jié)構(gòu)樹保存單元,用于保存所述的結(jié)構(gòu)樹。
[0018]在本發(fā)明所述的生成移動(dòng)智能終端源代碼的抽象語法樹的裝置中,所述的、裝置位于編譯器前端。
[0019]在本發(fā)明所述的生成移動(dòng)智能終端源代碼的抽象語法樹的裝置中,所述的跟蹤點(diǎn)包括分支點(diǎn)、匯聚點(diǎn)。
[0020]在本發(fā)明所述的生成移動(dòng)智能終端源代碼的抽象語法樹的裝置中,所述的結(jié)構(gòu)樹保存單元還具有漏洞位置顯示單元,用于抓取抽象語法樹中源代碼的漏洞位置并在所述的移動(dòng)智能終端顯示。
[0021]本發(fā)明的一種生成移動(dòng)智能終端源代碼的抽象語法樹的方法和裝置,具有以下有益效果:
[0022]本技術(shù)方案中,抽象語法樹中包含的信息在滿足程序后續(xù)靜態(tài)分析需要的同時(shí),包含的其他信息較少,找出潛在的風(fēng)險(xiǎn)可能性較大,提高了代碼的安全性。
【專利附圖】
【附圖說明】
[0023]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0024]圖1a為本發(fā)明實(shí)施例一種生成移動(dòng)智能終端源代碼的抽象語法樹的方法流程示意圖;
[0025]圖1b為本發(fā)明中的源代碼中兩個(gè)匯聚點(diǎn)之間在方法main的控制流圖表現(xiàn)為虛分支圖;
[0026]圖2為本發(fā)明實(shí)施例一種生成移動(dòng)智能終端源代碼的抽象語法樹的裝置功能方框圖。
【具體實(shí)施方式】
[0027]通過下面給出的本發(fā)明的具體實(shí)施例可以進(jìn)一步了解本發(fā)明,但它們不是對(duì)本發(fā)明的限定。對(duì)于本領(lǐng)域的技術(shù)人員根據(jù)上述
【發(fā)明內(nèi)容】
所作的一些非本質(zhì)的改進(jìn)與調(diào)整,也視為落在本發(fā)明的保護(hù)范圍內(nèi)。
[0028]請參閱圖la,本發(fā)明第一實(shí)施例,一種生成移動(dòng)智能終端源代碼的抽象語法樹的方法,包括:
[0029]S1.抓取移動(dòng)智能終端的源代碼;
[0030]S2.對(duì)所述的源代碼進(jìn)行數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,找出數(shù)據(jù)流的入口到出口的跟蹤點(diǎn);
[0031]S3.根據(jù)所述的跟蹤點(diǎn)調(diào)用多個(gè)處理線程,生成圖形化的結(jié)構(gòu)樹;
[0032]S4.保存所述的結(jié)構(gòu)樹。
[0033]較佳地,步驟S4后還包括步驟S5:抓取抽象語法樹中源代碼的漏洞位置并在所述的移動(dòng)智能終端顯示。
[0034]進(jìn)一步地,所述的步驟SI至步驟S4均在編譯器前端進(jìn)行,
[0035]更進(jìn)一步地,所述的跟蹤點(diǎn)包括分支點(diǎn)、匯聚點(diǎn)。[0036]分支點(diǎn)是指程序判斷語句的判定部分,這些判斷語句根據(jù)判定結(jié)果的不同而執(zhí)行不同的分支。與判斷語句一樣,每個(gè)分支點(diǎn)有一個(gè)“流入”分支和多個(gè)“流出”分支;特殊的,當(dāng)分支點(diǎn)上的判定條件是一個(gè)常量時(shí),分支點(diǎn)只有一個(gè)“流出”分支。分支點(diǎn)有五種類型,分別對(duì)應(yīng)各種判斷語句的判定部分:
[0037]I) if分支點(diǎn):對(duì)應(yīng)if語句的if (exp)部分。
[0038]2)switch 分支點(diǎn):對(duì)應(yīng) switch 語句的 switch (exp)部分。
[0039]3) for 分支點(diǎn):對(duì)應(yīng) for 語句的 for (init ;exp ;inc)部分。
[0040]4) while分支點(diǎn):對(duì)應(yīng)while語句的while (exp)部分。
[0041]5) do-while 分支點(diǎn):對(duì)應(yīng) do-while 語句的 while (exp)部分。[0042]分支點(diǎn)在圖中用菱形表示,并標(biāo)記判斷語句的關(guān)鍵字。
[0043]匯聚點(diǎn)是指程序中多于一條控制流匯聚到一起的位置。通常,這個(gè)位置不對(duì)應(yīng)任何語句或語句片斷,而是對(duì)應(yīng)于程序語句的一個(gè)抽象結(jié)束位置。匯聚點(diǎn)有多個(gè)“流入”分支,但只有一個(gè)或者沒有“流出”的分支。匯聚點(diǎn)可分為以下幾種類型:
[0044]I)判斷語句的匯聚點(diǎn):每個(gè)判斷語句有一個(gè)匯聚點(diǎn),位于判斷語句塊的“結(jié)束”位置。
[0045]2)標(biāo)號(hào)語句的匯聚點(diǎn):每個(gè)標(biāo)號(hào)有一個(gè)匯聚點(diǎn),位于標(biāo)號(hào)的“:”之后。
[0046]3) case和default的匯聚點(diǎn):位于其“:”之后。
[0047]4)方法入口點(diǎn):對(duì)應(yīng)于方法體的開括號(hào)“ {”。
[0048]5)方法結(jié)束點(diǎn):對(duì)應(yīng)于方法體的閉括號(hào)
[0049]6)分支跳轉(zhuǎn)點(diǎn):對(duì)應(yīng)于跳轉(zhuǎn)語句。
[0050]分支點(diǎn)和匯聚點(diǎn)合稱控制流中的節(jié)點(diǎn),在不嚴(yán)格區(qū)分的情況下,統(tǒng)稱分支點(diǎn)。
[0051]程序中任意兩個(gè)節(jié)點(diǎn)之間如果存在一個(gè)直接的控制流,即從一個(gè)節(jié)點(diǎn)執(zhí)行O條或任意有限條順序語句可到達(dá)另一個(gè)節(jié)點(diǎn),其間不再包含任何其它節(jié)點(diǎn),則稱這兩個(gè)節(jié)點(diǎn)之間的直接的控制流為一條分支,這兩個(gè)節(jié)點(diǎn)稱作是相鄰節(jié)點(diǎn)。特殊地,相鄰節(jié)點(diǎn)之間的直接控制流,如果是由執(zhí)行O條順序語句而形成,這兩個(gè)節(jié)點(diǎn)之間的分支稱作虛分支。源代碼中兩個(gè)匯聚點(diǎn)之間在方法main的控制流中的表現(xiàn)為虛分支,如圖1b中所示。
[0052]一種簡便的分支數(shù)計(jì)算方法是計(jì)算程序中每個(gè)節(jié)點(diǎn)的“流出”分支數(shù)之和。
[0053]下表給出每種語法及其對(duì)應(yīng)的分支點(diǎn)的“流出”分支數(shù)的計(jì)算方法。
[0054]
【權(quán)利要求】
1.一種生成移動(dòng)智能終端源代碼的抽象語法樹的方法,其特征在于,包括: 51.抓取移動(dòng)智能終端的源代碼; 52.對(duì)所述的源代碼進(jìn)行數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,找出數(shù)據(jù)流的入口到出口的跟蹤點(diǎn); 53.根據(jù)所述的跟蹤點(diǎn)調(diào)用多個(gè)處理線程,生成圖形化的結(jié)構(gòu)樹; 54.保存所述的結(jié)構(gòu)樹。
2.根據(jù)權(quán)利要求1所述的生成移動(dòng)智能終端源代碼的抽象語法樹的方法,其特征在于,所述的步驟SI至步驟S4均在編譯器前端進(jìn)行。
3.根據(jù)權(quán)利要求1或2任一項(xiàng)所述的生成移動(dòng)智能終端源代碼的抽象語法樹的方法,其特征在于,所述的跟蹤點(diǎn)包括分支點(diǎn)、匯聚點(diǎn)。
4.根據(jù)權(quán)利要求1所述的生成移動(dòng)智能終端源代碼的抽象語法樹的方法,其特征在于,所述步驟S4后還包括步驟S5:抓取抽象語法樹中源代碼的漏洞位置并在所述的移動(dòng)智能終端顯示。
5.一種生成移動(dòng)智能終端源代碼的抽象語法樹的裝置,其特征在于,包括: 源代碼抓取單元,用于抓取移動(dòng)智能終端的源代碼; 跟蹤點(diǎn)查找單元,用于對(duì)所述的源代碼進(jìn)行數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,找出數(shù)據(jù)流的入口到出口的跟蹤點(diǎn); 處理線程調(diào)用單元,用于根據(jù)所述的跟蹤點(diǎn)調(diào)用多個(gè)處理線程,生成圖形化的結(jié)構(gòu)樹; 結(jié)構(gòu)樹保存單元,用于保存所述的結(jié)構(gòu)樹。
6.根據(jù)權(quán)利要求5所述的生成移動(dòng)智能終端源代碼的抽象語法樹的裝置,其特征在于,所述的裝置位于編譯器前端。
7.根據(jù)權(quán)利要求5所述的生成移動(dòng)智能終端源代碼的抽象語法樹的裝置,其特征在于,所述的跟蹤點(diǎn)包括分支點(diǎn)、匯聚點(diǎn)。
8.根據(jù)權(quán)利要求5所述的生成移動(dòng)智能終端源代碼的抽象語法樹的裝置,其特征在于,所述的結(jié)構(gòu)樹保存單元還具有漏洞位置顯示單元,用于抓取抽象語法樹中源代碼的漏洞位置并在所述的移動(dòng)智能終端顯示。
【文檔編號(hào)】G06F21/57GK103927487SQ201310016788
【公開日】2014年7月16日 申請日期:2013年1月16日 優(yōu)先權(quán)日:2013年1月16日
【發(fā)明者】王甜, 魏理豪, 朱奕, 崔磊, 鄒洪, 艾解清, 周開東, 張超, 粱哲恒 申請人:廣東電網(wǎng)公司信息中心