在分析过程中,我发现了一个调用ZwContinue
. 可执行文件首先获取 的地址ntdll.NtContinue
并将其存储在 EAX 寄存器中。
在我跨过下面的流水线后,
CALL EAX ; ntdll.ZwContinue
然后 OllyDbg (v1.10) 终止进程。
我发现这是一种反调试机制,但我不知道如何打败它。
有没有我可以使用的插件或任何其他有用的技巧?
在分析过程中,我发现了一个调用ZwContinue
. 可执行文件首先获取 的地址ntdll.NtContinue
并将其存储在 EAX 寄存器中。
在我跨过下面的流水线后,
CALL EAX ; ntdll.ZwContinue
然后 OllyDbg (v1.10) 终止进程。
我发现这是一种反调试机制,但我不知道如何打败它。
有没有我可以使用的插件或任何其他有用的技巧?
ntdll!ZwContinue 采用与 ntdll!NtContinue 相同的参数,如下所示:
NTSTATUS NTAPI
NtContinue (
IN PCONTEXT ThreadContext,
IN BOOLEAN RaiseAlert
);
您可以读取 PCONTEXT 结构中的“Eip”字段,在该地址上放置一个断点,然后按 Run 到达您的断点并继续您的分析。
如果你想尝试 Olly 2.01,它有一个很好的特性来处理这种特殊情况:在转储窗口中“解码为结构”。
检查 NtContinue 的上下文参数(第一个参数)。NtContinue 通过潜在地清除 DR7 或通过清除陷阱标志来打破单步执行,然后在应用寄存器状态后返回上下文中指定的 IP,从而起到反调试的作用。