我是靠谱客的博主 温柔网络,最近开发中收集的这篇文章主要介绍DLL注入之CreateRemoteThread0x00 背景知识及测试环境0x01 主要用到的API0x02 基本思路0x03 具体代码0x04 总结,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
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:%dn", GetLastError());
return 0;
}
向目标进程中开辟空间并写入Dll文件路径
LPTSTR 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的地址
HMODULE hMod = GetModuleHandle(TEXT("KERNEL32.dll"));
LPTHREAD_START_ROUTINE pfnStartAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(hMod, "LoadLibraryW");
利用CreateRemoteThread函数创建远程线程
//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 背景知识及测试环境0x01 主要用到的API0x02 基本思路0x03 具体代码0x04 总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复