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

劫持进程注入

劫持进程注入和远程线程注入的区别就是  远程线程注入是向一个正在运行中的进程注入 而劫持进程注入则是自己打开一个进程(以挂起的方式)  然后再进行注入的操作 

这样做的原因是当进程在挂起的状态时他的所有线程都是处于未启用的阶段  这样就可以避免目标进程的反注入线程的检测 从而使得注入的操作成功率更高

void HackThreadInject(PCHAR szPath, PCHAR DeName)
{//第一步以挂起的形式打开目标进程STARTUPINFOA sta = { 0 };    //结构体成员全部初始化为0sta.cb = sizeof(STARTUPINFO);     //记得赋值大小PROCESS_INFORMATION pri = { 0 };BOOL proc = CreateProcessA(DeName,NULL,NULL,NULL,NULL,CREATE_SUSPENDED,NULL,NULL,&sta,&pri             //句柄会传入到这个结构体);if (!proc){return;}//第二步在目标进程分配内存  用于写入loadlibrary的参数LPVOID lpAlloc = VirtualAllocEx(pri.hProcess, NULL, strlen(szPath) + 1, MEM_COMMIT, PAGE_READWRITE);if (!lpAlloc){return;}//第三步 向刚分配出来的内存分配参数BOOL bWrite = WriteProcessMemory(pri.hProcess, lpAlloc, szPath, strlen(szPath) + 1, NULL);if (!bWrite){return;}//第四步创建远程线程开始注入HANDLE hRemoteThread = CreateRemoteThread(pri.hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, lpAlloc, 0, NULL);if (!hRemoteThread){cout << "CreateRemoteThread error" << GetLastError() << endl;return;}
}

第用CreateProcessA函数以挂起的状态打开我们的目标进程

注意目标的进程句柄会通过PROCESS_INFORMATION这个结构体传递

CREATE_SUSPENDED是挂起的方式打开进程

//第一步以挂起的形式打开目标进程STARTUPINFOA sta = { 0 };    //结构体成员全部初始化为0sta.cb = sizeof(STARTUPINFO);     //记得赋值大小PROCESS_INFORMATION pri = { 0 };BOOL proc = CreateProcessA(DeName,NULL,NULL,NULL,NULL,CREATE_SUSPENDED,NULL,NULL,&sta,&pri             //句柄会传入到这个结构体);

第二步 使用VirtualAllocEx在目标进程分配内存

//第二步在目标进程分配内存  用于写入loadlibrary的参数LPVOID lpAlloc = VirtualAllocEx(pri.hProcess, NULL, strlen(szPath) + 1, MEM_COMMIT, PAGE_READWRITE);if (!lpAlloc){return;}

第三步使用WriteProcessMemory向目标进程写入参数

BOOL bWrite = WriteProcessMemory(pri.hProcess, lpAlloc, szPath, strlen(szPath) + 1, NULL);if (!bWrite){return;}

第四步使用CreateRemoteThread开启远程线程注入

HANDLE hRemoteThread = CreateRemoteThread(pri.hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, lpAlloc, 0, NULL);if (!hRemoteThread){cout << "CreateRemoteThread error" << GetLastError() << endl;return;}

http://www.xdnf.cn/news/10514.html

相关文章:

  • C语言进阶--程序的编译(预处理动作)+链接
  • 数据结构:递归(Recursion)
  • 基于TMC5160堵转检测技术的夹紧力控制系统设计与实现
  • 输入ifconfig,发现ens33不见了,无法连接至虚拟机
  • Golang——3、流程控制语句
  • C++实现伽罗华域生成及四则运算(三)
  • Python----目标检测(《SSD: Single Shot MultiBox Detector》论文和SSD的原理与网络结构)
  • CppCon 2014 学习:C++ in Huge AAA Games
  • STM32F407寄存器操作(多通道单ADC+DMA)
  • 前端面试准备-5
  • Mask_RCNN 环境配置及训练
  • QT中子线程触发主线程弹窗并阻塞等待用户响应-传统信号槽实现
  • DRW - 加密市场预测
  • 考研系列—操作系统:第四章、文件管理(part.2)
  • 利用DeepSeek编写能在DuckDB中读PostgreSQL表的表函数
  • 多任务——进程
  • 基于机器学习的心脏病预测模型构建与可解释性分析
  • WIN11+VSCODE搭建的c/c++环境调试报错解决
  • vue+mitt的简便使用
  • API异常信息如何实时发送到钉钉
  • 重读《人件》Peopleware -(14)Ⅱ 办公环境 Ⅶ 把门带上
  • Windows商店中的免费扫雷游戏应用
  • 将手机网络经USB数据线和本地局域网共享给华为AP6050DN无线接入点
  • 任务22:创建示例Django项目,展示ECharts图形示例
  • 【渲染】拆解三国:谋定天下场景渲染技术
  • 3D Gaussian splatting 06: 代码阅读-训练参数
  • 《机器学习数学基础》补充资料:韩信点兵与拉格朗日插值法
  • [yolov11改进系列]基于yolov11引入多尺度空洞注意力MSDA的python源码+训练源码
  • “StPd” 陷阱 | 认知偏差?自我局限?还是清醒者的阵痛?
  • 如何排查Redis单个Key命中率骤降?