有没有像OllyDbg一样好的WinDbg隐藏插件?还是为此目的仍在开发中的开源插件?

#1 楼

我认为目前尚不存在这样的插件。但是,如果您愿意实现最小的windbg后端,则可以扩展uberstealth,不幸的是,我从来没有作为一个项目来完成(实际上,我认为反调试已无济于事,但这是另一个故事;-) )。
本质上是IDAStealth,但排除了所有调试器特定的功能(IDA和Olly2有一个后端)。您要做的就是为Windbg编写一个后端(并修复其余的bug,不过我可以帮助您解决),所有其他代码都是与调试器无关的。
应该少于几十行代码。

评论


这样的插件确实不存在,但是您也不需要。查看我的答案(在接受的答案不变的情况下发布此评论)。

– mrexodia
17年5月31日下午14:31

#2 楼

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



Peb->BeingDebugged

r?$t0 = (ntdll!_peb *) @$peb;?? @$t0->BeingDebugged;eb (@$t0+2) 0;?? @$t0->BeingDebugged



ZwSetInformationThread(带有sysenter的XP SP3系统调用)

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



ZwQueryInformationProcess

语法类似于ZwSetInformationThread,此外,您还需要使用

将DebugPort伪装为NULL,并使用
ed poi(ADDRESS)  0




阅读



彼得·费里(Peter Ferrie)的“终极”反调试参考书



评论


嗯,但是反调试充满了特殊情况-例如,在故意调试进程的情况下,如果不先检查PID,就不能将DebugPort任意调零。无论如何,请参阅我的“最终”反调试参考(pferrie.host22.com/papers/unp2011.htm),以获取一长串您需要支持的技巧(以及一些因为它们是直接内核而无法支持的) -返回的数据)。

–彼得·弗里
13年5月23日在16:01

@peterferrie很棒的参考,谢谢分享!

–直到
13年5月25日在1:44

@peterferrie感谢您的评论,我只是在逐案的基础上写的,因为我知道反正有很多特殊情况,我早些时候已经读过您的论文,非常不错的反调试技巧

– blabb
13年5月30日在18:47

#3 楼

您可以使用ScyllaHide。有许多调试器的插件,但也可以使用InjectorCLI.exe将ScyllaHide注入任何进程。这是步骤(对于32位进程,如果要64位进程,请用x86替换每个x64): NtApiTool\x86\PDBReaderx86.exe并完成后,将NtApiCollection.ini复制到与InjectorCLIx86.exe相同的目录中;

不使用ScyllaHide:



使用ScyllaHide时:



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

我刚刚添加了一个选项,可以按进程ID注入进程。您可以执行以下操作:

InjectorCLIx86.exe pid:1234 HookLibraryx86.dll


评论


尽管这对于用户模式应用程序似乎确实有效,但我必须针对内核模式测试相关的TitanHide(github.com/mrexodia/TitanHide/blob/master/README.md)。 ScyllaTest报告NtQuerySystemInformation_KernelDebugger:DETECTED

–kevinf
17年12月13日在20:06

是的,ScylaHide(和TitanHide)仅适用于用户模式应用程序。

– mrexodia
17年12月14日在0:28

#4 楼

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

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