尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

【逆向实战】终极窃听:IPC 进程间通信与 Named Pipes (命名管道)

【逆向实战】终极窃听:IPC 进程间通信与 Named Pipes (命名管道) 专栏前言:在本专栏的前几篇文章中,我们走过了“踩点”、“潜入(DLL注入)”、“篡改(IAT Hook)”三大阶段。我们的“内鬼 DLL”已经成功驻留在目标播放器的内存中,并且牢牢接管了GdipDrawString渲染歌词的执行流。但目前有一个尴尬的问题:截获的明文数据(歌词)依然被困在目标进程的内存里。今天,我们将进入 Hook 技术的第四个核心阶段:“窃听与回传”。我们将使用 Windows 提供的高级 IPC 机制——命名管道 (Named Pipes),将数据跨越进程边界,实时回传给我们的独立控制台!(本文附完整 C++ 源码,可直接编译运行体验“上帝视角”的窃听效果)一、 为什么需要 IPC (进程间通信)?前面我们讨论过 Windows 的**“虚拟内存隔离”机制。这个机制不仅保护了目标进程免受其他进程的破坏,也困住了我们注入进去的内鬼 DLL**。内鬼 DLL:运行在目标进程(靶机)的内存空间里。它能看到明文歌词,但它不能直接去修改我们桌面上的另一个黑框框(控制台程序)的显示内容。控制台程序:运行在自己的内存空间里,它安全、独立,但它对目标进程里的歌词一无所知。要让这两个隔绝的孤岛互通有无,我们就必须向操作系统申请建立一座“桥梁”。这种跨越进程边界交换数据的技术,统称为IPC (Inter-Process Communication,进程间通信)。二、 常见的 IPC 方式大比拼:该选哪件兵器?在 Windows 下,建立这座桥梁有很多种方法,它们各有优劣与特定的适用场景。为了让你在未来的架构设计中游刃有余,我们来盘点一下 Windows 下全套的 IPC 兵器谱:1. 传图像/高频大数据的唯一真神:共享内存 (Shared Memory / File Mapping)原理:向系统申请一块两个进程都能读写的“公用物理内存页”。两个进程将其映射到自己的虚拟地址空间。优势:零拷贝 (Zero-Copy),速度极快!适合传输海量数据。例如 OBS 截获的高清游戏画面(1080P@60fps 每秒近 500MB 的像素吞吐量)全靠它。痛点:实现复杂。你需要自己搭配“互斥锁 (Mutex)”和“事件信号量 (Event)”来处理读写同步。如果不加锁,极易读到只写了一半的残缺数据(画面撕裂)。2. 轻量级文本/指令的首选:命名管道 (Named Pipes)原理:系统级别的高级文件流。操作系统在底层维护一个缓冲区,表现得就像一个可以读写的文件。优势:极其简单:就像读写本地文件一样(用ReadFile和WriteFile)。自带同步:操作系统会自动帮你排队和阻塞,不需要你自己写复杂的锁!支持局域网:甚至可以在同一个局域网内的不同电脑间通信!绝对禁忌:千万不要用命名管道传高帧率图像!因为数据需要从“发送端进程”拷贝到“内核缓冲区”,再拷贝到“接收端进程”,双重拷贝极耗 CPU 且容易堵死管道,导致目标游戏严重卡顿。3. 跨网络/跨平台的万金油:套接字 (Sockets / TCP/UDP)原理:在本地环回地址 (127.0.0.1) 建立网络连接进行通信。优势:跨语言、跨操作系统,甚至可以直接把数据发给远端服务器(远控木马的首选)。痛点:需要占用本地端口,不仅增加了网络协议栈的开销,还极其容易被防火墙拦截或引发杀毒软件弹窗警告。4. 简单粗暴的古老技法:窗口消息 (WM_COPYDATA)原理:利用 Windows UI 的消息队列,通过SendMessageAPI 传递一个包含数据指针的结构体。优势:系统自带同步机制,代码极短。痛点:必须要有可见的 GUI 窗口!这对于我们需要在后台静默运行的注入器和控制台来说是致命伤。此外,它的数据吞吐量非常受限。5. 高频小数据的隐蔽通道:剪贴板 (Clipboard)原理:把数据塞进系统的剪贴板,另一个进程再去读。优势:实现极其简单。痛点:会严重干扰用户的正常操作(用户刚复制了一段密码,就被你的外挂数据覆盖了),仅存在于理论教学中,实战中几乎不用。实战抉择:对于“歌词”这种频率不高、数据量小的纯文本信息,命名管道 (Named Pipes)绝对是最优雅、开发成本最低的方案。我们今天就用它!三、 架构设计:C/S 客户端-服务端模型命名管道使用的是典型的 C/S (Client-Server) 模型。在我们的架构中:服务端 (Server):我们的独立控制台程序 (lyrics_monitor.exe)。它负责“铺设桥梁”,然后坐在那里竖起耳朵监听。客户端 (Client):我们注入到靶机里的内鬼 DLL (dummy_hook.dll)。它每次截获到歌词后,就跑到桥头把歌词塞进去。步骤 1:搭建服务端 (监控控制台)服务端的核心 API 是CreateNamedPipeW。我们需要指定一个管道名称,格式必须是严格的\\.\pipe\你的管道名。lyrics_monitor.cpp核心源码:#includewindows.h#includeiostream#includetlhelp32.h#includestring// 辅助函数:通过进程名获取 PIDDWORDGetProcessIdByName(const
返回列表