DLL注入(CreateRemoteThread方式)

CreateRemoteThread即在当前已有进程中创建新的线程。

从32位进程注入dll到32位进程的步骤如下:

1.OpenProcess 打开已有进程

2.VirtualAllocEx分配空间给它

3.获取LoadLibraryW的地址

4.WriteProcessMemory 写进内存空间

5.CreateRemoteThread实现注入

 

代码如下:

//32位程序注入到32位程序
//@param:dwPid:需要注入程序的进程pid
//@param:dllpath:注入的dll的路径
//return:True:注入成功,False:注入失败
bool injectDll32To32(DWORD dwPid,LPCTSTR dllpath)
{
	//Step 1: oepn destination process
	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,dwPid);
	
	//get dllpath length
	DWORD dwBufSize = (DWORD)(_tcslen(dllpath)+1)*sizeof(TCHAR);

	//Step2:VirtualAlloc space for the process
	LPVOID targetAddress = VirtualAllocEx(hProcess,0,dwBufSize,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);

	//Step3:Get LoadLibraryW Address
	LPTHREAD_START_ROUTINE pfnThreadRtn = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(_T("Kernel32")), "LoadLibraryW");

	//Step4:ChangePageProtection
	DWORD oldProtect	= 0;	
	VirtualProtectEx(hProcess,targetAddress,dwBufSize,PAGE_EXECUTE_READWRITE,&oldProtect);

	//Step5:WriteProcessMemory
	DWORD bytesRet= 0;
	if (!WriteProcessMemory(hProcess,targetAddress,(LPVOID)dllpath,dwBufSize,&bytesRet))
	{
		return false;
	}

	//Restore Oral 
	VirtualProtectEx(hProcess,targetAddress,dwBufSize,oldProtect,&oldProtect);

	//Step6:CreateRemoteThread
	HANDLE hThread = CreateRemoteThread(hProcess,NULL,0,pfnThreadRtn,targetAddress,0,NULL );
	if (!hThread)
	{
		return false;
	}

	WaitForSingleObject(hThread,INFINITE);
	return true;
}

 

64位注入32位 32注入64位 64注入64 等后面有时间再写

源码在这:https://github.com/huifeng-kooboo/InjectDll

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Music 爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值