تخطَّ إلى المحتوى

Miasm - Cheatsheet إطار عمل الهندسة العكسية

Miasm - Cheatsheet إطار عمل الهندسة العكسية

Miasm هو إطار عمل Python مجاني ومفتوح المصدر لتحليل وإنشاء ومعالجة الملفات الثنائية. يمكنه فك التجميع عبر معماريات عديدة (x86/x64 و ARM و MIPS و PPC وغيرها)، ورفع الكود إلى تمثيل وسيط (IR) خاص به، محاكاة التنفيذ مع JIT، والتنفيذ الرمزي لإزالة الالتباس وحل القيود. إنه مجموعة أدوات برمجية — تقودها من Python — مما يجعلها قوية لأتمتة الهندسة العكسية ومهام إلغاء الحماية التي لا تستطيع أدوات الواجهة الرسومية القيام بها بسهولة.

التثبيت

الطريقةالأمر
pippip install miasm
من المصدرgit clone https://github.com/cea-sec/miasm && cd miasm && pip install -e .
JIT اختياري (LLVM)pip install llvmlite (محرك محاكاة أسرع)
Dockerdocker build -t miasm . من المستودع
تحققpython -c "import miasm; print('ok')"

الوحدات الأساسية

الوحدةالغرض
miasm.analysis.binaryتحميل حاوية ثنائية (ELF/PE/raw)
miasm.analysis.machineتجريد العمارة (Machine("x86_64"))
miasm.core.locationdbتتبع العناوين/الملصقات عبر التحليل
miasm.irالتمثيل الوسيط للتعليمات
miasm.analysis.dseمحرك التنفيذ الرمزي الديناميكي
miasm.jitterمحرك المحاكاة/JIT

فك التجميع

from miasm.analysis.binary import Container
from miasm.analysis.machine import Machine
from miasm.core.locationdb import LocationDB

loc_db = LocationDB()
cont = Container.from_stream(open("target.bin", "rb"), loc_db)
machine = Machine(cont.arch)

mdis = machine.dis_engine(cont.bin_stream, loc_db=loc_db)
asmcfg = mdis.dis_multiblock(cont.entry_point)   # فك التجميع العودي → CFG
for block in asmcfg.blocks:
    print(block)
اتصلالوصف
mdis.dis_block(addr)فك تجميع كتلة أساسية واحدة
mdis.dis_multiblock(addr)فك التجميع العودي إلى CFG
asmcfg.blocksكتل أساسية متكررة
asmcfg.dot()تصدير رسم بياني تدفق التحكم إلى Graphviz

التمثيل الوسيط (IR)

lifter = machine.lifter_model_call(mdis.loc_db)
ircfg = lifter.new_ircfg_from_asmcfg(asmcfg)
for lbl, irblock in ircfg.blocks.items():
    print(irblock)

يقيس IR التعليمات الخاصة بالعمارة إلى لغة صغيرة من نوع محدد، وهذا بالضبط ما يجعل التحليل متعدد الهياكل والمنطق الرمزي ممكنًا.

المحاكاة (Jitter)

from miasm.analysis.machine import Machine
jitter = Machine("x86_64").jitter("llvm")   # أو "python" أو "gcc"
jitter.init_stack()
# خريطة الكود وتعيين السجلات ثم:
jitter.run(0x401000)
الخادمالمقايضة
pythonمحمول وأبطأ
gccأسرع ويتطلب المترجم
llvmالأسرع ويتطلب llvmlite
الميزةالاستخدام
add_breakpoint(addr, cb)قم بتشغيل رد نداء Python بعنوان
vm.set_mem(addr, data)اكتب الذاكرة قبل التشغيل
استدعاءات النظام/واجهات برمجية مخصصةاستدعاء مكتبة hook أثناء المحاكاة

التنفيذ الرمزي

from miasm.ir.symbexec import SymbolicExecutionEngine
sb = SymbolicExecutionEngine(lifter)
symbolic_pc = sb.run_at(ircfg, 0x401000)
print(sb.symbols)        # حالة السجل/الذاكرة الرمزية

التنفيذ الرمزي هو أساس إزالة الالتباس وحل المدخلات وتبسيط الخردة/المسندات المعتمة.

سير العمل الشائع

الهدفالنهج
تصدير CFG للعرضasmcfg.dot() → العرض مع Graphviz
إلغاء الحماية/إزالة الالتباسمحاكاة مع jitter وتفريغ الذاكرة في OEP
حل للمدخلالتنفيذ الرمزي + حل SMT (z3)
التحليل متعدد الهياكلرفع إلى IR وتشغيل نفس الممرات بغض النظر عن الهيكل

Miasm مقابل أطر عمل RE الأخرى

الجانبMiasmangrGhidra
اللغةPythonPythonJava/GUI
IRIR خاصVEXP-code
المحاكاةJIT مدمجUnicorn-basedAPI Emulator
التنفيذ الرمزينعمنعم (نقطة قوة أساسية)محدود
الأفضل لـالتحليل المرتجل وإزالة الالتباسالرمزي/CTFRE التفاعلية

الموارد