windows 启动exe程序前注入dll(c++)
//需要的头文件:#include <iostream>#include <stdarg.h>#include <Windows.h>#include <Psapi.h>#include <stdint.h>#include <tlhelp32.h>#include <imagehlp.h>#pr...
·
//需要的头文件:
#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;
}
用法:直接引用这个方法即可,已经封装好了
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)