如何绕过 ZwContinue?

逆向工程 部件 反调试
2021-06-18 05:29:06

在分析过程中,我发现了一个调用ZwContinue. 可执行文件首先获取 的地址ntdll.NtContinue并将其存储在 EAX 寄存器中。

在我跨过下面的流水线后,

  CALL EAX      ; ntdll.ZwContinue

然后 OllyDbg (v1.10) 终止进程。

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

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

2个回答

ntdll!ZwContinue 采用与 ntdll!NtContinue 相同的参数,如下所示:

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

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

如果你想尝试 Olly 2.01,它有一个很好的特性来处理这种特殊情况:在转储窗口中“解码为结构”。

解码为结构

解码

检查 NtContinue 的上下文参数(第一个参数)。NtContinue 通过潜在地清除 DR7 或通过清除陷阱标志来打破单步执行,然后在应用寄存器状态后返回上下文中指定的 IP,从而起到反调试的作用。