Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
miasm — Python製リバースエンジニアリングフレームワーク | Kitploit
ツール/GitHubGitHub/cea-sec/miasm
静的分析動的分析 (サンドボックス)リバースエンジニアリングデバッガファジングバイナリ解析
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 リトルエンディアン / ビッグエンディアンのオープン・改変・生成
  • 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

シンボリック実行

ツールをダウンロード