WinDbg 的调试器隐藏插件?

逆向工程 调试器 反调试 风袋
2021-06-17 03:29:08

有没有像 OllyDbg 那样好的 WinDbg 隐藏插件?或者一个开源插件并且仍在为此目的开发?

4个回答

我不确定插件是否存在,但您可以编写如下简单的脚本来根据具体情况隐藏 WinDbg。

  • Peb->BeingDebugged

    r?$t0 = (ntdll!_peb *) @$peb;?? @$t0->BeingDebugged;eb (@$t0+2) 0;?? @$t0->BeingDebugged
    
  • ZwSetInformationThread(XP SP3 系统调用与sysenter

    bp ntdll!ZwSetInformationThread "r eip = $ip+0n12 ; r eax = 0; gc" 
    
  • ZwQueryInformationProcess

    语法类似于ZwSetInformationThread此外,您还需要将 DebugPort 伪造为 NULL

    ed poi(ADDRESS)  0
    

阅读

您可以使用ScyllaHide许多调试器都有插件,但也可以InjectorCLI.exe用来将 ScyllaHide 注入任何进程。以下是步骤(对于 32 位进程,如果您想要 64 位进程,请将每个替换x86x64):

  1. 在任何地方提取 ScyllaHide(下载);
  2. 运行NtApiTool\x86\PDBReaderx86.exe,完成后复制NtApiCollection.ini到同目录下InjectorCLIx86.exe
  3. ScyllaTest_x86.exe用 WinDbg (x86)打开你应该在LdrpDoDebuggerBreak
  4. 执行InjectorCLIx86.exe ScyllaTest_x86.exe HookLibraryx86.dll
  5. 在 WinDbg 中运行 (F5)。

不使用 ScyllaHide:

没有隐藏

使用 ScyllaHide 时:

隐藏

这个过程适用于任何调试器,如果你愿意,你甚至可以为 WinDbg 制作一个实际的插件。这应该很容易。

我刚刚添加了一个通过进程 ID 注入进程的选项。你可以这样做:

InjectorCLIx86.exe pid:1234 HookLibraryx86.dll

我认为目前不存在这样的插件。但是,如果您愿意实现一个最小的 windbg 后端,您可以扩展uberstealth,不幸的是,我从未将其作为一个项目完成(实际上我认为反调试已经死了,但那是另一个故事;-) )。它本质上是 IDAStealth,但排除了所有调试器特定的功能(IDA 和 Olly2 有一个后端)。您所要做的就是为 Windbg 编写一个后端(并修复剩余的错误,不过我可以帮助您),所有其他代码都是独立于调试器的。应该不到几十行代码。

在这里你可以下载带有嵌入式 WinDbg 存根的 QEMU 虚拟机:https : //github.com/ispras/qemu/releases https://github.com/ispras/qemu/tree/windbg

此存根允许使用 WinDbg 进行调试,而无需启用 Windows 调试模式。