我是靠谱客的博主 温柔网络,最近开发中收集的这篇文章主要介绍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 总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部