用条件断点覆盖第二个参数

逆向工程 艾达 调试 断点
2021-06-25 16:20:19

使用条件断点,我可以更改函数的返回值。例如,在 return 指令上设置断点时,以下 IDC 表达式可确保函数始终返回 false:

EAX=0

现在我想用零值覆盖函数接收的第二个参数。断点设置在函数 ( push 1Ch)的第一条指令上不幸的是,我无法让以下 IDC 表达式按预期工作:

(ESP+8)=0

当函数被调用时,位于的值ESP+8是指即将接收一堆值的缓冲区的大小。通过故意将缓冲区大小设置为零,该函数将不会返回任何值。

如何使用 IDA 配置条件断点,将值设置ESP+8为零?是否可以通过简单地编辑断点而不是运行脚本来做到这一点?


您必须使用 IDC 函数来写入内存地址。我推荐 write_dbg_memory() 函数。

我仍然无法让脚本成功运行。使用该write_dbg_memory函数时,我收到以下错误消息:

Runtime error at _idc+0x00000022: Attempt to call undefined function 'write_dbg_memory'

此处此处write_dbg_memory列出函数似乎也使用不同的参数(长 ea、字符串数据)。

1个回答

您可以使用 IDC 函数写入内存地址。我推荐write_dbg_memory()功能。

write_dbg_memory(ESP+8, 0, size)

https://www.hex-rays.com/products/ida/support/idapython_docs/

实际上,您放置在断点条件下的行也被视为遇到BP. 所以它必须遵循编写脚本的规则。EAX = 0是您以前使用过的简单行。

如果 IDC 不工作,您可以使用 idaapi.dbg_write_memory api。我已经尝试了以下行作为条件,幸运的是它起作用了!“脚本语言”菜单栏选择“Python”

daapi.dbg_write_memory(GetRegValue("ESP")+8,"HELLO")