问题是,我必须扫描可执行文件并查找要分析的字符串,使用sysinternals中的strings.exe。但是,如何区分有意义的字符串和平凡的字符串,是否有任何算法或思想来解决这个问题(统计?概率?)。
例如: 从strings.exe中提取字符串(所有字符串的一部分)
S`A
waA
RmA
>rA
5xA
GetModuleHandleA
LocalFree
LoadLibraryA
LocalAlloc
GetCommandLineW
从经验判断来看,最后五个字符串是有意义的,而前五个字符串则不是。 那么如何解决这个问题,不要使用像黑名单或白名单这样的字典。
答案 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美分。