IDA 7.0 - 将汇编指令序列组合成一个宏

逆向工程 艾达 蟒蛇 x86-64 ida插件
2021-07-03 13:21:38

我正在用 IDA Pro 7.0 解决这个 CTF。

在某些时候,按索引计算偏移量,它只是将索引乘以 48 并向其写入/读取一些数据。

主要问题是:

  • 计算是使用 8 条汇编指令完成的,而且这种情况经常发生,因此它会向我的屏幕发送垃圾邮件。

  • 它可能不会每次都计算得完全相同,我在审核错误时可能会错过它,但是如果宏只针对特定指令发生,我就不会错过它。

所以我的问题是:在 IDA 中有没有办法将这些指令序列组合成一个宏?

红色的重复代码

谢谢!

1个回答

好的,把这个正式化(因为我现在有一些时间来输入一个实际的答案)。

add_hidden_range()IDC的功能和相同的名称的SDK函数(bytes.hpp)可以被用于该目的。(但是,我几乎可以肯定当时我使用了另一个函数。)

update_hidden_range() 也可能感兴趣(见上面的链接)。

几年前我用它来编写 IDC 脚本时(IDAPython 当时没有随 IDA 一起提供),我用它来隐藏我正在寻找的某些(已检查的)Windows 二进制文件中某些重复调试打印和断言功能的代码在。为此,我使用了灰色并用装配式注释(;前缀)替换了整个隐藏范围然后,注释将包含它隐藏的调试打印或断言的伪代码。这有助于使反汇编更清晰,便于阅读。

除了找到功能和最初暴露它的 IDC 函数之外,最大的挑战是寻找围绕已知函数调用的外部参照位置的操作码,并确保我没有隐藏一些散布的操作码。所以基本上我确保脚本会在遇到意外操作码与预期操作码穿插在一起的实例时详细输出,显示 EA,然后可以在日志窗格中双击它以查看这些(在我的情况下很少见)手动实例。

其中,该技术被证明有用的其他实例是众所周知的内联函数(想memmovememcpy和朋友)。模式重复,通过隐藏操作码并用有意义的伪代码替换它们,您可以大大加快阅读反汇编的速度(即使没有反编译插件)。