Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
python-haystack — Фреймворк анализа кучи процессов - Windows/Linux - вывод типов записей и криминалистика | Kitploit
Инструменты/GitHubGitHub/trolldbois/python-haystack
Криминалистика памятиОбратная инженерияФорензикаЦифровая криминалистикаАнализ Бинарных Файлов
GitHubtrolldbois/python-haystack

python-haystack

Фреймворк анализа кучи процессов - Windows/Linux - вывод типов записей и криминалистика

Репозиторий
95339 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

python-haystack криминалистика памяти ################################

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

Быстрый старт:

Quick usage guide <docs/Haystack_basic_usage.ipynb>_ in the docs/ folder.

Haystack-reverse CLI <docs/Haystack_reverse_CLI.ipynb>_ in the docs/ folder.

More documentation <http://python-haystack.readthedocs.io/en/latest/>_

Введение:

python-haystack — это фреймворк для анализа кучи, ориентированный на поиск и реверс-инжиниринг C-структур в выделенной памяти.

Первая функция/API — функция SEARCH. Она предоставляет возможность поиска известных типов записей в дампе памяти процесса или в памяти живого процесса.

Вторая функция/API — функция REVERSE в расширении python-haystack-reverse <https://github.com/trolldbois/python-haystack-reverse>_ Она призвана помочь аналитику в обратном проектировании типов записей памяти, присутствующих в куче процесса. Она ориентирована на восстановление и классификацию классических C-структур из памяти. Она пытается заново создать определения типов.

Скрипты и форматы обработчиков памяти:

Существует несколько точек входа для работы с форматом вашего дампа памяти.

Папка с дампом памяти, созданная haystack-live-dump

  • haystack-find-heap позволяет отобразить детали кучи Windows.
  • 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 (бета, может потребоваться патч)

Как получить дамп памяти:

В 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. Она должна поддерживать:

  • Windows XP 32 bits
  • Windows XP 64 bits
  • Windows 7 32 bits
  • Windows 7 64 bits

и отображать детали Look Aside List (LAL) и Low Fragmentation Heap (LFH) frontend.

Возможно, вы удивитесь, увидев, что иногда один процесс может смешивать оба типа кучи (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 x32.

Очевидно, чем больше ограничений, тем лучше будут результаты.

Динамическое определение ограничений:

Вы также можете создавать более сложные ограничения с помощью кода Python, реализовав класс haystack.abc.interface.IRecordTypeDynamicConstraintsValidator и передав его в ModuleConstraints.set_dynamic_constraints

Пример командной строки:

Репозиторий 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:

Смотрите quick usage guide <docs/Haystack_basic_usage.ipynb>_

Как определить свои собственные структуры:

Самый простой способ — использовать ctypeslib для генерации записей ctypes из C-заголовков.

Или определить запись Python ctypes вручную.

Примеры расширений:

@ см. sslsnoop в репозитории PyPI. Сгенерированы структуры openssl и nss.

@ см. ctypes-kernel на моем GitHub. Структуры ядра Linux генерируются из собранного дерева ядра. (VMM — засада)

Не FAQ (часто задаваемые вопросы):

Что это делает?:

Основная функциональность: поиск в памяти процесса конкретной C-записи.

Расширенная функциональность обратного проектирования направлена на восстановление структур из анализа памяти/кучи.

Как он узнает, что структура действительна?:

Вы добавляете ограничения на ожидаемые значения полей записи. Указатели всегда ограничены допустимым адресным пространством.

Откуда взялась идея?:

Изначально из passe-partout <http://www.hsc.fr/ressources/breves/passe-partout.html.fr>_. С момента начала работы в марте 2011 года я обнаружил несколько других связанных работ.

Большинство из них находятся в папке docs/.

Другие связанные работы: mona.py от Immunity, некоторые вещи Mandiant...

В двух словах, это, вероятно, не оригинальная идея. Но тем не менее, я не смог найти рабочую автономную библиотеку для извлечения живой памяти для моего PoC sslsnoop, поэтому...

Связанные работы <https://github.com/trolldbois/python-haystack/wiki/State-of-art-reference>_

Каковы зависимости?:

  • python-ptrace на Linux
  • winappdbg на Win32 (работоспособность не уверен, отзывы приветствуются)
  • 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

Скачать инструмент