有没有办法像在Olly中从内存窗口中一样在Win32调试器中的IDA上设置Access上的内存断点?

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

#1 楼

IDA不执行Olly实现的那种内存断点。 Olly通过更改页保护,捕获异常,然后检查一些额外的数据以查看其是否是其自身的内存“断点”之一来实现内存断点。 IDA仅允许您执行常规软件断点(CC)和硬件断点(DR0-DR3)。

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

如果要在与您所需要的类似的整个部分上设置断点请在Olly的“内存映射”视图中执行以下操作:在调试器模式下,单击“视图”->“打开子视图”->“程序分段”。
右键单击“ .text”或您需要的任何其他段。
单击“访问中断”

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

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

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


软件与硬件断点:http://www.nynaeve.net/?p=80

奥利的内存断点http://waleedassar.blogspot.com/2012/11/defeating-memory-breakpoints.html