使用 IDA Pro 和 IDAPython 对字节序列进行着色和反汇编

逆向工程 艾达 拆卸 蟒蛇 二进制
2021-06-12 11:09:49

也许有人可以帮助我解决以下问题:

我在硬盘驱动器上存在的 MIPS ELF 二进制文件中发现了一个有趣的字节序列。这个字节序列可以是,例如,9c 6c 3c 04 80 2d 24 84 85现在我想用 IDAPython 找到这个字节序列。因此,我idc.FindBinary()像这样使用函数:

address = idc.FindBinary(0, SEARCH_DOWN, byte_sequence)

它在 处找到字节序列的第一次出现address一般来说,我想实现两件事:

  1. 我想在 IDA 视图中为受影响的线条着色

  2. 我要拆解说明

目前我想解决两个子问题:

  1. 字节序列可以指令开始,例如,在jal address字节序列开始于address而不是在jal当字节序列在指令中开始时,如何向后搜索以找到指令的开头?着色适用于:

    SetColor(address, CIC_ITEM, 0x208020)
    
  2. 如果字节序列长 9 个字节(如上例所示),我如何告诉 IDAPython 反汇编所有 9 个字节我必须知道 IDAPython 反汇编的指令有多“长”才能进入下一条指令。我所知道的是,我可以在一个地址处进行反汇编:

    disasm = idc.GetDisasm(address)
    

任何帮助将不胜感激!

1个回答

您可以使用 Sark 轻松做到这一点:

# Get all the lines relevant to your bytes
for line in sark.lines(start=address, end=address + len(byte_sequence)):
    # For each line, color it, and print the disasm and the instruction length
    line.color = 0x123456
    print 'Line Size: {}\nLine Disasm: {}'.format(line.size, line.disasm)

您可能需要为没有反汇编的情况添加处理(字节是数据字节而不是代码)。