
Um BOF projetado para inspecionar a memória e endereços de processos.
Um BOF do CS que pode ser usado para inspecionar a memória, endereços e símbolos de processos!
| Comando | Descrição |
|---|---|
| lm | lista todos os módulos carregados junto com endereço base, ponto de entrada e mais |
| addr | Imprime os bytes em um dado endereço de memória |
| meminfo | Imprime informações para um dado endereço de memória |
| lt | Imprime uma lista de todas as threads ativas no processo atual junto com algumas informações básicas |
| regdump | Imprime o conteúdo dos registradores de uma thread |
Envie patches! Envie recomendações para mais comandos!
O comando lm lista os módulos carregados no processo atual. Quando invocado sem argumentos, retorna todas as DLLs carregadas; quando dado um nome de DLL, retorna detalhes apenas para aquele módulo (endereço base, ponto de entrada, tamanho, caminho completo).
Sintaxe
psi lm [dll]
Parâmetros:
dll (opcional): O nome de uma DLL carregada para consultar. Se omitido, todos os módulos carregados são listados.Exemplo:
psi lm
psi lm ntdll.dll
psi lm kernel32.dll
O comando addr retorna o valor em um determinado endereço
Sintaxe:
psi addr <address> <type> [count]
address: O endereço a inspecionar em hexadecimaltype: Controla como tratar o tipo de dados no endereço fornecido. Valores válidos são: BYTE, WORD, DWORD, LPVOID. Portanto, se um usuário fornecer um valor DWORD, um bloco de size(DWORD) é lido naquele endereço. Cada bloco é impresso como um valor little-endian prefixado com 0x cuja largura é igual ao tamanho do tipo (ex.: uma linha WORD agrupa como 0xaabb 0xccdd ...). Nomes de tipos são correspondidos sem distinção entre maiúsculas/minúsculas. Aliases Win32 de mesmo tamanho (int, ULONG, ULONG64, HANDLE, etc.) são intencionalmente omitidos — use BYTE/WORD/DWORD/ para leituras de 1/2/4/8 bytes.A saída deve ser um hexdump começando no endereço fornecido e blocos agrupados
Exemplo:
psi addr 0xdeadbeef DWORD 2
psi addr 0xdeadbeef LPVOID
psi addr 0xdeadbeef WORD 8
O comando meminfo retorna várias informações sobre um determinado endereço de memória, incluindo:
Sintaxe:
psi meminfo <address>
address: O endereço a inspecionar em hexadecimalExemplo:
psi addr 0xdeadbeef
O comando lt imprime todas as threads do processo atual junto com seus TIDs e pontos de entrada
Sintaxe
psi lt
O comando regdump despeja os registradores da CPU de uma thread. O id da thread (tid) é opcional: se omitido, a thread do Beacon chamadora é despejada via RtlCaptureContext; se fornecido, essa thread no processo atual é suspensa durante a duração do snapshot. Se um nome de registrador é fornecido, apenas esse registrador é impresso; caso contrário, todo registrador suportado é despejado, incluindo o conjunto completo de GPR x64 mais RFLAGS, registradores de segmento, registradores de depuração, SSE (XMM), AVX/AVX2 (YMM) e AVX-512 (ZMM / kmask) — os últimos três condicionados ao suporte de recursos da CPU do host. Nomes de registradores são correspondidos sem distinção entre maiúsculas/minúsculas e aceitam aliases de sub-largura (ex.: eax, ax, ah, al todos resolvem para o mesmo GPR subjacente).
Sintaxe:
psi regdump [tid] [register]
tid: id opcional da thread cujo contexto será despejado. Se omitido, a thread do Beacon chamadora é capturada diretamente.register: nome opcional do registrador para filtrar a saída para um único registrador. Requer que tid seja especificado.Exemplo:
psi regdump
psi regdump 12345
psi regdump 12345 rip
psi regdump 12345 ymm0
Para compilar um BOF, atualize o arquivo src/hello.cc ou o Makefile para refletir as alterações necessárias e então digite:
$ docker-compose up --build
Construído usando o template de: https://github.com/whokilleddb/cs-bof-template
LPVOIDcount: Quantos blocos ler. Este argumento é opcional e por padrão definido como um