Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
mmiotic — Raio-x de latência para hardware não documentado | Kitploit
Ferramentas/GitHubGitHub/xoreaxeaxeax/mmiotic
ReconhecimentoEngenharia ReversaColeta de InformaçõesHacking de HardwareSegurança de Hardware
GitHubxoreaxeaxeax/mmiotic

mmiotic

Raio-x de latência para hardware não documentado

Ver Repositório
144929há 2 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

mmiotic

Uma ferramenta exploratória para temporização de MMIO — meça o tempo de qualquer endereço físico e disseque o hardware a partir da latência.

MMIO latency heatmap

Surpreendentemente útil para engenharia reversa de hardware, impressão digital de hipervisores, atividade de dispositivos por canal lateral, caracterização de registradores, calibração de gatilhos maliciosos e criação de instruções de máquina absurdamente longas.

Exemplos

Engenharia reversa de faixas de memória

O primeiro megabyte de memória física é um exemplo fácil para começar, mesmo que sua estrutura já seja bem conhecida.

first megabyte heatmap

As fronteiras de latência nos permitem dividir o espaço de endereçamento sem depender de layouts reportados.

  1. Comece com um simples scan de latência: sudo ./mmiotic --start-address 0x0 --end-address 0x100000 --stride 4 --count 20 --quiet-mmap
  2. A latência cai nas fronteiras clássicas — DRAM até 0x9FFFF a ~380 cy, depois o buraco de vídeo de 128 KB, que se divide em dois em 0xB0000. A mudança na variância em 0x20000 pode indicar um page walk diferente para a página nula.
  3. A0000–AFFFF: lento e instável (996 cy, stdev 327), roteado para a Radeon ligada mas ociosa. B0000–BFFFF: rápido e rígido (780 cy, stdev 3.2, lê ffffffff), reivindicado por ninguém. Dados de aparência semelhante, mas uma diferença de 100x na variância.
  4. C0000–FFFFF: /proc/iomem diz "System ROM", mas o scan mostra latência de DRAM, não velocidade de flash — a BIOS é espelhada na DRAM.

Registros de mailbox não documentados

Faça um scan do espaço de configuração do root complex (00:00.0, 4 KB) em busca de outliers de latência contra um piso plano de ~675 ciclos:

mailbox register heatmap

A latência do mailbox é significativamente maior do que os dados ao redor, e os picos duplicados e as variâncias equivalentes nos permitem associar registradores funcionalmente semelhantes.

  1. Faça um scan do espaço de configuração do root complex: sudo ./mmiotic --start-address 0xf8000000 --end-address 0xf8001000 --stride 4 --count 200
  2. Duas dwords são os outliers: offset 0xe4 (1218 cy, valor 80e3110b) e 0xa4 (1199 cy, valor deadbeef). e4 é um doorbell documentado; a4 não é documentado.
  3. Latência quase idêntica, separados por 0x40, ambos muito acima do piso — uma família de registradores alcançando o mesmo alvo fora do die, da qual apenas e4 é público.
  4. Os valores diferem: deadbeef é lido como um sentinela de não inicializado/erro — mesmo mailbox, a4 não implementado ou alimentado com entrada inválida.

Calibração de interrupções

Latências cuidadosamente selecionadas às vezes podem ser usadas em cenários incomuns de exploração (MCHAMMER, smiiiiiiiiiiiiiiii):

interrupt calibration heatmap

Aqui, uma Radeon ociosa e sem driver transforma uma leitura alinhada de 4 bytes em uma parada de ~100.000 ciclos.

  1. sudo ./mmiotic --start-address 0x90e00000 --end-address 0x90e00100 --stride 4 --count 50 — varra o início do BAR da GPU (0x90e00000, 256 KB). 0x90e00008 custa 110.152 cy; 0x90e00018, 16 bytes adiante, volta a ser rápido a 1.523 — por registrador, não por página.
  2. sudo ./mmiotic --start-address 0x90e00000 --end-address 0x90e40000 --stride 4 --count 1 --binary — --binary sonda em ordem de inversão de bits, então toda a janela de 256 KB é coberta uniformemente após 1.012 sondas, mapeando um bloco contíguo de 48 KB onde todo registrador é lento.
  3. Provavelmente, a latência se deve a uma ida e volta ao SMU para reativar um domínio com clock/energia desligados — então o mapa de latência extrai o layout de energia da GPU, sem necessidade de driver ou datasheet.

Espreitada assassina

Idealmente, ler um endereço físico seria uma operação relativamente segura, mas mmiotic é especialmente bom em encontrar acidentalmente as exceções:

killer peek heatmap

Por exemplo, na plataforma acima, uma leitura de 1 byte de 0xdc5003b0 — offset 0x3b0 de um BAR de registradores de iGPU Zen 4 sem driver (Região 5, 0xdc500000, 512 KB) — reinicia o sistema de forma confiável.

  1. sudo ./mmiotic --address 0xdc5003b0 --size 1 --count 1. Sem saída; a máquina reinicia.
  2. Exatamente uma dword: 0x3ac e 0x3b4 em ambos os lados leem 00000000 a ~3.200 cy e são inofensivos.
  3. Uma varredura dword a dword de 0x3a0–0x3fc encontra 7 dwords venenosas intercaladas com 17 seguras.
  4. sudo busybox devmem 0xdc5003b0 32 e sudo dd if=/dev/mem bs=1 count=1 skip=$((0xdc5003b0)) derrubam a máquina se você preferir pular o intermediário.

Uso

[!WARNING] Algumas plataformas serão reiniciadas quando regiões de endereço específicas forem sondadas pelo mmiotic. Tenha cuidado onde você usa isso.

Alvo

OpçãoNomes
-b/-d/-f/-rPCI --bus/--device/--function/--register — decodificados com base no ECAM
-o, --offset <n>offset a partir da base MMIO (ignora a decodificação B/D/F)
-A, --address <n>um endereço físico; define a base da região implicitamente
-a/-z--start-address/--end-address — uma faixa física; implica --scan

A base e o tamanho do ECAM são detectados automaticamente a partir do ACPI MCFG (/sys/firmware/acpi/tables/MCFG). Substitua com -M, --mmio-base / -Z, --mmio-size.

Varredura

OpçãoEfeito
-S, --scanpercorre todos os endereços na região alvo
-t, --stride <n>passo entre endereços (padrão: 4)
-n, --limit <n>parar após este número de endereços
--binarysonda em ordem de inversão de bits — após k sondas a faixa tem cobertura uniforme com granularidade de ~range/k (veja o aviso acima)
-x, --limitedfaixa de registradores limitada (0x00–0xff vs 0x000–0xfff)
-e, --skippula funções que leem 0xffffffff no offset 0 (dispositivos ausentes)
-I, --iomemescaneia todas as regiões de nível superior não–System-RAM em /proc/iomem
-R, --ioregion <name>escaneia regiões de /proc/iomem cujo rótulo corresponde a <name>, em qualquer profundidade

--find-target/--find-longest transformam a varredura em busca:

OpçãoEfeito
-F, --find-target <s>encontra um endereço cujo tempo de acesso atinja s segundos e então aumenta a largura (4b não alinhado → 8/16/32/64/512b) para elevá-lo ainda mais
-G, --find-longestmesma busca, mas esgota todos os candidatos em vez de parar no primeiro resultado
-B, --fallbacks <n>candidatos levados para a fase de escalada (padrão: 10)

Método de acesso

Baixar ferramenta