
Un BOF progettato per ispezionare la memoria dei processi e gli indirizzi.
Un BOF per Cobalt Strike che può essere utilizzato per ispezionare la memoria dei processi, gli indirizzi e i simboli!
| Comando | Descrizione |
|---|---|
| lm | elenca tutti i moduli caricati insieme all'indirizzo base, al punto di ingresso e altro |
| addr | Stampa i byte a un dato indirizzo di memoria |
| meminfo | Stampa informazioni per un dato indirizzo di memoria |
| lt | Stampa un elenco di tutti i thread attivi nel processo corrente insieme ad alcune informazioni di base |
| regdump | Stampa il contenuto dei registri di un thread |
Invia patch! Invia suggerimenti per altri comandi!
Il comando lm elenca i moduli caricati nel processo corrente. Quando invocato senza argomenti restituisce ogni DLL caricata; quando viene fornito un nome DLL restituisce i dettagli solo per quel modulo (indirizzo base, punto di ingresso, dimensione, percorso completo).
Sintassi
psi lm [dll]
Parametri:
dll (opzionale): Il nome di una DLL caricata da cercare. Se omesso, viene elencato ogni modulo caricato.Esempio:
psi lm
psi lm ntdll.dll
psi lm kernel32.dll
Il comando addr restituisce il valore a un dato indirizzo
Sintassi:
psi addr <address> <type> [count]
address: L'indirizzo da ispezionare in esadecimaletype: Controlla come trattare il tipo di dato all'indirizzo specificato. I valori validi sono: BYTE, WORD, DWORD, LPVOID. Pertanto, se un utente fornisce un valore DWORD, viene letto un blocco di size(DWORD) a quell'indirizzo. Ogni blocco viene stampato come un valore little-endian con prefisso 0x la cui larghezza equivale alla dimensione del tipo (es. un raggruppamento WORD come 0xaabb 0xccdd ...). I nomi dei tipi vengono confrontati senza distinzione tra maiuscole e minuscole. Gli alias Win32 della stessa dimensione (int, ULONG, ULONG64, HANDLE, ecc.) sono intenzionalmente omessi — usa BYTE/WORD// per letture da 1/2/4/8 byte.L'output dovrebbe essere un hexdump a partire dall'indirizzo specificato con i blocchi raggruppati.
Esempio:
psi addr 0xdeadbeef DWORD 2
psi addr 0xdeadbeef LPVOID
psi addr 0xdeadbeef WORD 8
Il comando meminfo restituisce varie informazioni su un dato indirizzo di memoria, tra cui:
Sintassi:
psi meminfo <address>
address: L'indirizzo da ispezionare in esadecimaleEsempio:
psi addr 0xdeadbeef
Il comando lt stampa tutti i thread del processo corrente insieme al loro TID e punto di ingresso
Sintassi
psi lt
Il comando regdump scarica i registri della CPU per un thread. L'id del thread (tid) è opzionale: se omesso, viene scaricato il thread chiamante di Beacon tramite RtlCaptureContext; se fornito, quel thread nel processo corrente viene sospeso per la durata dello snapshot. Se viene fornito un nome di registro, viene stampato solo quel registro; altrimenti vengono scaricati tutti i registri supportati, inclusi il set completo GPR x64 più RFLAGS, registri di segmento, registri di debug, SSE (XMM), AVX/AVX2 (YMM) e AVX-512 (ZMM / kmask) — gli ultimi tre soggetti al supporto delle funzionalità CPU dell'host. I nomi dei registri vengono confrontati senza distinzione tra maiuscole e minuscole e accettano alias di larghezza inferiore (es. eax, ax, ah, al risolvono tutti allo stesso GPR sottostante).
Sintassi:
psi regdump [tid] [register]
tid: id del thread opzionale di cui scaricare il contesto. Se omesso, il thread chiamante di Beacon viene catturato direttamente.register: nome del registro opzionale per filtrare l'output a un singolo registro. Richiede che tid sia specificato.Esempio:
psi regdump
psi regdump 12345
psi regdump 12345 rip
psi regdump 12345 ymm0
Per compilare un BOF, aggiorna il file src/hello.cc o il Makefile per riflettere le modifiche necessarie e quindi digita:
$ docker-compose up --build
Realizzato utilizzando il template da: https://github.com/whokilleddb/cs-bof-template
DWORDLPVOIDcount: Quanti blocchi leggere. Questo argomento è opzionale e di default è impostato a uno.