Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
miasm — Python 기반 리버스 엔지니어링 프레임워크 | Kitploit
도구/GitHubGitHub/cea-sec/miasm
Static AnalysisDynamic Analysis (Sandboxing)Reverse EngineeringDebuggersFuzzingBinary Analysis
GitHubcea-sec/miasm

miasm

Python 기반 리버스 엔지니어링 프레임워크

저장소 보기
3.9k489228일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
웹사이트
공유

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

Miasm이란?

Miasm은 무료 오픈소스(GPLv2) 리버스 엔지니어링 프레임워크입니다. Miasm은 바이너리 프로그램을 분석/수정/생성하는 것을 목표로 합니다. 다음은 일부 기능 목록입니다:

  • PE / ELF 32 / 64 LE / BE 열기/수정/생성
  • X86 / ARM / MIPS / SH4 / MSP430 어셈블/디스어셈블
  • 중간 언어를 사용하여 어셈블리 의미 표현
  • JIT를 사용한 에뮬레이션 (동적 코드 분석, 언패킹 등)
  • 자동 난독화 해제를 위한 표현식 단순화
  • ...

더 많은 예제와 데모는 공식 블로그를 참조하세요.

목차

  • Miasm이란?
  • 기본 예제
    • 어셈블 / 디스어셈블
    • 중간 표현
    • 에뮬레이션
    • 기호 실행
  • 어떻게 작동하나?
  • 문서
  • Miasm 얻기
    • 소프트웨어 요구사항
    • 설정
    • Windows 및 IDA
  • 테스트
  • 이미 Miasm을 사용하는 곳
  • 기타

기본 예제

어셈블 / 디스어셈블

Miasm x86 아키텍처 가져오기:```pycon

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

위치 db 가져오기:```pycon
>>> loc_db = LocationDB()

한 줄을 조립하세요:```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']

피연산자 수정:```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']

결과를 디스어셈블하십시오:```pycon

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

`Machine` 추상화 사용:```pycon
>>> from miasm.analysis.machine import Machine
>>> mn = Machine('x86_32').mn
>>> print(mn.dis('\x33\x30', 32))
XOR        ESI, DWORD PTR [EAX]

MIPS의 경우:```pycon

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

중간 표현
---------------------------

명령어 생성:```pycon
>>> machine = Machine('arml')
>>> instr = machine.mn.dis('\x00 \x88\xe0', 'l')
>>> print(instr)
ADD        R2, R8, R0

중간 표현 객체를 생성하세요:```pycon

lifter = machine.lifter_model_call(loc_db)

빈 ircfg 생성:```pycon
>>> ircfg = lifter.new_ircfg()

풀에 명령어를 추가하세요:```pycon

lifter.add_instr_to_ircfg(instr, ircfg)

현재 풀 출력:```pycon
>>> for lbl, irblock in ircfg.blocks.items():
...     print(irblock)
loc_0:
R2 = R8 + R0

IRDst = loc_4

IR 작업 시, 예를 들어 부작용을 얻는 경우:```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

Miasm IR에 대한 자세한 정보는 [해당 Jupyter Notebook](https://github.com/cea-sec/miasm/blob/master/doc/expression/expression.ipynb)을 참고하세요.

에뮬레이션
---------

쉘코드를 제공하는 경우:```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'

Container 추상화 덕분에 셸코드를 임포트합니다:```pycon

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

주소 `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

JIT 엔진을 스택으로 초기화하는 중:```pycon

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

임의의 메모리 위치에 셸코드를 추가합니다:```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)

센티넬을 생성하여 셸코드의 반환을 포착합니다:```Python def code_sentinelle(jitter): jitter.running = False jitter.pc = 0 return True

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

활성 로그:```pycon
>>> jitter.set_trace_log()

임의의 주소에서 실행:```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

jitter와 상호 작용:```pycon
>>> jitter.vm
ad 1230000 size 10000 RW_ hpad 0x2854b40
ad 40000000 size 16 RW_ hpad 0x25e0ed0

>>> hex(jitter.cpu.EAX)
'0x0L'
>>> jitter.cpu.ESI = 12

심볼릭 실행

도구 다운로드