2011-04-19 139 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会确定),而不是毫无意义的

相关问题