二進(jìn)制數(shù)據(jù)中有意義字符串提取方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種二進(jìn)制數(shù)據(jù)中的字符串提取方法,包括首先從二進(jìn)制數(shù)據(jù)中讀取所有的可顯示字符組成的字符串,然后將所提取的每個(gè)字符串拆分為可顯示字符組合,計(jì)算獲得字符組合的概率差異表之后,利用概率差異算法區(qū)分所有提取的字符串獲得初步的有意義字符串和無意義字符串,并進(jìn)一步通過熵值法去除不準(zhǔn)確的有意義字符串則得到最終所提取的字符串結(jié)果。本發(fā)明還公開了一種二進(jìn)制數(shù)據(jù)中的字符串提取系統(tǒng)。使用本發(fā)明的技術(shù)方案可以提取任意格式的二進(jìn)制數(shù)據(jù)包括磁盤文件、磁盤鏡像、網(wǎng)絡(luò)數(shù)據(jù)等。同時(shí)可以提取人類可讀的字符串,大大提高了提取字符串的效率。
【專利說明】二進(jìn)制數(shù)據(jù)中有意義字符串提取方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)軟件、網(wǎng)絡(luò)通信等數(shù)據(jù)檢查提取分析,特別是信息安全領(lǐng)域的數(shù)據(jù)分析。
【背景技術(shù)】
[0002]目前的二進(jìn)制中提取字符串主要是針對(duì)可執(zhí)行文件為提取對(duì)象,提取出來的是可以顯示字符,對(duì)于其它二進(jìn)制格式比如專門的數(shù)據(jù)庫(kù)文件、磁盤鏡像、網(wǎng)絡(luò)數(shù)據(jù)沒有通用性,并且提取到的字符串包含很多人類難以理解的垃圾數(shù)據(jù)。
[0003]當(dāng)前對(duì)二進(jìn)制數(shù)據(jù)提取字符串主要是通過IDA、Ollydbg等反匯編工具對(duì)可執(zhí)行文件進(jìn)行反匯編,在反匯編時(shí)如果發(fā)現(xiàn)指令的操作數(shù)中包含地址則試著去判斷這些地址中的數(shù)據(jù)是否可以顯示。找到所有的地址,并檢查地址是否是一個(gè)可顯示的字符串羅列出來。這種方法中的二進(jìn)制數(shù)據(jù)必須是可以反匯編的,對(duì)于其它二進(jìn)制格式這個(gè)方法就無法提取,并且能夠提取的也包含很多人類不可理解的垃圾字符串;而且字符串如果只是作為可執(zhí)行文件的數(shù)據(jù)就不會(huì)被反匯編地址引用,這種方法也無法發(fā)現(xiàn)這些字符串。
【發(fā)明內(nèi)容】
[0004]針對(duì)現(xiàn)有字符提取方法的不足,本發(fā)明提出了一種任意二進(jìn)制數(shù)據(jù)人類可理解字符串提取算法。該算法可以提取任意格式的二進(jìn)制數(shù)據(jù),包括磁盤文件、磁盤鏡像、網(wǎng)絡(luò)數(shù)據(jù)等。同時(shí)可以提取人類可讀的字符串,在速度上也比傳統(tǒng)的反匯編方式提取字符串要快速很多。
[0005]首先介紹本發(fā)明一種二進(jìn)制數(shù)據(jù)中的字符串提取方法,包括以下步驟:
步驟1,打開二進(jìn)制數(shù)據(jù)緩沖區(qū),將二進(jìn)制數(shù)據(jù)的開始位置定位為當(dāng)前位置;
步驟2,判斷如果當(dāng)前位置是二進(jìn)制數(shù)據(jù)的結(jié)束位置則進(jìn)行步驟5,否則從當(dāng)前位置讀取一個(gè)字節(jié)的二進(jìn)制數(shù)據(jù),然后進(jìn)行步驟3 ;
步驟3,判斷所述字節(jié)的二進(jìn)制數(shù)據(jù)是否存在于預(yù)先構(gòu)造好的可顯示字符表中;所述可顯示字符表是指包括介于0x20和0x7e之間的ASCII值的字符表;
如果所述字節(jié)的二進(jìn)制數(shù)據(jù)不存在于預(yù)先構(gòu)造好的可顯示字符表中,則將所述二進(jìn)制數(shù)據(jù)當(dāng)前位置跳躍預(yù)設(shè)字節(jié)數(shù),繼續(xù)步驟2 ;
所述方法中,所述預(yù)設(shè)字節(jié)數(shù)可以選為4個(gè)字節(jié)或者5個(gè)字節(jié)。
[0006]如果當(dāng)然位置距二進(jìn)制數(shù)據(jù)的結(jié)束位置的長(zhǎng)度小于預(yù)設(shè)字節(jié)數(shù),則當(dāng)前位置跳躍到二進(jìn)制數(shù)據(jù)的結(jié)束位置,繼續(xù)步驟2 ;
如果所述字節(jié)的二進(jìn)制數(shù)據(jù)存在于預(yù)先構(gòu)造好的可顯示字符表中,則進(jìn)行步驟4 ;
步驟4,判斷如果當(dāng)前位置之后的二進(jìn)制數(shù)據(jù)中包含連續(xù)可顯示字符的長(zhǎng)度不小于預(yù)設(shè)字節(jié)數(shù),則從當(dāng)前位置開始提取字符串,如果遇到O或者連續(xù)可顯示字符的長(zhǎng)度超過512字節(jié),則提取所述字符串結(jié)束,保存所獲得的可顯示字符組成的字符串,當(dāng)前位置跳躍到所獲取字符串所在二進(jìn)制數(shù)據(jù)中的結(jié)尾位置,繼續(xù)步驟2 ;判斷如果當(dāng)前位置之后的二進(jìn)制數(shù)據(jù)中包含連續(xù)可顯示字符的長(zhǎng)度小于預(yù)設(shè)字節(jié)數(shù),則不保存所述連續(xù)可顯示字符,當(dāng)前位置直接跳躍到所述連續(xù)可顯示字符的結(jié)尾位置,繼續(xù)步驟2 ;
所述可顯示字符是指可顯示字符表中的字符;
步驟5,分別將所提取的每個(gè)字符串拆分為可顯示字符組合,所述可顯示字符組合包括單字節(jié)、連續(xù)雙字節(jié)、單詞4表示所述字符串拆分得到的可顯示字符組合的集合,每個(gè)可顯示字符組合用Si表示,S表示所有可顯示字符組合的集合,Si e S;
無意義字符串集合M是預(yù)先準(zhǔn)備的長(zhǎng)度不小于預(yù)設(shè)字節(jié)數(shù)的可顯示字符串中經(jīng)過人工挑選的人類無法識(shí)別的字符串的集合;有意義字符串集合T,是預(yù)先準(zhǔn)備的長(zhǎng)度不小于預(yù)設(shè)字節(jié)數(shù)的可顯示字符串中經(jīng)過人工挑選的人類可以理解的字符串的集合;
PM(Si)表示字符組合Si在無意義字符串集合M中出現(xiàn)的概率;PT(Si)表示字符組合Si在有意義字符串集合T中出現(xiàn)的概率;
計(jì)算
【權(quán)利要求】
1.一種二進(jìn)制數(shù)據(jù)中的字符串提取方法,其特征在于,包括: 步驟1,打開二進(jìn)制數(shù)據(jù)緩沖區(qū),將二進(jìn)制數(shù)據(jù)的開始位置定位為當(dāng)前位置; 步驟2,判斷如果當(dāng)前位置是二進(jìn)制數(shù)據(jù)的結(jié)束位置則進(jìn)行步驟5,否則從當(dāng)前位置讀取一個(gè)字節(jié)的二進(jìn)制數(shù)據(jù),然后進(jìn)行步驟3 ; 步驟3,判斷所述字節(jié)的二進(jìn)制數(shù)據(jù)是否存在于可顯示字符表中;所述可顯示字符表是預(yù)先構(gòu)造好的由介于0x20和0x7e之間的ASCII值組成的字符表; 如果所述字節(jié)的二進(jìn)制數(shù)據(jù)不存在于可顯示字符表中,則將所述二進(jìn)制數(shù)據(jù)當(dāng)前位置跳躍預(yù)設(shè)字節(jié)數(shù),繼續(xù)步驟2; 如果所述字節(jié)的二進(jìn)制數(shù)據(jù)存在于可顯示字符表中,則進(jìn)行步驟4 ; 步驟4,判斷如果當(dāng)前位置之后的二進(jìn)制數(shù)據(jù)中包含連續(xù)可顯示字符的長(zhǎng)度不小于預(yù)設(shè)字節(jié)數(shù),則從當(dāng)前位置開始提取字符串,如果遇到O或者連續(xù)可顯示字符的長(zhǎng)度超過512字節(jié),則提取所述字符串結(jié)束,保存所獲得的可顯示字符組成的字符串,當(dāng)前位置跳躍到所獲取字符串所在二進(jìn)制數(shù)據(jù)中的結(jié)尾位置,繼續(xù)步驟2 ; 判斷如果當(dāng)前位置之后的二進(jìn)制數(shù)據(jù)中包含連續(xù)可顯示字符的長(zhǎng)度小于預(yù)設(shè)字節(jié)數(shù),則不保存所述連續(xù)可顯示字符,當(dāng)前位置直接跳躍到所述連續(xù)可顯示字符的結(jié)尾位置,繼續(xù)步驟2 ; 所述可顯示字符是指可顯示字符表中的字符; 步驟5,分別將所提取的每個(gè)字符串拆分為可顯示字符組合,所述可顯示字符組合包括單字節(jié)、連續(xù)雙字節(jié)、單詞4表示所述字符串拆分得到的可顯示字符組合的集合,每個(gè)可顯示字符組合用Si表示,S表示所有可顯示字符組合的集合,Si e S; 無意義字符串集合M是預(yù)先準(zhǔn)備的長(zhǎng)度不小于預(yù)設(shè)字節(jié)數(shù)的可顯示字符串中經(jīng)過人工挑選的人類無法識(shí)別的字符串的集合;有意義字符串集合T,是預(yù)先準(zhǔn)備的長(zhǎng)度不小于預(yù)設(shè)字節(jié)數(shù)的可顯示字符串中經(jīng)過人工挑選的人類可以理解的字符串的集合; PM(Si)表示字符組合Si在無意義字符串集合M中出現(xiàn)的概率;PT(Si)表示字符組合Si在有意義字符串集合T中出現(xiàn)的概率;
Si的貢獻(xiàn)度; 計(jì)算P其中V為所述字符串的貢獻(xiàn)度和,0..表示所述字符組合Si的貢獻(xiàn)II
I s i it Λ度,則 根據(jù)所述公式計(jì)算所提取的每個(gè) 字符串的貢獻(xiàn)度和,初步判斷貢獻(xiàn)度和大于O的字符串為無意義字符串,貢獻(xiàn)度和小于O的字符串為有意義字符串; 步驟6,計(jì)算每個(gè)所述有意義字符串的熵值,去除熵值小于預(yù)設(shè)值的有意義字符串,則其他有意義字符串為最終所提取的字符串結(jié)果。
2.如權(quán)利要求1所述的二進(jìn)制數(shù)據(jù)中的字符串提取方法,其特征在于,所述預(yù)設(shè)字節(jié)數(shù)為4個(gè)字節(jié)或者5個(gè)字節(jié)。
3.如權(quán)利要求1所述的二進(jìn)制數(shù)據(jù)中的字符串提取方法,其特征在于,步驟6中,熵值的預(yù)設(shè)值為2。
4.如權(quán)利要求1至3中所述的任一種二進(jìn)制數(shù)據(jù)中的字符串提取方法,其特征在于,計(jì)算每個(gè)所述有意義字符串的熵值具體為:首先計(jì)算有意義字符串中每個(gè)不同字符在所述有意義字符串中出現(xiàn)的概率,然后將計(jì)算的所述每個(gè)不同字符的熵值累加得到所述有意義字符串的熵值。
5.如權(quán)利要求4所述的二進(jìn)制數(shù)據(jù)中的字符串提取方法,其特征在于,計(jì)算每個(gè)所述有意義字符串的熵值具體為:首先計(jì)算有意義字符串中每個(gè)不同字符在所述有意義字符串中出現(xiàn)的概率,去除概率在-0.0OOOOl和0.000001之間的字符,然后將計(jì)算的所述其余每個(gè)不同字符的熵值累加得到所述有意義字符串的熵值。
6.一種二進(jìn)制數(shù)據(jù)中的字符串提取系統(tǒng),其特征在于,包括: 概率差異統(tǒng)計(jì)模塊,用于計(jì)算可顯示字符組合的貢獻(xiàn)度,并獲取概率差異表;所述可顯示字符是指可顯示字符表中的字符,所述可顯示字符組合包括單字節(jié)、連續(xù)雙字節(jié)、單詞;所述可顯示字符表是指包括介于0x20和0x7e之間的ASCII值的字符表; 具體為,每個(gè)可顯示字符組合用Si表示,S表示所有可顯示字符組合的集合,si e S;無意義字符串集合M是預(yù)先準(zhǔn)備的長(zhǎng)度不小于預(yù)設(shè)字節(jié)數(shù)的可顯示字符串中經(jīng)過人工挑選的人類無法識(shí)別的字符串的集合;有意義字符串集合T,是預(yù)先準(zhǔn)備的長(zhǎng)度不小于預(yù)設(shè)字節(jié)數(shù)的可顯示字符串中經(jīng)過人工挑選的人類可以理解的字符串的集合; PM(si)表示字符組合Si在無意義字符串集合M中出現(xiàn)的概率;PT(si)表示字符組合Si在有意義字符串集合T中出現(xiàn)的概率; 計(jì)算
7.如權(quán)利要求6所述的二進(jìn)制數(shù)據(jù)中的字符串提取系統(tǒng),其特征在于,所述預(yù)設(shè)字節(jié)數(shù)為4個(gè)字節(jié)或者5個(gè)字節(jié)。
8.如權(quán)利要求6所述的二進(jìn)制數(shù)據(jù)中的字符串提取系統(tǒng),其特征在于,熵值的預(yù)設(shè)值為2。
9.如權(quán)利要求6至8所述的二進(jìn)制數(shù)據(jù)中的字符串提取系統(tǒng),其特征在于,計(jì)算每個(gè)所述有意義字符串的熵值具體為:首先計(jì)算有意義字符串中每個(gè)不同字符在所述有意義字符串中出現(xiàn)的概率,然后將計(jì)算的所述每個(gè)不同字符的熵值累加得到所述有意義字符串的熵值。
10.如權(quán)利要求9所述的二進(jìn)制數(shù)據(jù)中的字符串提取系統(tǒng),其特征在于,計(jì)算每個(gè)所述有意義字符串的熵值具體為:首先計(jì)算有意義字符串中每個(gè)不同字符在所述有意義字符串中出現(xiàn)的概率,去除概率在-0.000001和0.000001之間的字符,然后將計(jì)算的所述其余每個(gè)不同字符的熵值累加得到所述有意義字符串的熵值。
【文檔編號(hào)】G06F17/27GK103544141SQ201210243966
【公開日】2014年1月29日 申請(qǐng)日期:2012年7月16日 優(yōu)先權(quán)日:2012年7月16日
【發(fā)明者】康學(xué)斌, 田徹 申請(qǐng)人:哈爾濱安天科技股份有限公司