
Ein BOF, der entwickelt wurde, um Arbeitsspeicher und Adressen von Prozessen zu inspizieren.
Ein CS BOF, mit dem Prozessspeicher, Adressen und Symbole inspiziert werden können!
| Befehl | Beschreibung |
|---|---|
| lm | listet alle geladenen Module zusammen mit Basisadresse, Einstiegspunkt und mehr |
| addr | Gibt die Bytes an einer gegebenen Speicheradresse aus |
| meminfo | Gibt Informationen zu einer gegebenen Speicheradresse aus |
| lt | Gibt eine Liste aller aktiven Threads im aktuellen Prozess zusammen mit grundlegenden Informationen aus |
| regdump | Gibt den Inhalt der Register eines Threads aus |
Senden Sie Patches! Senden Sie Empfehlungen für weitere Befehle!
Der Befehl lm listet die geladenen Module im aktuellen Prozess auf. Ohne Argumente aufgerufen, gibt er jede geladene DLL zurück; bei Angabe eines DLL-Namens gibt er Details zu genau diesem Modul zurück (Basisadresse, Einstiegspunkt, Größe, vollständiger Pfad).
Syntax
psi lm [dll]
Parameter:
dll (optional): Der Name einer geladenen DLL, die nachgeschlagen werden soll. Wenn nicht angegeben, wird jedes geladene Modul aufgelistet.Beispiel:
psi lm
psi lm ntdll.dll
psi lm kernel32.dll
Der Befehl addr gibt den Wert an einer gegebenen Adresse zurück.
Syntax:
psi addr <address> <type> [count]
address: Die zu inspizierende Adresse in Hexadezimaltype: Dies steuert, wie der Datentyp an der gegebenen Adresse behandelt wird. Gültige Werte sind: BYTE, WORD, DWORD, LPVOID. Wenn ein Benutzer also einen Wert DWORD angibt, wird an dieser Adresse ein Block der Größe size(DWORD) gelesen. Jeder Block wird als Little-Endian-Wert mit 0x-Präfix ausgegeben, dessen Breite der Typgröße entspricht (z. B. eine WORD-Zeile gruppiert als 0xaabb 0xccdd ...). Typnamen werden ohne Berücksichtigung der Groß-/Kleinschreibung abgeglichen. Gleichgroße Win32-Aliasnamen (int, ULONG, ULONG64, HANDLE, usw.) werden absichtlich weggelassen – verwenden Sie BYTE/WORD// für 1/2/4/8-Byte-Lesevorgänge.Die Ausgabe sollte ein Hexdump sein, der an der angegebenen Adresse beginnt und Blöcke gruppiert.
Beispiel:
psi addr 0xdeadbeef DWORD 2
psi addr 0xdeadbeef LPVOID
psi addr 0xdeadbeef WORD 8
Der Befehl meminfo gibt verschiedene Informationen zu einer gegebenen Speicheradresse zurück, darunter:
Syntax:
psi meminfo <address>
address: Die zu inspizierende Adresse in HexadezimalBeispiel:
psi addr 0xdeadbeef
Der Befehl lt gibt alle Threads des aktuellen Prozesses zusammen mit ihrer TID und ihrem Einstiegspunkt aus.
Syntax
psi lt
Der Befehl regdump gibt die CPU-Register eines Threads aus. Die Thread-ID (tid) ist optional: Wenn nicht angegeben, wird der aufrufende Beacon-Thread mittels RtlCaptureContext ausgegeben; wenn angegeben, wird dieser Thread im aktuellen Prozess für die Dauer des Snapshots angehalten. Wenn ein Registername angegeben wird, wird nur dieses Register ausgegeben; andernfalls werden alle unterstützten Register ausgegeben, einschließlich des vollständigen x64 GPR-Satzes sowie RFLAGS, Segmentregister, Debugregister, SSE (XMM), AVX/AVX2 (YMM) und AVX-512 (ZMM / kmask) – die letzten drei abhängig von der CPU-Feature-Unterstützung des Hosts. Registernamen werden ohne Berücksichtigung der Groß-/Kleinschreibung abgeglichen und akzeptieren Subwidth-Aliasnamen (z. B. eax, ax, ah, al lösen alle den gleichen zugrunde liegenden GPR auf).
Syntax:
psi regdump [tid] [register]
tid: optionale Thread-ID, dessen Kontext ausgegeben werden soll. Wenn nicht angegeben, wird der aufrufende Beacon-Thread direkt erfasst.register: optionaler Registername, um die Ausgabe auf ein einzelnes Register zu filtern. Erfordert die Angabe von tid.Beispiel:
psi regdump
psi regdump 12345
psi regdump 12345 rip
psi regdump 12345 ymm0
Um ein BOF zu kompilieren, aktualisieren Sie die Datei src/hello.cc oder das Makefile, um die erforderlichen Änderungen widerzuspiegeln, und geben Sie dann ein:
$ docker-compose up --build
Erstellt mit der Vorlage von: https://github.com/whokilleddb/cs-bof-template
DWORDLPVOIDcount: Wie viele Blöcke gelesen werden sollen. Dieses Argument ist optional und standardmäßig auf eins gesetzt.