是否有任何算法来判断字符串是否有意义

时间:2011-04-19 09:22:19

标签: algorithm string

问题是,我必须扫描可执行文件并查找要分析的字符串,使用sysinternals中的strings.exe。但是,如何区分有意义的字符串和平凡的字符串,是否有任何算法或思想来解决这个问题(统计?概率?)。

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

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

从经验判断来看,最后五个字符串是有意义的,而前五个字符串则不是。 那么如何解决这个问题,不要使用像黑名单或白名单这样的字典。

3 个答案:

答案 0 :(得分:5)

简单算法:将候选字符串分解为第一个大写/空白/数字上的单词,然后将单词与某些字典进行比较。

答案 1 :(得分:2)

使用N-Grams N-Gram会告诉你单词有意义的概率是多少。阅读马尔可夫链和n-gram(http://en.wikipedia.org/wiki/N-gram)。将每个字母视为国家,并采取一组有意义和无意义的词。例如:

无意义的单词是B^^@, #AT

普通单词:BOOK, CAT

为他们创建两个语言模型(trigram将是最好的)http://en.wikipedia.org/wiki/Language_model

现在您可以检查可能生成的模型单词,并且语言模型的概率大于其他模型。这将满足您的条件

请记住,你需要一套毫无意义的单词(我认为1000左右就可以了)而且没有意义

答案 2 :(得分:0)

对于有意义的单词是否有明确的规则?或者他们只是字典中的单词? 如果它们是字典中的单词,那么您可以使用trie's

你可以查找一个单词,直到下一个char没有大写。如果它的大写然后从特里开始,并寻找下一个单词。

只需2美分。

  • 的Ivar