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

劫持进程注入

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

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

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.lryc.cn/news/2395358.html

相关文章:

  • 计算机基础——宏病毒防御与网络技术
  • 深度解析互联网区(Internet ):架构、风险与防护全攻略
  • 2024Flutter面试题
  • C++内存学习
  • Python uv包管理工具使用详解
  • [Linux] Linux 系统从启动到驱动加载
  • 基于微信小程序的云校园信息服务平台设计与实现(源码+定制+开发)云端校园服务系统开发 面向师生的校园事务小程序设计与实现 融合微信生态的智慧校园管理系统开发
  • 大语言模型的技术原理与应用前景:从Transformer到ChatGPT
  • 如何编写GitLab-CI配置文件
  • 生成式人工智能:重构软件开发的范式革命与未来生态
  • 关于 java:4. 异常处理与调试
  • Java基础 Day26
  • android lifeCycleOwner生命周期
  • 高防IP能抗住500G攻击吗?
  • 工作流引擎-10-什么是 BPM?
  • day1-小白学习JAVA---JDK安装和环境变量配置(mac版)
  • 每日温度(力扣-739)
  • QT中子线程触发主线程弹窗并阻塞等待用户响应-传统信号槽实现
  • HarmonyOS鸿蒙系统深度运维指南
  • SpringBoot多租户系统的5种架构设计方案
  • 数据分析实战1(Excel制作报表)
  • 本地部署大模型llm+RAG向量检索问答系统 deepseek chatgpt
  • 设备健康管理的战略升维:用预测性维护重构企业竞争力
  • Redis事务详解:原理、使用与注意事项
  • 提升 GitHub Stats 的 6 个关键策略
  • CSS Animation 详解
  • LabVIEW 中内存释放相关问题
  • 【HarmonyOS 5】鸿蒙中的UIAbility详解(三)
  • 基于内存高效算法的 LLM Token 优化:一个有效降低 API 成本的技术方案
  • vue-11(命名路由和命名视图)