
Un BOF diseñado para inspeccionar la memoria y las direcciones de procesos.
Un BOF de CS que se puede usar para inspeccionar la memoria de procesos, direcciones y símbolos!
| Comando | Descripción |
|---|---|
| lm | lista todos los módulos cargados junto con dirección base, punto de entrada, y más |
| addr | Imprime los bytes en una dirección de memoria dada |
| meminfo | Imprime información de una dirección de memoria dada |
| lt | Imprime una lista de todos los hilos activos en el proceso actual junto con información básica |
| regdump | Imprime el contenido de los registros de un hilo |
¡Envía parches! ¡Envía recomendaciones para más comandos!
El comando lm lista los módulos cargados en el proceso actual. Cuando se invoca sin argumentos devuelve todas las DLL cargadas; cuando se le da un nombre de DLL devuelve detalles solo para ese módulo (dirección base, punto de entrada, tamaño, ruta completa).
Sintaxis
psi lm [dll]
Parámetros:
dll (opcional): El nombre de una DLL cargada a consultar. Si se omite, se listan todos los módulos cargados.Ejemplo:
psi lm
psi lm ntdll.dll
psi lm kernel32.dll
El comando addr devuelve el valor en una dirección dada.
Sintaxis:
psi addr <dirección> <tipo> [cantidad]
dirección: La dirección a inspeccionar en hexadecimaltipo: Esto controla cómo tratar el tipo de datos en la dirección dada. Los valores válidos son: BYTE, WORD, DWORD, LPVOID. Por lo tanto, si un usuario proporciona un valor DWORD, se lee un bloque de size(DWORD) en esa dirección. Cada bloque se imprime como un valor little-endian prefijado con 0x cuyo ancho es igual al tamaño del tipo (por ejemplo, una fila de WORD se agrupa como 0xaabb 0xccdd ...). Los nombres de tipos se comparan sin distinción de mayúsculas/minúsculas. Los alias de Win32 del mismo tamaño (int, ULONG, ULONG64, HANDLE, etc.) se omiten intencionalmente — use BYTE/WORD// para lecturas de 1/2/4/8 bytes.La salida debe ser un volcado hexadecimal empezando en la dirección dada y los bloques agrupados juntos.
Ejemplo:
psi addr 0xdeadbeef DWORD 2
psi addr 0xdeadbeef LPVOID
psi addr 0xdeadbeef WORD 8
El comando meminfo devuelve varias informaciones sobre una dirección de memoria dada incluyendo:
Sintaxis:
psi meminfo <dirección>
dirección: La dirección a inspeccionar en hexadecimalEjemplo:
psi addr 0xdeadbeef
El comando lt imprime todos los hilos del proceso actual junto con su TID y punto de entrada.
Sintaxis
psi lt
El comando regdump vuelca los registros de CPU para un hilo. El id del hilo (tid) es opcional: si se omite, se vuelca el hilo Beacon que llama mediante RtlCaptureContext; si se proporciona, ese hilo en el proceso actual se suspende durante la duración de la instantánea. Si se proporciona un nombre de registro, solo se imprime ese registro; de lo contrario, se vuelcan todos los registros soportados, incluyendo el conjunto completo de GPR x64 más RFLAGS, registros de segmento, registros de depuración, SSE (XMM), AVX/AVX2 (YMM) y AVX-512 (ZMM / kmask) — los últimos tres dependen del soporte de características de la CPU del host. Los nombres de registros se comparan sin distinción de mayúsculas/minúsculas y aceptan alias de sub-ancho (por ejemplo, eax, ax, ah, al todos resuelven contra el mismo GPR subyacente).
Sintaxis:
psi regdump [tid] [registro]
tid: id de hilo opcional cuyo contexto volcar. Si se omite, se captura directamente el hilo Beacon que llama.registro: nombre de registro opcional para filtrar la salida a un solo registro. Requiere que se especifique tid.Ejemplo:
psi regdump
psi regdump 12345
psi regdump 12345 rip
psi regdump 12345 ymm0
Para compilar un BOF, actualiza el archivo src/hello.cc o el Makefile para reflejar los cambios necesarios y luego escribe:
$ docker-compose up --build
Construido usando la plantilla de: https://github.com/whokilleddb/cs-bof-template
DWORDLPVOIDcantidad: Cuántos bloques leer. Este argumento es opcional y por defecto es uno.