
qiling v1.4.11
إطار محاكاة ثنائي حقيقي قابل للبرمجة
حالات استخدام Qiling والمدونة والأعمال ذات الصلة
Qiling هو إطار محاكاة ثنائية متقدم، مع الميزات التالية:
- محاكاة منصات متعددة: Windows, macOS, Linux, Android, BSD, UEFI, DOS, MBR.
- محاكاة معماريات متعددة: 8086, X86, X86_64, ARM, ARM64, MIPS, RISC-V, PowerPC.
- دعم تنسيقات ملفات متعددة: PE, Mach-O, ELF, COM, MBR.
- دعم برامج تشغيل Windows (.sys) ووحدات نواة Linux (.ko) ونواة macOS (.kext) عبر Demigod.
- محاكاة وتشغيل الكود في بيئة معزولة (sandbox).
- يوفر صندوق رمل قابل للتكوين بالكامل.
- يوفر واجهات برمجة تطبيقات عميقة للذاكرة والسجلات ومستوى نظام التشغيل ونظام الملفات.
- مراقبة دقيقة الحبيبات: تسمح بالخطافات (hooks) على مستويات مختلفة (تعليمات/كتلة أساسية/وصول للذاكرة/استثناء/استدعاء نظام/إدخال-إخراج/إلخ).
- يوفر واجهة برمجة تطبيقات على مستوى الآلة الافتراضية مثل حفظ واستعادة حالة التنفيذ الحالية.
- يدعم قدرات التصحيح عبر المعماريات والمنصات.
- مصحح مدمج مع إمكانية التصحيح العكسي.
- يسمح بالتعديل الديناميكي للكود الجاري تشغيله، بما في ذلك المكتبات المحملة.
- إطار عمل حقيقي بلغة Python، مما يسهل بناء أدوات تحليل أمنية مخصصة فوقه.
كما ظهر Qiling في العديد من المؤتمرات الدولية.
2022:
2021:
2020:
- Black Hat, Europe
- Black Hat, USA
- Black Hat, USA (Demigod)
- Black Hat, Asia
- Hack In The Box, Lockdown 001
- Hack In The Box, Lockdown 002
- Hack In The Box, Cyberweek
- Nullcon
2019:
Qiling مدعوم من محرك Unicorn.
قم بزيارة موقعنا لمزيد من المعلومات.
الترخيص
هذا البرنامج هو برنامج حر؛ يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة جنو العمومية العامة كما نشرتها مؤسسة البرمجيات الحرة؛ إما الإصدار 2 من الرخصة، أو (حسب اختيارك) أي إصدار لاحق.
Qiling مقابل المحاكيات الأخرى
هناك العديد من المحاكيات مفتوحة المصدر، لكن أقرب مشروعين إلى Qiling هما Unicorn و QEMU user mode. يشرح هذا القسم الفروق الرئيسية بين Qiling وبينهما.
Qiling مقابل محرك Unicorn
- Unicorn هو مجرد محاك لوحدة المعالجة المركزية، لذا فهو يركز على محاكاة تعليمات CPU، ويمكنه فهم ذاكرة المحاكي. أبعد من ذلك، لا يدرك Unicorn المفاهيم عالية المستوى، مثل المكتبات الديناميكية، استدعاءات النظام، معالجة الإدخال/الإخراج أو تنسيقات الملفات القابلة للتنفيذ مثل PE أو Mach-O أو ELF. ونتيجة لذلك، يمكن لـ Unicorn فقط محاكاة تعليمات الآلة الأولية، بدون سياق نظام التشغيل.
- Qiling مصمم كإطار عمل عالي المستوى، يستخدم Unicorn لمحاكاة تعليمات CPU، لكن يمكنه فهم نظام التشغيل: لديه محملات تنسيقات ملفات قابلة للتنفيذ (لـ PE و Mach-O و ELF حاليًا)، ومحملات ديناميكية (حتى نتمكن من تحميل المكتبات المشتركة ونقلها)، ومعالجات استدعاء النظام والإدخال/الإخراج. لهذا السبب، يمكن لـ Qiling تشغيل ملف ثنائي قابل للتنفيذ دون الحاجة إلى نظام التشغيل الأصلي.
Qiling مقابل وضع المستخدم في QEMU
وضع المستخدم في QEMU يقوم بعمل مماثل لمحاكينا، أي محاكاة ملفات ثنائية قابلة للتنفيذ بالكامل عبر المعماريات. ومع ذلك، يقدم Qiling بعض الفروق المهمة مقارنة بوضع المستخدم في QEMU:
- Qiling هو إطار تحليل حقيقي، يسمح لك ببناء أدوات التحليل الديناميكي الخاصة بك فوقه (بلغة Python). في حين أن QEMU مجرد أداة، وليس إطار عمل.
- يمكن لـ Qiling إجراء التتبع الديناميكي، ويمكنه حتى تعديل الكود أثناء التشغيل. QEMU لا يفعل أيًا منهما.
- ليس فقط يعمل عبر المعماريات، Qiling هو أيضًا عبر المنصات. على سبيل المثال، يمكنك تشغيل ملف Linux ELF على نظام Windows. في المقابل، وضع المستخدم في QEMU يعمل فقط مع ثنائيات نفس نظام التشغيل، مثل Linux ELF على Linux، بسبب طريقة إعادة توجيه استدعاءات النظام من الكود المحاكى إلى نظام التشغيل الأصلي.
- يدعم Qiling المزيد من المنصات، بما في ذلك Windows و macOS و Linux و BSD. وضع المستخدم في QEMU يمكنه معالجة Linux و BSD فقط.
التثبيت
يرجى الاطلاع على ملف دليل الإعداد لمعرفة كيفية تثبيت إطار Qiling.
أمثلة
المثال أدناه يوضح كيفية استخدام إطار Qiling بأبسط طريقة لمحاكاة ملف Windows قابل للتنفيذ.
from qiling import Qiling
if __name__ == "__main__":
# initialize Qiling instance, specifying the executable to emulate and the emulated system root.
# note that the current working directory is assumed to be Qiling home
ql = Qiling([r'examples/rootfs/x86_windows/bin/x86_hello.exe'], r'examples/rootfs/x86_windows')
# start emulation
ql.run()
- المثال التالي يوضح كيف يمكن تعديل تطبيق Windows crackme ديناميكيًا لجعله يعرض دائمًا مربع حوار 'تهانينا'.
from qiling import Qiling
def force_call_dialog_func(ql: Qiling):
# get DialogFunc address from current stack frame
lpDialogFunc = ql.stack_read(-8)
# setup stack memory for DialogFunc
ql.stack_push(0)
ql.stack_push(1001) # IDS_APPNAME
ql.stack_push(0x111) # WM_COMMAND
ql.stack_push(0)
# push return address
ql.stack_push(0x0401018)
# resume emulation from DialogFunc address
ql.arch.regs.eip = lpDialogFunc
if __name__ == "__main__":
# initialize Qiling instance
ql = Qiling([r'rootfs/x86_windows/bin/Easy_CrackMe.exe'], r'rootfs/x86_windows')
# NOP out some code
ql.patch(0x004010B5, b'\x90\x90')
ql.patch(0x004010CD, b'\x90\x90')
ql.patch(0x0040110B, b'\x90\x90')
ql.patch(0x00401112, b'\x90\x90')
# hook at an address with a callback
ql.hook_address(force_call_dialog_func, 0x00401016)
ql.run()
الفيديو أدناه على YouTube يوضح كيفية عمل المثال أعلاه.
محاكاة برامج ثابتة لموجه ARM على مضيف Ubuntu x64
يقوم إطار Qiling بتعديل ومحاكاة /usr/bin/httpd لموجه ARM على مضيف x86_64 Ubuntu.
إضافة Qiling لـ IDA Pro: تتبع وفك تشفير سر Mirai
يوضح هذا الفيديو كيف يمكن لإضافة Qiling لـ IDA Pro جعل IDA Pro يعمل مع محرك تتبع Qiling.
خادم GDB مع عرض IDA Pro
حل تحدي CTF بسيط باستخدام إطار Qiling و IDA Pro
Solving a simple CTF challenge with Qiling Framework and IDA Pro
محاكاة MBR
إطار Qiling يحاكي MBR
Qltool
يوفر Qiling أيضًا أداة سهلة الاستخدام تسمى qltool لمحاكاة الشيل كود والملفات الثنائية بسرعة.
باستخدام qltool، يمكن تنفيذ العملية بسهولة:
مع الشيل كود:
$ ./qltool code --os linux --arch arm --format hex -f examples/shellcodes/linarm32_tcp_reverse_shell.hex
مع ملف ثنائي:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --rootfs examples/rootfs/x8664_linux/
مع ملف ثنائي ومصحح GDB مفعل:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --gdb 127.0.0.1:9999 --rootfs examples/rootfs/x8664_linux
مع جمع تغطية الكود (UEFI فقط حاليًا):
$ ./qltool run -f examples/rootfs/x8664_efi/bin/TcgPlatformSetupPolicy --rootfs examples/rootfs/x8664_efi --coverage-format drcov --coverage-file TcgPlatformSetupPolicy.cov
مع إخراج JSON (Windows بشكل أساسي):
$ ./qltool run -f examples/rootfs/x86_windows/bin/x86_hello.exe --rootfs examples/rootfs/x86_windows/ --console False --json
الاتصال
احصل على أحدث المعلومات من موقعنا https://www.qiling.io
اتصل بنا عبر البريد الإلكتروني [email protected]، أو عبر تويتر @qiling_io.
المطورون الأساسيون، المساهمون الرئيسيون وغيرهم
يرجى الرجوع إلى CREDITS.md.

