我正在尝试编写一些脚本,这些脚本通过IDA中的反汇编进行一些字符串搜索。当前,我将所有反汇编MinEA()循环到MaxEA()并使用idc.FindText()来查看反汇编中是否存在潜在的字符串。尽管这可行,但非常耗时。我想知道是否有一种方法可以使用API​​方法在IDA字符串窗口中获取所有字符串。例如,通过使用idaapi.get_import_module_qty()和idaapi.enum_import_names(i,import_call_back),我能够获得在导入窗口中使用的所有导入。这非常快,我可以轻松地检查是否已导入某些内容。是否有类似的东西能让我从字符串窗口中获取所有字符串?如果没有,是否有可能使用一种耗时更少的字符串搜索方法?感谢您的输入。

#1 楼

看起来以下是您正在寻找的或至少相似的产品:

import idautils
sc = idautils.Strings()

for s in sc:
    print "%x: len=%d type=%d -> '%s'" % (s.ea, s.length, s.type, str(s))


经过测试,可在IDA 6.8(64位)中工作。
详细信息有关idautils模块中的类字符串的信息,请访问:https://www.hex-rays.com/products/ida/support/idapython_docs/idautils.Strings-class.html

评论


显然,IDA 7中的s.type已更改为s.strtype。

–雷
20-2-29在17:48

#2 楼

获取所有字符串的另一种变体

import idaapi as ia
sc = ia.string_info_t()
for i in range(0,ia.get_strlist_qty()):
    ia.get_strlist_item(i,sc)
    print ia.get_ascii_contents(sc.ea,sc.length,sc.type)


评论


这样做会更好,因为调用idautils.Strings()会重新生成字符串列表,而此方法只是重新使用当前的字符串列表。

–玩具
20-3-30在12:44