如何在 IDA Pro 中将大部分字节更改为单词

逆向工程 艾达
2021-06-21 00:27:53

我在 IDA 中有很大一部分是字长数据的数据查找表。我想将它们全部更改为字长而不是字节长度。我知道你可以创建一个数组,但是当我这样做时它变成了一个字节数组。

4个回答

可能有更好的方法,但我总是使用一个简单的脚本来完成此操作,该脚本让我只需选择要转换为双字的字节范围。就像是:

ea = SelStart()
end = SelEnd()

print "Making DWORDs from 0x%X - 0x%X" % (ea, end)

MakeUnknown(ea, (end-ea), DOUNK_SIMPLE)

while ea < end:
    MakeDword(ea)
    ea += 4
  1. 创建一个词(或双字)
  2. 使用“制作数组”命令创建一个单词数组。您可以选择要转换的数据范围以自动计算项目数。

如果要将每个元素作为单独的项目而不是数组的一部分,请取消选中“创建为数组”选项。

这是我如何做到的。
我将前几个字节更改为数据,创建了一个数组,因此我有一个单词数组,然后编辑该数组以包含更多元素。

根据 devttys0 的回答。

此脚本适用于高于 7.4 的 IDA 版本。

  def convert_data():
        align_size = ida_kernwin.ask_long(4, "align size")
        if align_size == None:
            return
        start = idc.read_selection_start()
        end = idc.read_selection_end()
        print("Align %d bytes from 0x%X - 0x%X" % (align_size, start, end))
        ida_bytes.del_items(start, (end-start), ida_bytes.DELIT_SIMPLE)
        flag = None
        if align_size == 1:
            flag = ida_bytes.FF_BYTE
        elif align_size == 2:
            flag = ida_bytes.FF_WORD
        elif align_size == 4:
            flag = ida_bytes.FF_DWORD
        elif align_size == 8:
            flag = ida_bytes.FF_QWORD
        elif align_size == 16:
            flag = ida_bytes.FF_OWORD
        
        if flag == None:
            ida_kernwin.warning("align size is invalid")
            return
            
        while start < end:
            ida_bytes.create_data(start, flag, align_size, ida_idaapi.BADADDR)
            start += align_size