0xd00 随笔小记

Back

使用 CreateThread 实现 Shellcode 的异步执行Blur image

之前的文章中我们都是通过函数指针来运行shellcode的,但这样存在一个问题,程序在运行到shellcode时会卡住,在等待shellcode运行结束并返回后才能继续运行或退出。

为了避免这一情况并提高shellcode的隐蔽性,我们通常会使用异步调用的方式如CreateThread创建一个新的线程来运行shellcode,这样主程序可以继续运行来伪装一个正常程序的行为,shellcode也能在后台偷偷执行。

image-20250722164007830

可以看到,在成功运行计算器后程序还在继续运行。

小插曲#

msfvenom -p windows/x64/exec CMD=calc.exe -a x64 -f c EXITFUNC=thread
shell

在生成shellcode是可以看到我指定了一个新的参数EXITFUNC=thread若不指定,标准shellcode在执行完毕后,会尝试执行ret指令返回。但在我们的加载器场景中,线程是直接跳转到shellcode地址开始执行的,并没有一个合法的返回地址压在栈上。这导致ret指令会弹出一个无效地址,从而触发0xC000D0005: Access Violation致命错误,导致线程崩溃。

通过EXITFUNC=thread就可以在Shellcode的末尾自动添加调用ExitThread的代码,从而优雅的退出线程。

使用 CreateThread 实现 Shellcode 的异步执行
https://blog.0xd00.com/blog/async-shellcode-with-createthread
Author 0xd00
Published at 2025年7月22日
Comment seems to stuck. Try to refresh?✨