我是靠谱客的博主 温柔网络,这篇文章主要介绍DLL注入之CreateRemoteThread0x00 背景知识及测试环境0x01 主要用到的API0x02 基本思路0x03 具体代码0x04 总结,现在分享给大家,希望可以做个参考。
0x00 背景知识及测试环境
了解C语言基本语法以及对WIN32编程有一定的了解,了解进程运行时的虚拟地址空间的概念,还要了解进程PID有关知识。
本文的测试环境为VS2019(Debug x86)+Windows XP (不知道什么原因win10上搞不了,等等在研究研究) 。
0x01 主要用到的API
复制代码
1
2
3
4OpenProcess(); VirtualAllocEx(); WriteProcessMemory(); GetModuleHandle(); GetProcAddress(); CreateRemoteThread();
0x02 基本思路
1.获取目标进程句柄
2.在目标进程中开辟空间,将DLL路径写入
3.获取LoardLibrary() API地址
4.创建远程线程DLL注入
0x03 具体代码
声明所需的基本参数
复制代码
1
2
3LPCTSTR DllPath = ""; DWORD PID = ;
获得目标进程句柄
复制代码
1
2
3
4
5
6
7
8
9
10HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID ); if (hProc == NULL) { printf("OpenProcess:%dn", GetLastError()); return 0; }
向目标进程中开辟空间并写入Dll文件路径
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14LPTSTR psLibFileRemote = NULL; psLibFileRemote = (LPTSTR)VirtualAllocEx(hProc, NULL, lstrlen(DllPath) + 1, MEM_COMMIT, PAGE_READWRITE ); if (psLibFileRemote == NULL) { printf("VirtualAllocEx:%dn", GetLastError()); return FALSE; } WriteProcessMemory(hProc, psLibFileRemote, (LPCVOID)DllPath, lstrlen(DllPath) + 1, NULL);
获取LoadLibrary的地址
复制代码
1
2
3HMODULE hMod = GetModuleHandle(TEXT("KERNEL32.dll")); LPTHREAD_START_ROUTINE pfnStartAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(hMod, "LoadLibraryW");
利用CreateRemoteThread函数创建远程线程
复制代码
1
2
3
4
5
6
7
8//CreateThreadThread HANDLE hThread; if ((hThread = CreateRemoteThread(hProc,NULL,0,pfnStartAddr,psLibFileRemote,0,NULL)) == NULL) { printf("Error"); return FALSE; }
0x04 总结
这个方法算是比较基础的DLL注入方式了,之前看到网络上说RtlCreateUserThread是CreateRemoteThread的底层实现,下次在试一试,这个寒假学点算法,尝试逆向一下,BUUOJ的题目也要提上议程了。自己还是比较菜的,还有好多东西不懂,什么时候才能像大佬一样摸鱼呀。
最后
以上就是温柔网络最近收集整理的关于DLL注入之CreateRemoteThread0x00 背景知识及测试环境0x01 主要用到的API0x02 基本思路0x03 具体代码0x04 总结的全部内容,更多相关DLL注入之CreateRemoteThread0x00内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复