在主机应急响应与内存马排查中,分析人员需要快速掌握某个进程的地址空间构成:哪些区域是可执行映像、哪些是匿名私有内存、是否存在可写可执行的可疑片段。现有商业取证套件安装成本高,开源方案又往往只覆盖单一功能。本项目提供一个只读、无依赖的进程内存观测工具,用于现场快速排查与教学演示。
点击空白处退出提示
在主机应急响应与内存马排查中,分析人员需要快速掌握某个进程的地址空间构成:哪些区域是可执行映像、哪些是匿名私有内存、是否存在可写可执行的可疑片段。现有商业取证套件安装成本高,开源方案又往往只覆盖单一功能。本项目提供一个只读、无依赖的进程内存观测工具,用于现场快速排查与教学演示。
工具包含四个模块:
一、进程定位与模块清单。按进程名或 PID 定位目标,列出全部已加载模块及其基址。
二、地址空间遍历。从零到用户态地址上限逐区扫描,按 MEM_COMMIT 过滤,统计区域类型(映像、映射、私有)与保护属性(只读、读写、执行、可写可执行等)的分布。
三、可疑区域标记。单独提取可写可执行(RWX)区域并按大小排序,这类区域是 shellcode、自解压代码与内存马的典型载体。
四、数据检索与导出。支持按字节模式在可读区域中搜索并返回命中偏移,以及按地址导出内存快照,以十六进制加 ASCII 双栏形式呈现。
全程只读,不修改目标进程的任何内存。
独立设计与实现。
主要难点在 64 位进程下的类型安全:ctypes 默认把句柄和地址按 32 位整数处理,稍有不慎就会截断高位导致调用失败,因此对所有 Win32 API 显式声明 argtypes 与 restype,并把句柄统一按 c_void_p 传递。
其次是地址空间遍历的终止条件设计,需要处理 VirtualQueryEx 返回零以及区域大小异常的情况,避免死循环。另外对内存读取做了容量上限保护,防止单个超大区域拖垮整个扫描过程。全部功能基于 Python 标准库 ctypes 实现,无需安装任何第三方包。



评论