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

劫持进程注入

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

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

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.lqws.cn/news/66007.html

相关文章:

  • 子串题解——和为 K 的子数组【LeetCode】
  • 自编码器Auto-encoder(李宏毅)
  • WSL2 安装与Docker安装
  • CP4-OFDM模糊函数原理及仿真
  • HTTPS
  • Flickr30k Entities短语定位评测指南
  • 微调大模型:什么时候该做,什么时候不该做?
  • 湖北理元理律师事务所:企业债务优化的科学路径与人文关怀
  • vscode编辑器怎么使用提高开发uVision 项目的效率,如何编译Keil MDK项目?
  • Nginx反向代理
  • Pull Request Integration 拉取请求集成
  • Mybatis-Plus 学习
  • JMeter 直连数据库
  • 设备驱动与文件系统:01 I/O与显示器
  • linux信号详解
  • Java正则表达式完全指南
  • Java实现中文姓名转拼音生成用户信息并写入文件
  • Java函数式编程(上)
  • 象棋里的卧槽马、侧面虎、金钩马的方位与解析
  • OpenLayers 地图标注之图文标注
  • [Python] Python中的多重继承
  • 儿童节快乐,聊聊数字的规律和同余原理
  • STM32——CAN总线
  • 助力高校AI教学与科研:GpuGeek推出618算力支持活动
  • Launcher3体系化之路
  • python打卡day42
  • vscode 代理模式(agent mode),简单尝试一下。
  • 02.05、链表求和
  • debian12.9或ubuntu,vagrant离线安装插件vagrant-libvirt,20250601
  • Maven(黑马)