在访问 IDA 中的某个部分时设置内存中断

逆向工程 艾达 开箱
2021-06-24 10:01:35

有没有办法在 Win32 调试器中的 IDA 上的 Access 上设置内存断点……就像我们在 Olly 中从内存窗口所做的那样?

我尝试使用 lena 系列第 20 教程中的示例“UnPackMe_NoNamePacker.d.out.exe”来做到这一点,但从未触发过。实际上,在“文本”段上设置内存 bp 后,应用程序将无法运行!这是文件:https : //tuts4you.com/download.php?view.141

1个回答

IDA 不会执行 Olly 实现的那种内存断点。Olly 通过改变页面保护,捕捉异常,然后检查一些额外的数据,看它是否是它自己的内存“断点”之一来实现内存断点。IDA 只允许你做常规的软件断点(CC)和硬件断点(DR0-DR3)。

话虽如此,如果您想使用 IDA 的调试器中断内存访问,则必须使用常规硬件断点。您只需单击要中断的内存中的 DWORD,然后单击调试器 -> 断点 -> 添加断点。IDA 将自动在“位置”字段中填充 DWORD 的地址,然后您可以设置您希望的任何其他选项。

如果您想在整个部分设置断点,类似于您在 Olly 中的 Memory Map 视图中所做的,请执行以下操作:

  1. 在调试器模式下,单击查看 -> 打开子视图 -> 程序分段。
  2. 右键单击“.text”或您需要的任何其他段。
  3. 点击“中断访问”

这将设置一个硬件断点,该断点将在读取和写入时触发。对于此特定示例,这会导致问题,因为打包程序显然需要读取和写入该部分才能解包。因此,一旦设置了断点,请按 Ctrl-Alt-B,然后将该断点编辑为仅在执行时触发。顺便说一句,您也可以通过单击窗口 -> 程序分段从常规反汇编视图执行此操作。

我不太确定为什么你的程序不能运行。我逐步进行了“IsDebuggerPresent”检查,修改了零标志(Addr:0x46BB1F),设置了上述硬件断点,程序运行并解压得很好。不过,打开包装确实需要几秒钟,至少在我的盒子上是这样。仔细检查您的断点设置,并验证是否选中了以下选项:“启用”、“硬件”、“中断”、“执行”,并且地址位置为 0x401000。如果您从分段窗口执行此操作,则大小应为 0x4A000。(它真的不需要这么大)。

如果您有兴趣,这里有一些关于断点的更多信息。