
Un BOF conçu pour inspecter la mémoire des processus et les adresses
Un BOF CS qui peut être utilisé pour inspecter la mémoire, les adresses et les symboles d'un processus !
| Commande | Description |
|---|---|
| lm | liste tous les modules chargés avec l'adresse de base, le point d'entrée, et plus encore |
| addr | Affiche les octets à une adresse mémoire donnée |
| meminfo | Affiche des informations pour une adresse mémoire donnée |
| lt | Affiche une liste de tous les threads actifs dans le processus actuel avec quelques informations de base |
| regdump | Affiche le contenu des registres d'un thread |
Envoyez des correctifs! Envoyez des recommandations pour plus de commandes!
La commande lm liste les modules chargés dans le processus actuel. Lorsqu'elle est invoquée sans argument, elle retourne chaque DLL chargée ; lorsqu'un nom de DLL est fourni, elle retourne les détails pour ce module uniquement (adresse de base, point d'entrée, taille, chemin complet).
Syntaxe
psi lm [dll]
Paramètres :
dll (optionnel) : Le nom d'une DLL chargée à rechercher. S'il est omis, chaque module chargé est listé.Exemple :
psi lm
psi lm ntdll.dll
psi lm kernel32.dll
La commande addr retourne la valeur à une adresse donnée.
Syntaxe :
psi addr <address> <type> [count]
address : L'adresse à inspecter en hexadécimaltype : Cela contrôle comment traiter le type de données à l'adresse donnée. Les valeurs valides sont : BYTE, WORD, DWORD, LPVOID. Par conséquent, si un utilisateur fournit une valeur DWORD, alors un bloc de size(DWORD) est lu à cette adresse. Chaque bloc est affiché sous la forme d'une valeur little-endian préfixée par 0x dont la largeur égale la taille du type (par exemple, une ligne WORD groupe comme 0xaabb 0xccdd ...). Les noms de types sont comparés sans tenir compte de la casse. Les alias Win32 de même taille (int, ULONG, ULONG64, HANDLE, etc.) sont intentionnellement omis — utilisez BYTE/WORD// pour des lectures de 1/2/4/8 octets.La sortie doit être un hexdump commençant à l'adresse donnée et les blocs groupés ensemble.
Exemple :
psi addr 0xdeadbeef DWORD 2
psi addr 0xdeadbeef LPVOID
psi addr 0xdeadbeef WORD 8
La commande meminfo retourne diverses informations sur une adresse mémoire donnée, notamment :
Syntaxe :
psi meminfo <address>
address : L'adresse à inspecter en hexadécimalExemple :
psi addr 0xdeadbeef
La commande lt affiche tous les threads du processus actuel avec leur TID et point d'entrée.
Syntaxe
psi lt
La commande regdump déverse les registres CPU d'un thread. L'identifiant du thread (tid) est optionnel : s'il est omis, le thread Beacon appelant est déversé via RtlCaptureContext ; s'il est fourni, ce thread dans le processus actuel est suspendu pendant la durée de l'instantané. Si un nom de registre est fourni, seul ce registre est affiché ; sinon, tous les registres supportés sont déversés, incluant l'ensemble complet des GPR x64 plus RFLAGS, les registres de segment, les registres de débogage, SSE (XMM), AVX/AVX2 (YMM), et AVX-512 (ZMM / kmask) — les trois derniers conditionnés par le support des fonctionnalités CPU de l'hôte. Les noms de registres sont comparés sans tenir compte de la casse et acceptent les alias de sous-largeur (par exemple eax, ax, ah, al se résolvent tous sur le même GPR sous-jacent).
Syntaxe :
psi regdump [tid] [register]
tid : identifiant de thread optionnel dont le contexte est à déverser. S'il est omis, le thread Beacon appelant est capturé directement.register : nom de registre optionnel pour filtrer la sortie sur un seul registre. Nécessite que tid soit spécifié.Exemple :
psi regdump
psi regdump 12345
psi regdump 12345 rip
psi regdump 12345 ymm0
Pour compiler un BOF, mettez à jour le fichier src/hello.cc ou le Makefile pour refléter les changements nécessaires puis tapez :
$ docker-compose up --build
Construit en utilisant le modèle de : https://github.com/whokilleddb/cs-bof-template
DWORDLPVOIDcount : Combien de blocs lire. Cet argument est optionnel et par défaut défini à un.