windows 启动exe程序前注入dll(c++)

//需要的头文件:
#include <iostream>
#include <stdarg.h>
#include <Windows.h>
#include <Psapi.h>
#include <stdint.h>
#include <tlhelp32.h>
#include <imagehlp.h>
#pragma comment(lib,"Psapi.lib")  //编译这个lib文件
#pragma comment(lib,"imagehlp.lib")  

//软件启动前注入Dll
//param1:sDllPath:dll路径,run_path:执行文件路径
bool injectDll(char sDllPath[],TCHAR run_path[])
{
	//启动目标进程
	STARTUPINFO si = { 0 };
	si.cb = sizeof(si);
	si.dwFlags = STARTF_USESHOWWINDOW;
	si.wShowWindow = SW_SHOW;
	//pi:创建线程返回的信息
	PROCESS_INFORMATION pi; 
	BOOL bRet = ::CreateProcess(NULL, run_path,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&si,&pi);
	//获得进程入口
	HANDLE curProcessHandle = pi.hProcess; //获得当前进程的句柄
	// 创建虚拟内存地址,放置dll路径
	LPVOID pDllPath = VirtualAllocEx(curProcessHandle, NULL, strlen(sDllPath) + 1, MEM_COMMIT, PAGE_READWRITE);
	WriteProcessMemory(curProcessHandle, pDllPath, sDllPath, strlen(sDllPath) + 1, NULL);
	// 获取LoadLibraryA地址:用于注入dll;
	PTHREAD_START_ROUTINE pfnLoadLib = (PTHREAD_START_ROUTINE)GetProcAddress(
		GetModuleHandle(TEXT("kernel32")), "LoadLibraryA");
	// 在线程中执行dll中的入口函数:即导入dll
	HANDLE hNewThread = CreateRemoteThread(curProcessHandle, NULL, 0, pfnLoadLib, pDllPath, 0, NULL);
	// TODO: 后续可以插入命令行操作
	WaitForSingleObject(hNewThread, INFINITE);
	VirtualFreeEx(curProcessHandle, pDllPath, 0, MEM_RELEASE);
	CloseHandle(hNewThread);
	CloseHandle(curProcessHandle);
	ResumeThread(pi.hThread);//继续
	return true;
}

用法:直接引用这个方法即可,已经封装好了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Music 爱好者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值