2011-04-19 140 views
2

問題是,我必須掃描可執行文件並找出要分析的字符串,請使用sysinternals中的strings.exe。但是,如何區分有意義的字符串和不重要的字符串,有沒有解決這個問題的算法或思想(統計概率?)。是否有任何算法來判斷一個字符串是否有意義

例如:從strings.exe 提取字符串(所有的字符串的一部分)

S`A 
waA 
RmA 
>rA 
5xA 
GetModuleHandleA 
LocalFree 
LoadLibraryA 
LocalAlloc 
GetCommandLineW 

從經驗判斷,最後五個串是有意義的,並且所述第一5份的有不。 那麼如何解決這個問題,不要使用黑名單或白名單等字典。

+0

或使用一些字典中的字母 – Andrey 2011-04-19 09:25:25

+0

壞正gramms至少在這個例子中, 'strings -n4'也可以用來區分。更復雜的是,您可以填充一個digram或trigram表並選擇更接近英語digram或trigram表的單詞。 – sarnold 2011-04-19 09:26:06

回答

5

簡單算法:將候選字符串分解爲第一個上限/空白/數字上的單詞,然後將單詞與某個字典進行比較。

0

有意義的單詞有明確的規則嗎?或者他們只是字典中的單詞? 如果它們是字典中的單詞,那麼您可以使用trie's

您可以查找單詞,直到下一個字符未被大寫。如果它的大寫然後從trie的開始處開始並尋找下一個單詞。

只是我2美分。

  • 伊瓦
2

使用N元 的N-gram會告訴你那是什麼字meaningfull的概率。閱讀關於馬爾科夫鏈和n-gram(http://en.wikipedia.org/wiki/Ngram)。把每封信都看作是狀態,並採取一套完整無意義的詞語。例如:

無意義的詞是B^^@, #AT

普通的話:BOOK, CAT

創建兩個語言模型爲他們(卦將是最好的)http://en.wikipedia.org/wiki/Language_model

,現在你可以檢查在模型字可能是以大於其他語言的概率生成並採用語言模型。這將滿足您的條件

記住,您需要設置的無意義的話(我想大約1000會確定),而不是毫無意義的

相關問題