我目前正在与32位可执行文件抗争。

在运行时的某个时刻,保护获得了DbgUiRemoteBreakin的地址,并将JMP写入ExitProcess作为一种反连接技术。我决定在该位置上的write(我也尝试访问)上放置一个内存断点,至少要弄清楚是什么代码改变了代码。设置断点后,我打F9只是因为我的内存bp永远不会被触发,因此我尝试了多次。代码已更改,但未触发我的内存bp。这是第一次没有为我触发内存断点。我对为什么发生这种情况感到困惑。我唯一的猜测是DbgUiRemoteBreakin位于ntdll.dll中,这就是为什么保护页在那里不起作用的原因。 >
但是我希望有人能遇到这个问题并且可以更深入地解释。我的ollydbg版本是1.10。

评论

可以绕过Ollydbg中的内存断点

尝试使用Olly或x64dbg的较新版本。

由于您的可执行文件是32位,因此您可以使用IDA Pro的免费版本。 x64dbg是另一个很好的工具,但仍在开发中,即使按照Olly的标准进行拆卸也是如此。如果您使用的是Mac或Linux计算机,也可以尝试使用Hopper反汇编程序。非常用户友好和强大。顺便说一句,您是否尝试过设置硬件而不是软件BP?

可执行文件受到了严格的保护,只有ollydbg拥有我需要正确运行的插件。

尝试为Olly使用一些反调试插件。 -> ScyllaHide

#1 楼

断点未命中的最可能原因是受保护的文件将其删除。

编辑:如果断点基于硬件,则受保护的文件可以使用GetThreadContext(),删除DR条目,SetThreadContext()。如果断点是基于页面保护的,则受保护的文件可以使用VirtualProtect()

评论


抱歉,您不正确。内存断点不是硬件断点。通过Set / GetThreadContext只能删除/更改硬件断点。

–farmdve
2014年8月27日在22:19

@farmdve,如果Olly使用VirtualProtect()保护该页面,则受保护的文件仅使用VirtualProtect()使它可写,从而消除了保护保护的副作用。尝试改用硬件写时中断。如果这不起作用,那是因为受保护的文件将其删除了。

–彼得·弗里
2014年8月28日在17:22



这种理论的唯一问题是后续的VirtualProtect调用将中断。无论如何,使用适用于VirtualProtect / VirtualAlloc的简单Ctrl-G方法测试该理论要容易得多。

–ŹV-
2014年9月4日在3:49

@zv_,为什么随后的VirtualProtect调用会中断?无论如何,我只是用精心制作的文件证实了我的理论。它调用VirtualProtect()来删除OllyDbg的内存断点。它的行为与farmdve所看到的完全一样。

–彼得·弗里
2014-09-5 18:12



休息,不要休息

–ŹV-
2014年9月8日在8:15