Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/trolldbois/python-haystack
内存取证逆向工程取证分析数字取证二进制分析
GitHubtrolldbois/python-haystack

python-haystack

进程堆分析框架 - Windows/Linux - 记录类型推断与取证

查看仓库
953339年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

python-haystack 内存取证 ################################

|travis| |coverage| |landscape| |pypi| |docs|

快速开始

docs/ 文件夹中的 快速使用指南 <docs/Haystack_basic_usage.ipynb>_。

docs/ 文件夹中的 Haystack-reverse CLI <docs/Haystack_reverse_CLI.ipynb>_。

更多文档 <http://python-haystack.readthedocs.io/en/latest/>_

介绍

python-haystack 是一个堆分析框架,专注于搜索和逆向已分配内存中的 C 结构体。

第一个功能/API 是 SEARCH 函数。 它可以在进程内存转储或活动进程内存中搜索已知的记录类型。

第二个功能/API 是扩展 python-haystack-reverse <https://github.com/trolldbois/python-haystack-reverse>_ 中的 REVERSE 函数。 它旨在帮助分析人员逆向存在于进程堆中的内存记录类型。 它专注于从内存中重建和分类经典的 C 结构体。 它试图重新创建类型定义。

脚本与内存处理器格式

存在几个入口点来处理你的内存转储格式。

由 haystack-live-dump 生成的内存转储文件夹

  • haystack-find-heap 允许显示 Windows HEAP 的详细信息。
  • haystack-search 搜索 CLI
  • haystack-show 显示特定地址上特定记录类型的 CLI

你可以使用以下 URL 来指定你的内存处理器/转储:

  • dir:///path/to/my/haystack/fump/folder 使用 haystack 转储格式
  • dmp:///path/to/my/minidump/file 使用 minidump 格式(Microsoft?)
  • frida://name_or_pid_of_process_to_attach_to 使用 frida 访问活动进程内存
  • live://name_or_pid_of_process_to_attach_to ptrace 活动进程
  • rekall:// 加载 rekall 镜像
  • volatility:// 加载 volatility 镜像
  • cuckoo:// 加载由 Cuckoo 生成的内存转储(beta 可能需要补丁)

如何获取内存转储

在 Windows 上,最直接的方法是获取 Minidump。Microsoft Sysinternals 工具套件提供了 CLI(procdump.exe)或 GUI(Process Explorer)。 使用其中一种(带有完整内存转储选项)将生成一个文件, 该文件可以与 haystack-minidump-xxx 系列的入口点一起使用。

虽然从技术上讲你可以使用许多第三方工具,但 haystack 实际上需要内存映射信息才能工作。 因此,包含了一个转储工具 haystack-live-dump:

.. code-block:: bash

root@kitploit:~
# haystack-live-dump <pid> myproc.dump

对于活动进程

  • haystack-live-dump 将进程内存转储捕获到文件夹(haystack 格式)

对于 Rekall 内存转储

  • haystack-rekall-dump 将特定进程转储为 haystack 进程转储

对于 Volatility 内存转储

  • haystack-volatility-dump 将特定进程转储为 haystack 进程转储

你可以轻松重现转储的格式,它是一个文件夹/归档, 包含每个内存映射在单独的文件中:

  • 内存内容以起始/结束地址命名的文件(例如 0x000700000-0x000800000)
  • 'mappings' 文件包含内存映射元数据。(mappings)

或者你可以为你的首选格式编写一个 haystack.abc.IMemoryMapping 实现。

另外,如果你已经有一个来自 Volatility 或 Rekall 的系统内存转储, 你可以使用 haystack-rekall-xxx 或 haystack-volatility-xxx 系列入口点 将特定进程的内存提取到文件中。

验证 Windows 堆属性

入口点 haystack-find-heap 允许显示 Windows HEAP 的详细信息。 它应支持:

  • Windows XP 32 位
  • Windows XP 64 位
  • Windows 7 32 位
  • Windows 7 64 位

并显示 Look Aside List (LAL) 和 Low Fragmentation Heap (LFH) 前端的详细信息。

你可能会惊讶地发现,有时单个进程可以混合两种类型的 HEAP(32 位和 64 位)。

搜索已知结构体

要搜索特定记录,你首先需要定义该记录类型。 有一个[快速使用指南](docs/Haystack basic usage.ipynb)介绍了从 C 头文件到 Python ctypes 定义的基本步骤。 或者你可以自己动手,使用传统的 Python ctypes 记录。

搜索 API 通过 haystack-xxx-search 系列脚本提供,但也以 API 形式提供,以便你可以将该搜索嵌入到自己的代码中。

简而言之,haystack 搜索将遍历程序内存的每一个偏移量,尝试找到该特定记录类型的“有效”偏移量。

记录的有效性由类型约束决定,例如:

  • 指针字段应具有有效的地址空间值
  • 用户定义的类型约束(参见下面的“约束文件”部分)
  • 等等。

.. code-block:: bash

$ python haystack/cli.py dir:///home/user/project/python-haystack/test/src/test-ctypes6.32.dump ctypes6_gen32.struct_usual

约束文件

支持以下约束:

  • IgnoreMember:忽略此字段的值。用于忽略指针字段。
  • NotNull:此字段的值不能为 0。
  • RangeValue(x,y):字段的值必须在 x 到 y 之间。
  • PerfectMatch('hello world'):字段(字符串)必须匹配 'hello world'
  • [1,2,3]:字段应具有的值列表
  • [1, RangeValue(12,16), 42]:字段值应为 1、12-16 或 42。

示例:

.. code-block:: python

root@kitploit:~
[struct_name]
myfield: [1,0xff]
ptr_field: NotNull

你可以查看 haystack/allocators/win32/winxpheap32.constraints,其中定义了 Windows XP HEAP x32 的约束。

显然,约束越多,结果越好。

动态约束定义

你还可以通过实现 haystack.abc.interface.IRecordTypeDynamicConstraintsValidator 类并将其提供给 ModuleConstraints.set_dynamic_constraints 来使用 Python 代码创建更复杂的约束。

命令行示例

sslsnoop 仓库需要更新以兼容 v0.30 以上的版本 - 待处理

例如,这将转储 session_state 结构体及其指向的子结构体,作为可以操作的 Python 对象。 假设我们有一个 ssh 客户端或服务器,PID 为 4042:

.. code-block:: bash

root@kitploit:~
$ sudo haystack-live-search --pickled 4042 sslsnoop.ctypes_openssh.session_state search > instance.pickled
$ sudo haystack-live-search --pickled 4042 sslsnoop.ctypes_openssh.session_state refresh 0xb8b70d18 > instance.pickled
$ sudo haystack-live-search --pickled <pid> <your ctypes Structure> search

图形用户界面

当前无法使用

还有一个图形用户界面的尝试 python-haystack-gui <https://github.com/trolldbois/python-haystack-gui>_

Python API 示例

请参阅 快速使用指南 <docs/Haystack_basic_usage.ipynb>_

如何定义你自己的结构体

最简单的方法是使用 ctypeslib 从 C 头文件生成 ctypes 记录。

或者手动定义你的 Python ctypes 记录。

扩展示例

@ 参见 Pypi 仓库中的 sslsnoop。生成了 openssl 和 nss 结构体。

@ 参见我的 GitHub 上的 ctypes-kernel。Linux 内核结构体是从构建的内核树生成的。(VMM 很讨厌)

非典型 FAQ

它做什么?

基本功能是在进程内存中搜索特定的 C 记录。

扩展的逆向工程功能旨在通过内存/堆分析来逆向结构体。

它怎么知道结构体是有效的?

你在记录字段的期望值上添加了一些约束。 指针总是被约束在有效的内存空间内。

这个想法从何而来?

最初来自 passe-partout <http://www.hsc.fr/ressources/breves/passe-partout.html.fr>_。 自从我 2011 年 3 月开始以来,我发现了一些其他相关的前期工作。

其中大部分在 docs/ 文件夹中。

其他相关工作包括 Immunity 的 mona.py,以及一些 Mandiant 的东西...

简而言之,这可能不是一个原创的想法。但是,我未能找到一个可操作的独立库来为我的 sslsnoop PoC 进行实时内存提取,所以……

相关工作 <https://github.com/trolldbois/python-haystack/wiki/State-of-art-reference>_

依赖项是什么?

  • linux 上的 python-ptrace
  • win32 上的 winappdbg(不确定是否工作,欢迎反馈)
  • python-numpy
  • python-networkx
  • python-levenshtein
  • 其他的一些...

其他

http://ntinfo.biz/ xntsv32

.. |pypi| image:: https://img.shields.io/pypi/v/haystack.svg?style=flat-square&label=latest%20stable%20version :target: https://pypi.python.org/pypi/haystack :alt: Latest version released on PyPi

.. |coverage| image:: https://img.shields.io/coveralls/trolldbois/python-haystack/master.svg?style=flat-square&label=coverage :target: https://coveralls.io/github/trolldbois/python-haystack?branch=master :alt: Test coverage

.. |travis| image:: https://img.shields.io/travis/trolldbois/python-haystack/master.svg?style=flat-square&label=travis-ci :target: http://travis-ci.org/trolldbois/python-haystack :alt: Build status of the master branch on Mac/Linux

.. |landscape| image:: https://landscape.io/github/trolldbois/python-haystack/master/landscape.svg?style=flat :target: https://landscape.io/github/trolldbois/python-haystack/master :alt: Code Health

.. |docs| image:: https://readthedocs.org/projects/python-haystack/badge/?version=latest :target: https://readthedocs.org/projects/python-haystack/badge/?version=latest :alt: Documentation status

下载工具