我正在尝试编写一些脚本,通过 IDA 中的反汇编进行一些字符串搜索。目前,我遍历所有反汇编,从 MinEA() 到 MaxEA() 并使用 idc.FindText() 来查看潜在的字符串是否在反汇编中。虽然这有效,但非常耗时。我想知道是否有一种方法可以使用 API 方法来获取 IDA 字符串窗口中的所有字符串。例如,我能够通过使用 idaapi.get_import_module_qty() 和 idaapi.enum_import_names(i, import_call_back) 获取导入窗口中使用的所有导入。这非常快,我可以轻松地检查是否已导入某些内容。是否有类似的东西可以让我从字符串窗口中获取所有字符串?如果没有,是否有一种更省时的字符串搜索方法?感谢您提供任何意见。
如何在我的脚本中获取 IDA 字符串窗口中的字符串列表?
逆向工程
艾达
蟒蛇
2021-06-30 01:30:52
3个回答
看起来您正在寻找以下内容或至少是类似的内容:
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 模块中的类 Strings 的详细信息在这里:https ://www.hex-rays.com/products/ida/support/idapython_docs/idautils.Strings-class.html
获取所有字符串的另一种变体
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)
我找到了一个粗略但完全不同的解决方案,而不必弄乱 Python 2.7 。全部使用 IDA GUI 并借助正则表达式
- 在 IDA 中打开所需的文件,让它加载
- 视图 -> 打开子视图 -> 字符串
- Ctrl+A -> 右键单击 -> 复制
- 将数据粘贴到一些支持正则表达式的文本编辑器(我使用 Notepad++)
- 使用正则表达式进行查找和替换(在 Notepad++ 上:替换,搜索模式“正则表达式”为“. 匹配换行符”未勾选):
- 首先,在回车前修剪所有“”,
___Find: \x20\x20+\r Replace: \r - 然后(截至 2021 年 1 月)- 在 Notepad++ 中,有一个错误,这使它
^与regex match literal\r。要解决这个问题,您可以这样做:在顶部添加一个换行符(如果顶部有无用的人类可读标题,请用换行符替换)。计算字符串文本开始之前有多少个字符(我有27 个),然后执行,___Find: \n.{27}? Replace:
警告:如果在字符串文本开始之前您有不同的字符数,请用您的数字替换该数字!
- 最后,删除第一个换行符,您的数据就可以工作了