如何防止 Immunity Debugger / OllyDbg 在附加时中断?

逆向工程 工具 调试器 ollydbg 免疫调试器
2021-07-04 04:35:19

当我将 OllyDbg 或 ImmunityDebugger 附加到进程时,它会自动中断执行。我附加到以 SYSTEM 身份运行的用户模式服务,只需要捕获异常,所以这并不理想。有没有办法禁用断开连接行为?

3个回答

解释

attach 中断是由于调用ntdll DbgUiRemoteBreakinDbgBreakPoint函数。如果检查kernel32 DebugActiveProcess调试器,OllyDbg的或ImmunityDebugger调用的函数,你会看到在一个电话CreateRemoteThreadCreateRemoteThreadEx或者ZwCreateThreadEx根据您的操作系统的功能。

所以,我想绕过破坏的一种方法是:

  1. 调试调试器本身
  2. 转到该DbgUiIssueRemoteBreakin函数并找到对创建远程线程的函数的调用。
  3. / 的lpStartAddress情况下参数更改+1CreateRemoteThreadCreateRemoteThreadExDbgBreakPointRETN 0xC3

插入

我创建了一个OllyDbg的1.10版的插件,其NOPS中INT3DbgBreakPoint与您选择的PID的进程。它仅在 Windows 7 上进行过测试。

用法

将 SilentAttach.dll 放在 OllyDbg 目录下,启动 OllyDbg,按Alt+ F12,然后输入您要静默附加的进程的进程 ID。

NB 由于没有中断发生,OllyDbg 不会提取很多信息。例如加载模块列表。因此,您必须通过Alt+E然后Alt+ 之类的方式激活上下文C

一种方法是使用 OllyDbg 插件来执行

WriteProcessMemory(hDebuggee, GetProcAddress(GetModuleHandle("ntdll"), "DbgBreakPoint"), &mynop, 1, NULL)

其中 hDebuggee 是被调试进程的句柄(我相信 OllyDbg 有一个用于检索这个值的 API),而 mynop 是一个保存 0x90 字节(nop 指令)的变量。

这将清除导致中断的 int3 指令,允许立即继续执行。这是一个常见的反调试技巧。

我认为如果不做一些极具侵入性的事情,这是不可能的。要么修补 OllyDbg 以使用接受某些标志的替代 ZwXX/NtXX 函数,要么修补内核。初始中断由操作系统完成,以便调试器可以收集有关它所附加到的进程的信息。

我还没有验证,但我的猜测是 OllyDbg 正在调用DebugActiveProcess以附加到它。它的文档指出:

在系统检查进程标识符并确定正在制作有效的调试附件后,该函数返回 TRUE。然后,调试器应使用 WaitForDebugEvent 函数等待调试事件。系统挂起进程中的所有线程,并发送代表进程当前状态的调试器事件。

后来

完成所有这些后,系统将恢复进程中的所有线程。当进程中的第一个线程恢复时,它执行断点指令,导致将 EXCEPTION_DEBUG_EVENT 调试事件发送到调试器。所有未来的调试事件都使用正常的机制和规则发送到调试器。