在分析中,我发现了对ZwContinue的呼叫。可执行文件首先获取ntdll.NtContinue的地址,并将其存储在EAX寄存器中。 >然后OllyDbg(v1.10)终止了该过程。

我发现这是一种反调试机制,但我不知道如何克服它。

我可以使用任何插件或其他有用的技巧吗?

#1 楼

ntdll!ZwContinue与ntdll!NtContinue具有相同的参数,即:

NTSTATUS NTAPI 
NtContinue (
  IN PCONTEXT ThreadContext,
  IN BOOLEAN  RaiseAlert
);


您可以读取PCONTEXT结构中的“ Eip”字段,并放置一个断点在此地址上,然后按运行以达到断点并继续分析。

如果您想尝试Olly 2.01,它具有针对此特定情况的一个不错的功能:转储中的“解码为结构”窗口。





评论


感谢您的回答。要在PCONTEXT中的EIP处设置BP,是否必须在十六进制窗口中找到EIP值,或者如何在ollydbg v1.10中实现该值?

–user3097712
2015年5月5日20:37

@ user3097712除了在OllyDBG 1.10上手动完成操作外,我不知道其他方法。

– Spl3en
15年5月6日在7:38

ollydbg 1,10 alt + f1-> bp [[esp + 4] + 0xb8]在ntdll上中断时!Nt / ZwContinue将在x86中的PContext-> Eip上设置中断

– blabb
2015年5月7日在18:10

在用户模式下,NtContinue实际上与ZwContinue相同。这些Nt * / Zw *对存在更多,它们通常是主要的系统服务。在内核模式下,这些功能也存在,但有所不同。其中一个(不记得哪个)在从用户模式调用时将进行访问检查,而另一个则专用于内核模式调用者。

– 0xC0000022L♦
18年7月10日在8:17

#2 楼

检查NtContinue的上下文参数(第一个参数)。 NtContinue可作为防调试程序,方法是可能会清除DR7或通过清除陷阱标志打破单步执行,然后在应用寄存器状态后返回上下文中指定的IP。

评论


尽管另一个答案描述了如何解决它,但是这个答案更好地解释了幕后发生的事情。

– 0xC0000022L♦
18年7月10日在8:18