作者:鐘彦璋864175 | 来源:互联网 | 2023-06-06 17:10
0x00背景知识及测试环境了解C语言基本语法以及对WIN32编程有一定的了解,了解进程运行时的虚拟地址空间的概念,还要了解进程PID。本文的测试环境为VS2019(Debugx
0x00 背景知识及测试环境
了解C语言基本语法以及对WIN32编程有一定的了解,了解进程运行时的虚拟地址空间的概念,还要了解进程PID。
本文的测试环境为VS2019(Debug x86)+Windows XP (不知道什么原因win10上搞不了,等等在研究研究) 我还是太菜了。
0x01 主要用到的API
OpenProcess(); VirtualAllocEx();
WriteProcessMemory(); GetModuleHandle();
GetProcAddress(); CreateRemoteThread();
0x02 基本思路
1.获取目标进程句柄
2.在目标进程中开辟空间,将DLL路径写入
3.获取LoardLibrary() API地址
4.创建远程线程DLL注入
0x03 具体代码
声明所需的基本参数
LPCTSTR DllPath = "";
DWORD PID = ;
获得目标进程句柄
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID);if (hProc == NULL) {printf("OpenProcess:%d\n", GetLastError());return 0;}
向目标进程中开辟空间并写入Dll文件路径
LPTSTR psLibFileRemote = NULL;psLibFileRemote = (LPTSTR)VirtualAllocEx(hProc,NULL,lstrlen(DllPath) + 1,MEM_COMMIT,PAGE_READWRITE);if (psLibFileRemote == NULL){printf("VirtualAllocEx:%d\n", GetLastError());return FALSE;}WriteProcessMemory(hProc, psLibFileRemote, (LPCVOID)DllPath, lstrlen(DllPath) + 1, NULL);
获取LoadLibrary的地址
HMODULE hMod = GetModuleHandle(TEXT("KERNEL32.dll"));
LPTHREAD_START_ROUTINE pfnStartAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(hMod, "LoadLibraryW");
利用CreateRemoteThread函数创建远程线程
HANDLE hThread;if ((hThread = CreateRemoteThread(hProc,NULL,0,pfnStartAddr,psLibFileRemote,0,NULL)) == NULL){printf("Error");return FALSE;}
0x04 总结
看到网络上说RtlCreateUserThread是CreateRemoteThread的底层实现,下次在试一试,这个寒假学点算法,尝试逆向一下,BUUOJ的题目也要提上议程了。自己还是比较菜的,还有好多东西不懂,什么时候才能像大佬一样摸鱼呀。