
إطار محاكاة ثنائي حقيقي قابل للبرمجة
حالات استخدام Qiling والمدونة والأعمال ذات الصلة
Qiling هو إطار محاكاة ثنائية متقدم، مع الميزات التالية:
كما ظهر Qiling في العديد من المؤتمرات الدولية.
2022:
2021:
2020:
2019:
Qiling مدعوم من محرك Unicorn.
قم بزيارة موقعنا لمزيد من المعلومات.
هذا البرنامج هو برنامج حر؛ يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة جنو العمومية العامة كما نشرتها مؤسسة البرمجيات الحرة؛ إما الإصدار 2 من الرخصة، أو (حسب اختيارك) أي إصدار لاحق.
هناك العديد من المحاكيات مفتوحة المصدر، لكن أقرب مشروعين إلى Qiling هما Unicorn و QEMU user mode. يشرح هذا القسم الفروق الرئيسية بين Qiling وبينهما.
وضع المستخدم في QEMU يقوم بعمل مماثل لمحاكينا، أي محاكاة ملفات ثنائية قابلة للتنفيذ بالكامل عبر المعماريات. ومع ذلك، يقدم Qiling بعض الفروق المهمة مقارنة بوضع المستخدم في QEMU:
يرجى الاطلاع على ملف دليل الإعداد لمعرفة كيفية تثبيت إطار 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()
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 يوضح كيفية عمل المثال أعلاه.
يقوم إطار Qiling بتعديل ومحاكاة /usr/bin/httpd لموجه ARM على مضيف x86_64 Ubuntu.
يوضح هذا الفيديو كيف يمكن لإضافة Qiling لـ IDA Pro جعل IDA Pro يعمل مع محرك تتبع Qiling.
Qiling's IDA Pro Plugin: Instrument and Decrypt Mirai's Secret
حل تحدي CTF بسيط باستخدام إطار Qiling و IDA Pro
Solving a simple CTF challenge with Qiling Framework and IDA Pro
إطار Qiling يحاكي MBR
يوفر 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.