
ret-sync هي مجموعة من الإضافات التي تساعد في مزامنة جلسة التصحيح (WinDbg/GDB/LLDB/OllyDbg2/x64dbg) مع مفككات IDA/Ghidra/Binary Ninja.
ret-sync تعني مزامنة أدوات الهندسة العكسية. هي مجموعة من الإضافات التي تساعد في مزامنة جلسة تصحيح الأخطاء (WinDbg/GDB/LLDB/OllyDbg/OllyDbg2/x64dbg) مع مفكك الشيفرات (IDA/Ghidra/Binary Ninja). الفكرة الأساسية بسيطة: الاستفادة من أفضل ما في العالمين (التحليل الثابت والديناميكي).
توفر لنا أدوات تصحيح الأخطاء والتحليل الديناميكي:
!peb، !drvobj، !address، إلخ.)توفر لنا مفككات الشيفرات والتحليل الثابت:
الميزات الرئيسية:
ret-sync هو فرع من qb-sync الذي قمت بتطويره وصيانته أثناء عملي في Quarkslab.
إضافات مصحح الأخطاء:
ext_windbg/sync: ملفات المصدر لإضافة WinDbg، بعد البناء: sync.dllext_gdb/sync.py: إضافة GDBext_lldb/sync.py: إضافة LLDBext_olly1: إضافة OllyDbg 1.10ext_olly2: إضافة OllyDbg v2ext_x64dbg: إضافة x64dbgإضافات مفكك الشيفرات:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip: إضافة Ghidraext_bn/retsync: إضافة Binary Ninjaوإضافة المكتبة:
ext_lib/sync.py: مكتبة Python مستقلةتتطلب إضافات IDA و GDB إعداد Python صالح. يتم دعم Python 2 (>=2.7) و Python 3.
يتم تقديم الثنائيات المجمعة مسبقًا لمصححي الأخطاء WinDbg/OllyDbg/OllyDbg2/x64dbg من خلال خط أنابيب Azure DevOps:
اختر البناء الأخير وتحقق من القطع الأثرية تحت قسم Related: 6 published.

يتم توفير أرشيف إضافة مجمعة مسبقًا لإضافة Ghidra في ext_ghidra/dist.
يجب أن يعمل ret-sync دون أي إعدادات إضافية لمعظم المستخدمين الذين لديهم إعداد نموذجي: مصحح الأخطاء ومفكك الشيفرات على نفس المضيف، أسماء الوحدات متطابقة.
ومع ذلك، في بعض السيناريوهات قد يتم استخدام تكوين محدد. لذلك، تتحقق الإضافات والمكونات الإضافية من وجود ملف تكوين عام اختياري باسم .sync في الدليل الرئيسي للمستخدم. يجب أن يكون ملف .INI صالحًا.
بالإضافة إلى ذلك، تبحث إضافات IDA و Ghidra أيضًا عن ملف التكوين في دليل IDB أو المشروع (<project>.rep) أولاً للسماح بإعدادات محلية لكل IDB/مشروع. إذا كان ملف التكوين المحلي موجودًا، يتم تجاهل ملف التكوين العام.
القيم المعلنة في ملفات التكوين هذه تتجاوز القيم الافتراضية. يرجى ملاحظة أنه لا يتم إنشاء ملف .sync افتراضيًا.
نوضح أدناه ثلاثة سيناريوهات شائعة حيث يكون ملف التكوين مفيدًا/ضروريًا:
يستخدم قسم [INTERFACE] لتخصيص الإعدادات المتعلقة بالشبكة. لنفترض أن شخصًا ما يريد مزامنة IDA مع مصحح أخطاء يعمل داخل جهاز افتراضي (أو ببساطة مضيف آخر)، وهو سيناريو شائع لتصحيح النواة عن بعد.
ببساطة قم بإنشاء ملفي .sync:
يخبر إضافة **ret-sync** ``IDA`` بالاستماع على الواجهة ``192.168.128.1`` مع المنفذ ``9234``. وغني عن القول أن هذه الواجهة يجب أن تكون قابلة للوصول من المضيف البعيد أو الآلة الافتراضية.
* واحدة على الجهاز الذي يتم تنفيذ المصحح عليه، في دليل المستخدم الرئيسي:```
[INTERFACE]
host=192.168.128.1
port=9234
يخبر مكون ret-sync الإضافي للمصحح بالاتصال بمكون ret-sync الإضافي لـ IDA الذي تم تكوينه مسبقًا للاستماع على هذه الواجهة.
ملاحظة: يجب عليك تحديد عنوان IP حقيقي هنا، وعدم استخدام 0.0.0.0. وذلك لأن المتغير يُستخدم من قبل مصادر متعددة سواء للربط أو الاتصال، لذا فإن استخدام 0.0.0.0 سيؤدي إلى أخطاء غريبة.
[ALIASES] ntoskrnl_vuln.exe=ntkrnlmp.exe
يستخدم قسم ``[ALIASES]`` لتخصيص الاسم الذي يستخدمه مفكك (IDA/Ghidra) لتسجيل وحدة إلى موزع/مدير البرامج الخاص به.
افتراضيًا، تستخدم إضافات المفكك اسم ملف الإدخال. ومع ذلك، قد يكون المستخدم قد أعاد تسمية الملف مسبقًا ولم يعد الاسم مطابقًا لاسم العملية الفعلية أو الوحدة المحملة كما يراها المصحح.
هنا نخبر الموزع ببساطة أن يطابق الاسم `ntkrnlmp.exe` (الاسم الحقيقي) بدلاً من `ntoskrnl_vuln.exe` (اسم IDB).
## gdb مع واجهة تصحيح أخطاء Qt Creator
تغير واجهة تصحيح أخطاء Qt Creator طريقة تسجيل مخرجات أمر gdb. وبما أن هذا قد يتعارض مع المزامنة، يوجد خيار لاستخدام مخرجات gdb الخام للمزامنة بدلاً من ملف مؤقت. في ملف إعدادات .sync استخدم```
[GENERAL]
use_tmp_logging_file=false
إذا كنت ترغب في استخدام واجهة تصحيح Qt الأمامية للهدف.
/proc/<pid>/mapsفي بعض السيناريوهات، مثل تصحيح أخطاء الأجهزة المضمنة عبر المنفذ التسلسلي أو البرامج الثابتة الخام في QEMU، لا يكون gdb على علم بـ PID ولا يمكنه الوصول إلى /proc/<pid>/maps.
في هذه الحالات، يُستخدم قسم [INIT] لتمرير سياق مخصص إلى المكون الإضافي. يسمح بتجاوز بعض الحقول مثل PID وخرائط الذاكرة.
.sync مقتطف محتوى:```
[INIT]
context = {
"pid": 200,
"mappings": [ [0x400000, 0x7A81158, 0x7681158, "asav941-200.qcow2|lina"] ]
}
كل إدخال في التعيينات هو: ``mem_base``, ``mem_end``, ``mem_size``, ``mem_name``.
## تجاوز إعادة التوطين التلقائي للعناوين
في بعض السيناريوهات، مثل تصحيح أخطاء الأجهزة المضمنة أو الاتصال بواجهات التصحيح البسيطة، قد يكون من الأسهل تجاوز ميزة إعادة التوطين التلقائي للعناوين المطبقة في إضافات مفكك التجميع.
الخيار `use_raw_addr` مدعوم حاليًا فقط لـ Ghidra. في ملف تكوين .sync استخدم:```
[GENERAL]
use_raw_addr=true
IDA 9.2+ مطلوب. للإصدارات الأقدم، يرجى مراجعة المشروع قبل علامة ida9.2 من Tags المتاحة.
لتثبيت IDA، انسخ المجلد Syncplugin.py و retsync من ext_ida إلى دليل إضافات IDA، على سبيل المثال:
C:\Program Files\IDA Pro 7.4\plugins%APPDATA%\Hex-Rays\IDA Pro\plugins~/.idapro/plugins