在 IDA 中提取动态构造的字符串

逆向工程 艾达
2021-06-29 22:45:03

有时,由于编译器优化或只是为了隐藏字符串(例如在恶意软件中),字符串会在程序中动态构造。例如 :

在此处输入图片说明

将字节显示为字符时,我们可以看到字符串'INVALID FILE SIZE'

在此处输入图片说明

有谁知道在 IDA 中提取这些字符串的脚本?如果它不存在,我会写一个,但我想我会先问。

2个回答

选择要转换的代码块,然后运行以下 IDAPython 函数。如果您不想添加评论,请注释掉对 MakeComm 的调用。

def convert_to_char():
    current = SelStart()
    end = SelEnd()
    tmp = ''
    while current < end:
        OpChr(current,1)
        try:
            tmp += chr(GetOperandValue(current, 1))
        except:
            tmp += '_'
        current = NextHead(current)
    MakeComm(PrevHead(current), tmp)

如果其他指令也在所选区域中,则添加一些逻辑来验证操作数可能会很有用。

使用 IDAPython 查找字节字符串

这正是您从 Assert MindshaRE 中寻找的内容 实际上,该脚本将逐条指令查找 ASCII 字符移动到内存位置。它变得很花哨,并使用 QT 来创建一个交互式表格,但是您可以删除该部分并让它在使用的指令上添加注释。