向远程进程注入 DLL

//注入DLL 至窗口进程中
//HWND hwnd : 远程窗口进程 HWND
//LPCSTR dllName  : 要注入的DLL Name
BOOL InjectDllToProcess(HWND hwnd , LPCSTR dllName){

 DWORD processId;
 GetWindowThreadProcessId(hwnd,&processId);

 //打开进程,并设置完全访问权
 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,processId);
 if(hProcess == NULL){
  return FALSE;
 }
 

 //将当前程序执行路径 附为 dll 路径
 char dll[500];
 GetCurrentDirectoryA(sizeof(dll),dll);
 strcat_s(dll,"//");
 strcat_s(dll,dllName);

 //计算 dll 名称字符串长度
 size_t size = strlen(dll) + 1;

 //远程中分配
 LPVOID parmAddr = VirtualAllocEx(hProcess,NULL,size,MEM_COMMIT,PAGE_READWRITE);

 //将 dll 名称写入 远程进程
 DWORD d;
 if(!WriteProcessMemory(hProcess,parmAddr,dll,size,&d)){
  return FALSE;
 }
 
 //读取 LoadLibraryA 地址
 PROC funAddr = GetProcAddress(GetModuleHandleA("kernel32") , "LoadLibraryA");
 if(NULL == funAddr){
  return FALSE;
 }

 //建立远程 线程 加载 DLL.
 HANDLE thread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)funAddr,parmAddr,0,NULL);
 if(NULL == thread){
  return FALSE;
 }

 //等待远程线程结束
 WaitForSingleObject(thread,INFINITE);


 CloseHandle(thread);
 CloseHandle(hProcess);

 return TRUE;
}

//注入DLL 至窗口进程中
//HWND hwnd : 远程窗口进程 HWND
//LPCSTR dllName  : 要注入的DLL Name
BOOL InjectDllToProcess(HWND hwnd , LPCSTR dllName){

 DWORD processId;
 GetWindowThreadProcessId(hwnd,&processId);

 //打开进程,并设置完全访问权
 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,processId);
 if(hProcess == NULL){
  return FALSE;
 }
 

 //将当前程序执行路径 附为 dll 路径
 char dll[500];
 GetCurrentDirectoryA(sizeof(dll),dll);
 strcat_s(dll,"//");
 strcat_s(dll,dllName);

 //计算 dll 名称字符串长度
 size_t size = strlen(dll) + 1;

 //远程中分配
 LPVOID parmAddr = VirtualAllocEx(hProcess,NULL,size,MEM_COMMIT,PAGE_READWRITE);

 //将 dll 名称写入 远程进程
 DWORD d;
 if(!WriteProcessMemory(hProcess,parmAddr,dll,size,&d)){
  return FALSE;
 }
 
 //读取 LoadLibraryA 地址
 PROC funAddr = GetProcAddress(GetModuleHandleA("kernel32") , "LoadLibraryA");
 if(NULL == funAddr){
  return FALSE;
 }

 //建立远程 线程 加载 DLL.
 HANDLE thread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)funAddr,parmAddr,0,NULL);
 if(NULL == thread){
  return FALSE;
 }

 //等待远程线程结束
 WaitForSingleObject(thread,INFINITE);


 CloseHandle(thread);
 CloseHandle(hProcess);

 return TRUE;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值