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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
miasm — Framework de engenharia reversa em Python | Kitploit
Ferramentas/GitHubGitHub/cea-sec/miasm
Análise EstáticaAnálise Dinâmica (Sandboxing)Engenharia ReversaDepuradoresFuzzingAnálise de Binários
GitHubcea-sec/miasm

miasm

Framework de engenharia reversa em Python

Ver Repositório
3.9k48921há 8 diasRevisado 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 →
Site
Compartilhar

Build Status Build status Miasm tests Code Climate Join the chat at https://gitter.im/cea-sec/miasm

O que é o Miasm?

Miasm é um framework de engenharia reversa gratuito e de código aberto (GPLv2). O Miasm visa analisar / modificar / gerar programas binários. Aqui está uma lista não exaustiva de funcionalidades:

  • Abrir / modificar / gerar PE / ELF 32 / 64 LE / BE
  • Montar / Desmontar X86 / ARM / MIPS / SH4 / MSP430
  • Representar semântica de montagem usando linguagem intermediária
  • Emular usando JIT (análise dinâmica de código, unpacking, ...)
  • Simplificação de expressão para desofuscação automática
  • ...

Veja o blog oficial para mais exemplos e demonstrações.

Índice

  • O que é o Miasm?
  • Exemplos básicos
    • Montagem / Desmontagem
    • Representação intermediária
    • Emulação
    • Execução simbólica
  • Como funciona?
  • Documentação
  • Obtendo o Miasm
    • Requisitos de software
    • Configuração
    • Windows e IDA
  • Testes
  • Eles já usam o Miasm
  • Diversos

Exemplos básicos

Montagem / Desmontagem

Importar arquitetura x86 do Miasm:```pycon

from miasm.arch.x86.arch import mn_x86 from miasm.core.locationdb import LocationDB

Obter um banco de dados de localização:```pycon
>>> loc_db = LocationDB()

Monte uma linha:```pycon

l = mn_x86.fromstring('XOR ECX, ECX', loc_db, 32) print(l) XOR ECX, ECX mn_x86.asm(l) ['1\xc9', '3\xc9', 'g1\xc9', 'g3\xc9']

Modificar um operando:```pycon
>>> l.args[0] = mn_x86.regs.EAX
>>> print(l)
XOR        EAX, ECX
>>> a = mn_x86.asm(l)
>>> print(a)
['1\xc8', '3\xc1', 'g1\xc8', 'g3\xc1']

Desmonte o resultado:```pycon

print(mn_x86.dis(a[0], 32)) XOR EAX, ECX

Usando abstração `Machine`:```pycon
>>> from miasm.analysis.machine import Machine
>>> mn = Machine('x86_32').mn
>>> print(mn.dis('\x33\x30', 32))
XOR        ESI, DWORD PTR [EAX]

Para MIPS:```pycon

mn = Machine('mips32b').mn print(mn.dis(b'\x97\xa3\x00 ', "b")) LHU V1, 0x20(SP)

Representação intermediária
---------------------------

Criar uma instrução:```pycon
>>> machine = Machine('arml')
>>> instr = machine.mn.dis('\x00 \x88\xe0', 'l')
>>> print(instr)
ADD        R2, R8, R0

Crie um objeto de representação intermediária:```pycon

lifter = machine.lifter_model_call(loc_db)

Crie um ircfg vazio:```pycon
>>> ircfg = lifter.new_ircfg()

Adicionar instrução ao pool:```pycon

lifter.add_instr_to_ircfg(instr, ircfg)

Exibir pool atual:```pycon
>>> for lbl, irblock in ircfg.blocks.items():
...     print(irblock)
loc_0:
R2 = R8 + R0

IRDst = loc_4

Trabalhando com IR, por exemplo obtendo efeitos colaterais:```pycon

for lbl, irblock in ircfg.blocks.items(): ... for assignblk in irblock: ... rw = assignblk.get_rw() ... for dst, reads in rw.items(): ... print('read: ', [str(x) for x in reads]) ... print('written:', dst) ... print() ... read: ['R8', 'R0'] written: R2

read: [] written: IRDst

Mais informações sobre o Miasm IR estão no [Jupyter Notebook correspondente](https://github.com/cea-sec/miasm/blob/master/doc/expression/expression.ipynb).

Emulação
---------```pycon
00000000 8d4904      lea    ecx, [ecx+0x4]
00000003 8d5b01      lea    ebx, [ebx+0x1]
00000006 80f901      cmp    cl, 0x1
00000009 7405        jz     0x10
0000000b 8d5bff      lea    ebx, [ebx-1]
0000000e eb03        jmp    0x13
00000010 8d5b01      lea    ebx, [ebx+0x1]
00000013 89d8        mov    eax, ebx
00000015 c3          ret
>>> s = b'\x8dI\x04\x8d[\x01\x80\xf9\x01t\x05\x8d[\xff\xeb\x03\x8d[\x01\x89\xd8\xc3'

Importe o shellcode graças à abstração Container:```pycon

from miasm.analysis.binary import Container c = Container.from_string(s, loc_db) c <miasm.analysis.binary.ContainerUnknown object at 0x7f34cefe6090>

Desmontando o shellcode no endereço `0`:```pycon
>>> from miasm.analysis.machine import Machine
>>> machine = Machine('x86_32')
>>> mdis = machine.dis_engine(c.bin_stream, loc_db=loc_db)
>>> asmcfg = mdis.dis_multiblock(0)
>>> for block in asmcfg.blocks:
...  print(block)
...
loc_0
LEA        ECX, DWORD PTR [ECX + 0x4]
LEA        EBX, DWORD PTR [EBX + 0x1]
CMP        CL, 0x1
JZ         loc_10
->      c_next:loc_b    c_to:loc_10
loc_10
LEA        EBX, DWORD PTR [EBX + 0x1]
->      c_next:loc_13
loc_b
LEA        EBX, DWORD PTR [EBX + 0xFFFFFFFF]
JMP        loc_13
->      c_to:loc_13
loc_13
MOV        EAX, EBX
RET

Inicializando o mecanismo JIT com uma pilha:```pycon

jitter = machine.jitter(loc_db, jit_type='python') jitter.init_stack()

Adicione o shellcode em um local de memória arbitrário:```pycon
>>> run_addr = 0x40000000
>>> from miasm.jitter.csts import PAGE_READ, PAGE_WRITE
>>> jitter.vm.add_memory_page(run_addr, PAGE_READ | PAGE_WRITE, s)

Crie uma sentinelle para capturar o retorno do shellcode:```Python def code_sentinelle(jitter): jitter.running = False jitter.pc = 0 return True

jitter.add_breakpoint(0x1337beef, code_sentinelle) jitter.push_uint32_t(0x1337beef)

Registos ativos:```pycon
>>> jitter.set_trace_log()

Executar em endereço arbitrário:```pycon

jitter.init_run(run_addr) jitter.continue_run() RAX 0000000000000000 RBX 0000000000000000 RCX 0000000000000000 RDX 0000000000000000 RSI 0000000000000000 RDI 0000000000000000 RSP 000000000123FFF8 RBP 0000000000000000 zf 0000000000000000 nf 0000000000000000 of 0000000000000000 cf 0000000000000000 RIP 0000000040000000 40000000 LEA ECX, DWORD PTR [ECX+0x4] RAX 0000000000000000 RBX 0000000000000000 RCX 0000000000000004 RDX 0000000000000000 RSI 0000000000000000 RDI 0000000000000000 RSP 000000000123FFF8 RBP 0000000000000000 zf 0000000000000000 nf 0000000000000000 of 0000000000000000 cf 0000000000000000 .... 4000000e JMP loc_0000000040000013:0x40000013 RAX 0000000000000000 RBX 0000000000000000 RCX 0000000000000004 RDX 0000000000000000 RSI 0000000000000000 RDI 0000000000000000 RSP 000000000123FFF8 RBP 0000000000000000 zf 0000000000000000 nf 0000000000000000 of 0000000000000000 cf 0000000000000000 RIP 0000000040000013 40000013 MOV EAX, EBX RAX 0000000000000000 RBX 0000000000000000 RCX 0000000000000004 RDX 0000000000000000 RSI 0000000000000000 RDI 0000000000000000 RSP 000000000123FFF8 RBP 0000000000000000 zf 0000000000000000 nf 0000000000000000 of 0000000000000000 cf 0000000000000000 RIP 0000000040000013 40000015 RET

Interagindo com o jitter:```pycon
>>> jitter.vm
ad 1230000 size 10000 RW_ hpad 0x2854b40
ad 40000000 size 16 RW_ hpad 0x25e0ed0
Baixar ferramenta