
BOF, предназначенный для проверки памяти и адресов процессов.
CS BOF, который можно использовать для инспекции памяти процессов, адресов и символов!
| Команда | Описание |
|---|---|
| lm | вывести все загруженные модули вместе с базовым адресом, точкой входа и др. |
| addr | Вывести байты по заданному адресу в памяти |
| meminfo | Вывести информацию о заданном адресе в памяти |
| lt | Вывести список всех активных потоков текущего процесса вместе с базовой информацией |
| regdump | Вывести содержимое регистров потока |
Присылайте патчи! Присылайте рекомендации для новых команд!
Команда lm выводит загруженные модули в текущем процессе. При вызове без аргументов возвращает все загруженные DLL; при указании имени DLL возвращает сведения только о этом модуле (базовый адрес, точка входа, размер, полный путь).
Синтаксис
psi lm [dll]
Параметры:
dll (необязательно): Имя загруженной DLL для поиска. Если опущено, перечисляются все загруженные модули.Пример:
psi lm
psi lm ntdll.dll
psi lm kernel32.dll
Команда addr возвращает значение по заданному адресу.
Синтаксис:
psi addr <address> <type> [count]
address: Адрес для инспекции в шестнадцатеричном формате.type: Управляет типом данных по заданному адресу. Допустимые значения: BYTE, WORD, DWORD, LPVOID. Таким образом, если пользователь указывает значение DWORD, то по адресу читается блок размером size(DWORD). Каждый блок выводится в виде значения с префиксом 0x в little-endian, ширина которого соответствует размеру типа (например, строка для WORD группируется как 0xaabb 0xccdd ...). Имена типов сопоставляются без учёта регистра. Синонимы Win32 того же размера (int, ULONG, ULONG64, HANDLE и т.д.) намеренно опущены — используйте BYTE/WORD/DWORD/ для чтения 1/2/4/8 байт.Вывод представляет собой hexdump, начиная с заданного адреса, с группировкой блоков.
Пример:
psi addr 0xdeadbeef DWORD 2
psi addr 0xdeadbeef LPVOID
psi addr 0xdeadbeef WORD 8
Команда meminfo возвращает различную информацию о заданном адресе памяти, включая:
!address в windbg.Синтаксис:
psi meminfo <address>
address: Адрес для инспекции в шестнадцатеричном формате.Пример:
psi addr 0xdeadbeef
Команда lt выводит все потоки текущего процесса вместе с их TID и точкой входа.
Синтаксис
psi lt
Команда regdump выгружает регистры ЦП для потока. Идентификатор потока (tid) необязателен: если опущен, выгружается вызывающий поток Beacon с помощью RtlCaptureContext; если указан, поток в текущем процессе приостанавливается на время снимка. Если указано имя регистра, выводится только этот регистр; в противном случае выгружаются все поддерживаемые регистры, включая полный набор x64 GPR плюс RFLAGS, сегментные регистры, отладочные регистры, SSE (XMM), AVX/AVX2 (YMM) и AVX-512 (ZMM / kmask) — последние три доступны при поддержке ЦП хоста. Имена регистров сопоставляются без учёта регистра и принимают псевдонимы подмножества разрядности (например, eax, ax, ah, al все ссылаются на один и тот же GPR).
Синтаксис:
psi regdump [tid] [register]
tid: необязательный идентификатор потока, контекст которого нужно выгрузить. Если опущен, вызывающий поток Beacon захватывается напрямую.register: необязательное имя регистра для фильтрации вывода до одного регистра. Требует указания tid.Пример:
psi regdump
psi regdump 12345
psi regdump 12345 rip
psi regdump 12345 ymm0
Чтобы скомпилировать BOF, обновите файл src/hello.cc или Makefile, чтобы отразить необходимые изменения, а затем выполните:
$ docker-compose up --build
Собрано с использованием шаблона от: https://github.com/whokilleddb/cs-bof-template
LPVOIDcount: Количество блоков для чтения. Этот аргумент необязателен и по умолчанию равен единице.