收藏一下~
可以收录到专辑噢~
windows10 19H1中冷门的反调试方法
windows 19H1中PsSuspendProcess新加了一点代码:
以前的是没有的:
if ( !targetThread->Tcb.MiscFlags.BypassProcessFreeze )
总所周知 调试器都要用这个函数挂起线程、进程
因此如果我们给线程设置一个参数(THREAD_CREATE_FLAGS_BYPASS_PROCESS_FREEZE为0x40):
NtCreateThreadEx(&handle, MAXIMUM_ALLOWED, nullptr, NtCurrentProcess(), &printer, nullptr, THREAD_CREATE_FLAGS_BYPASS_PROCESS_FREEZE, 0, 0, 0, nullptr);
那么这个线程将无法暂停!
那么 如何利用为反调试呢?
继续看KeSuspendThread:
可以看到 Thread->Tcb.SuspendCount 在成功暂停线程的时候会增加! 也就是说我们可以利用那个新的flag阻止线程暂停 这样子这个count就不会增加 当调试器调用NtResumeProcess的时候 计数就会减少! 利用这一点我们就可以知道自己是否被调试:
for(size_t i = 0; i < 128; ++i)
NtSuspendThread(thread, nullptr);
while(true) {
if(NtSuspendThread(thread, nullptr) != STATUS_SUSPEND_COUNT_EXCEEDED)
std::puts("I was suspended\n");
Sleep(1000);
}
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐