Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
python-haystack — Marco de análisis del heap de procesos - Windows/Linux - inferencia de tipos de registros y análisis forense | Kitploit
Herramientas/GitHubGitHub/trolldbois/python-haystack
Forensia de MemoriaIngeniería InversaAnálisis ForenseForensia DigitalAnálisis de Binarios
GitHubtrolldbois/python-haystack

python-haystack

Marco de análisis del heap de procesos - Windows/Linux - inferencia de tipos de registros y análisis forense

Ver Repositorio
953316hace 9 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

python-haystack memoria forense ################################

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

Inicio rápido:

Guía de uso rápido <docs/Haystack_basic_usage.ipynb>_ en la carpeta docs/.

CLI de Haystack-reverse <docs/Haystack_reverse_CLI.ipynb>_ en la carpeta docs/.

Más documentación <http://python-haystack.readthedocs.io/en/latest/>_

Introducción:

python-haystack es un framework de análisis de heap, enfocado en la búsqueda e ingeniería inversa de estructuras C en memoria asignada.

La primera función/API es la función SEARCH. Proporciona la capacidad de buscar tipos de registros conocidos en un volcado de memoria de un proceso o en la memoria de un proceso en vivo.

La segunda función/API es la función REVERSE en la extensión python-haystack-reverse <https://github.com/trolldbois/python-haystack-reverse>_ Su objetivo es ayudar a un analista en la ingeniería inversa de los tipos de registros de memoria presentes en el heap de un proceso. Se centra en la reconstrucción y clasificación de estructuras C clásicas a partir de la memoria. Intenta recrear definiciones de tipos.

Scripts y formato del manejador de memoria:

Existen algunos puntos de entrada para manejar el formato de su volcado de memoria.

Carpeta de volcado de memoria producida por haystack-live-dump

  • haystack-find-heap permite mostrar detalles sobre el HEAP de Windows.
  • haystack-search CLI de búsqueda
  • haystack-show CLI de visualización para un tipo de registro específico en una dirección específica

Puede usar la siguiente URL para designar su manejador/volcado de memoria:

  • dir:///ruta/a/mi/carpeta/de/volcado/haystack para usar el formato de volcado de haystack
  • dmp:///ruta/a/mi/archivo/minidump para usar el formato minidump (¿Microsoft?)
  • frida://nombre_o_pid_del_proceso_a_conectar para usar frida y acceder a la memoria de un proceso en vivo
  • live://nombre_o_pid_del_proceso_a_conectar para hacer ptrace a un proceso en vivo
  • rekall:// para cargar una imagen de rekall
  • volatility:// para cargar una imagen de volatility
  • cuckoo:// para cargar un volcado de memoria producido por Cuckoo (beta, puede necesitar parche)

Cómo obtener un volcado de memoria:

En Windows, la forma más directa es obtener un Minidump. El conjunto de herramientas Sysinternals de Microsoft proporciona una CLI (procdump.exe) o una GUI (Process Explorer). Usando una de ellas (con la opción de volcado de memoria completo) obtendrá un archivo que se puede usar con la lista de puntos de entrada haystack-minidump-xxx.

Aunque técnicamente podría usar muchas herramientas de terceros, haystack realmente necesita información de mapeo de memoria para funcionar. Por lo tanto, se incluye una herramienta de volcado haystack-live-dump:

.. code-block:: bash

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

Para procesos en vivo

  • haystack-live-dump captura un volcado de memoria de un proceso en una carpeta (formato haystack)

Para un volcado de memoria de Rekall

  • haystack-rekall-dump vuelca un proceso específico a un volcado de proceso de haystack

Para un volcado de memoria de Volatility

  • haystack-volatility-dump vuelca un proceso específico a un volcado de proceso de haystack

Puede reproducir fácilmente el formato del volcado; es una carpeta/archivo que contiene cada mapa de memoria en un archivo separado:

  • contenido de la memoria en un archivo nombrado según sus direcciones de inicio/fin ( 0x000700000-0x000800000 )
  • archivo 'mappings' que contiene metadatos de los mapeos de memoria. ( mappings )

O puede programar una implementación de haystack.abc.IMemoryMapping para su formato favorito.

De lo contrario, si ya tiene un volcado de memoria del sistema de Volatility o Rekall, puede usar las familias de puntos de entrada haystack-rekall-xxx o haystack-volatility-xxx para extraer la memoria de un proceso específico en un archivo.

Verificación de atributos del HEAP de Windows:

El punto de entrada haystack-find-heap permite mostrar detalles sobre el HEAP de Windows. Debería soportar:

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

y mostrar detalles de la Lista Lateral de Búsqueda (LAL) y el heap de Baja Fragmentación (LFH) frontend.

Puede sorprenderse al ver que, a veces, un solo proceso puede mezclar los dos tipos de HEAP (32 y 64).

Búsqueda de estructuras conocidas:

Para buscar un registro específico, primero necesitará definir ese tipo de registro. Hay una [guía de uso rápido](docs/Haystack basic usage.ipynb) disponible para repasar los pasos básicos para pasar de un archivo de cabecera C a una definición de ctypes en Python. O puede hacerlo usted mismo, con registros ctypes tradicionales de Python.

La API de búsqueda está disponible a través de la familia de scripts haystack-xxx-search pero también en una API para que pueda integrar esa búsqueda en su propio código.

En resumen, la búsqueda de haystack iterará sobre cada offset de la memoria del programa para intentar encontrar offsets 'válidos' para ese tipo de registro específico.

La validez del registro se determina mediante restricciones de tipo como:

  • los campos puntero deben tener valores de espacio de direcciones válidos
  • restricciones de tipo definidas por el usuario (ver la sección 'Archivo de restricciones' más abajo)
  • etc.

.. code-block:: bash

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

Archivo de restricciones:

Se soportan las siguientes restricciones:

  • IgnoreMember: El valor de este campo será ignorado. Útil para ignorar campos puntero.
  • NotNull: El valor de este campo no debe ser 0.
  • RangeValue(x,y): el campo debe tener un valor entre x e y.
  • PerfectMatch('hola mundo'): el campo (una cadena) debe coincidir con 'hola mundo'
  • [1,2,3]: Una lista de valores que debe tener el campo
  • [1, RangeValue(12,16), 42]: El valor del campo debe ser 1, entre 12 y 16, o 42.

Ejemplo:

.. code-block:: python

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

Puede echar un vistazo a haystack/allocators/win32/winxpheap32.constraints, donde se definen las restricciones de un HEAP de Windows XP x32.

Obviamente, cuantas más restricciones, mejores serán los resultados.

Definición dinámica de restricciones:

También puede crear restricciones más complejas usando código Python implementando una clase haystack.abc.interface.IRecordTypeDynamicConstraintsValidator y alimentándola a ModuleConstraints.set_dynamic_constraints

Ejemplo de línea de comandos:

El repositorio sslsnoop necesita una actualización para ser compatible con versiones > v0.30 - pendiente

Por ejemplo, esto volcará las estructuras session_state + las estructuras hijas apuntadas como un objeto Python con el que podemos jugar. Supongamos que tenemos un cliente o servidor ssh con 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> <su estructura ctypes> search

Interfaz gráfica de usuario:

Esto no funciona actualmente

También hay un intento de interfaz gráfica de usuario python-haystack-gui <https://github.com/trolldbois/python-haystack-gui>_

Ejemplo de API de Python:

Consulte la guía de uso rápido <docs/Haystack_basic_usage.ipynb>_

Cómo definir sus propias estructuras:

La forma más sencilla es usar ctypeslib para generar registros ctypes a partir de cabeceras C.

O definir su registro ctypes de Python a mano.

Ejemplos de extensiones:

@ ver sslsnoop en el repositorio de Pypi. Las estructuras de openssl y nss están generadas.

@ ver ctypes-kernel en mi github. Las estructuras del kernel de Linux se generan a partir de un árbol del kernel compilado. (VMM es un fastidio)

Preguntas no tan frecuentes:

¿Qué hace?:

La funcionalidad básica es buscar en la memoria de un proceso un registro C específico.

La funcionalidad extendida de ingeniería inversa tiene como objetivo invertir estructuras a partir del análisis de memoria/heap.

¿Cómo sabe que la estructura es válida?:

Agrega algunas restricciones sobre los valores esperados de los campos del registro. Los punteros siempre están restringidos al espacio de memoria válido.

¿De dónde viene la idea?:

passe-partout <http://www.hsc.fr/ressources/breves/passe-partout.html.fr>_ originalmente. Desde que comencé en marzo de 2011, he descubierto varios otros trabajos relacionados anteriores.

La mayoría de ellos están en la carpeta docs/.

Otros trabajos relacionados son mona.py de Immunity, algunas cosas de Mandiant...

En resumen, probablemente no sea una idea original. Pero aún así, no pude encontrar una librería independiente operativa para la extracción de memoria en vivo para mi PoC de sslsnoop, así que...

Trabajos relacionados <https://github.com/trolldbois/python-haystack/wiki/State-of-art-reference>_

¿Cuáles son las dependencias?:

  • python-ptrace en linux
  • winappdbg en win32 (no estoy seguro de que funcione, se agradecen comentarios)
  • python-numpy
  • python-networkx
  • python-levenshtein
  • varias otras...

Otros

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

Descargar herramienta