Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
ret-sync — ret-sync هي مجموعة من الإضافات التي تساعد في مزامنة جلسة التصحيح (WinDbg/GDB/LLDB/OllyDbg2/x64dbg) مع مفككات IDA/Ghidra/Binary Ninja. | Kitploit
أدوات/GitHubGitHub/bootleg/ret-sync
التحليل الديناميكي (عزل)الهندسة العكسيةمصممي الأخطاءالأدوات والمكوناتتحليل الملفات الثنائية
GitHubbootleg/ret-sync

ret-sync

ret-sync هي مجموعة من الإضافات التي تساعد في مزامنة جلسة التصحيح (WinDbg/GDB/LLDB/OllyDbg2/x64dbg) مع مفككات IDA/Ghidra/Binary Ninja.

عرض المستودع
2.4k307منذ 6 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

ret-sync

ret-sync تعني مزامنة أدوات الهندسة العكسية. هي مجموعة من الإضافات التي تساعد في مزامنة جلسة تصحيح الأخطاء (WinDbg/GDB/LLDB/OllyDbg/OllyDbg2/x64dbg) مع مفكك الشيفرات (IDA/Ghidra/Binary Ninja). الفكرة الأساسية بسيطة: الاستفادة من أفضل ما في العالمين (التحليل الثابت والديناميكي).

توفر لنا أدوات تصحيح الأخطاء والتحليل الديناميكي:

  • عرض محلي، مع سياق ديناميكي حي (السجلات، الذاكرة، إلخ.)
  • ميزات/واجهات برمجة تطبيقات متخصصة مدمجة (مثال: WinDbg's !peb، !drvobj، !address، إلخ.)

توفر لنا مفككات الشيفرات والتحليل الثابت:

  • عرض كلي للوحدات
  • تحليل الشيفرات، التوقيعات، الأنواع، إلخ.
  • عرض رسومي رائع
  • تفكيك عكسي (decompilation)
  • تخزين دائم للمعرفة داخل IDBs/GPRs

الميزات الرئيسية:

  • مزامنة عروض الرسوم البيانية والتفكيك العكسي مع حالة مصحح الأخطاء
  • لا حاجة للتعامل مع ASLR، يتم إعادة حساب العناوين فورًا
  • نقل البيانات (تعليق، إخراج أمر) من مصحح الأخطاء إلى مفكك الشيفرات
  • يمكن مزامنة عدة IDBs/GPRs في نفس الوقت مما يسمح بتتبع سهل عبر وحدات متعددة
  • يمكن أن يكون مفكك الشيفرات ومصحح الأخطاء على مضيفين مختلفين / أجهزة افتراضية

ret-sync هو فرع من qb-sync الذي قمت بتطويره وصيانته أثناء عملي في Quarkslab.


جدول المحتويات

  • محتوى المستودع
  • المتطلبات العامة
  • الإصدار الثنائي
  • تكوين ret-sync
  • التثبيت
    • إضافة IDA
    • إضافة Ghidra
    • إضافة Binary Ninja
    • إضافة WinDbg
    • تثبيت GNU gdb (GDB)
    • تثبيت LLDB
    • تثبيت OllyDbg 1.10
    • تثبيت OllyDbg2
    • تثبيت x64dbg
  • الاستخدام
    • أوامر مصحح الأخطاء في ret-sync
    • استخدام IDA
    • استخدام Ghidra
    • استخدام Binary Ninja
    • استخدام WinDbg
    • استخدام GNU gdb (GDB)
    • استخدام LLDB
    • استخدام OllyDbg 1.10
    • استخدام OllyDbg2
    • استخدام x64dbg
    • استخدام مكتبة Python
  • التوسعة
  • المهام المتبقية
  • الأخطاء/القيود المعروفة
  • الترخيص
  • التحية

محتوى المستودع

إضافات مصحح الأخطاء:

  • ext_windbg/sync: ملفات المصدر لإضافة WinDbg، بعد البناء: sync.dll
  • ext_gdb/sync.py: إضافة GDB
  • ext_lldb/sync.py: إضافة LLDB
  • ext_olly1: إضافة OllyDbg 1.10
  • ext_olly2: إضافة OllyDbg v2
  • ext_x64dbg: إضافة x64dbg

إضافات مفكك الشيفرات:

  • ext_ida/SyncPlugin.py
  • ext_ghidra/dist/ghidra_*_retsync.zip: إضافة Ghidra
  • ext_bn/retsync: إضافة Binary Ninja

وإضافة المكتبة:

  • ext_lib/sync.py: مكتبة Python مستقلة

المتطلبات العامة

تتطلب إضافات IDA و GDB إعداد Python صالح. يتم دعم Python 2 (>=2.7) و Python 3.

الإصدار الثنائي

يتم تقديم الثنائيات المجمعة مسبقًا لمصححي الأخطاء WinDbg/OllyDbg/OllyDbg2/x64dbg من خلال خط أنابيب Azure DevOps: Build Status

اختر البناء الأخير وتحقق من القطع الأثرية تحت قسم Related: 6 published.

يتم توفير أرشيف إضافة مجمعة مسبقًا لإضافة Ghidra في ext_ghidra/dist.

تكوين ret-sync

يجب أن يعمل ret-sync دون أي إعدادات إضافية لمعظم المستخدمين الذين لديهم إعداد نموذجي: مصحح الأخطاء ومفكك الشيفرات على نفس المضيف، أسماء الوحدات متطابقة.

ومع ذلك، في بعض السيناريوهات قد يتم استخدام تكوين محدد. لذلك، تتحقق الإضافات والمكونات الإضافية من وجود ملف تكوين عام اختياري باسم .sync في الدليل الرئيسي للمستخدم. يجب أن يكون ملف .INI صالحًا.

بالإضافة إلى ذلك، تبحث إضافات IDA و Ghidra أيضًا عن ملف التكوين في دليل IDB أو المشروع (<project>.rep) أولاً للسماح بإعدادات محلية لكل IDB/مشروع. إذا كان ملف التكوين المحلي موجودًا، يتم تجاهل ملف التكوين العام.

القيم المعلنة في ملفات التكوين هذه تتجاوز القيم الافتراضية. يرجى ملاحظة أنه لا يتم إنشاء ملف .sync افتراضيًا.

نوضح أدناه ثلاثة سيناريوهات شائعة حيث يكون ملف التكوين مفيدًا/ضروريًا:

  • التصحيح عن بعد
  • عدم تطابق أسماء الوحدات
  • PID مفقود

التصحيح عن بعد: مصحح الأخطاء ومفكك الشيفرات على مضيفين مختلفين

يستخدم قسم [INTERFACE] لتخصيص الإعدادات المتعلقة بالشبكة. لنفترض أن شخصًا ما يريد مزامنة IDA مع مصحح أخطاء يعمل داخل جهاز افتراضي (أو ببساطة مضيف آخر)، وهو سيناريو شائع لتصحيح النواة عن بعد.

ببساطة قم بإنشاء ملفي .sync:

  • واحد على الجهاز الذي تم تثبيت IDA عليه، في دليل IDB:
  • بالنسبة لـ Ghidra، ضعه في الدليل الرئيسي، مثل "/home/user" أو "C:\Users\user".``` [INTERFACE] host=192.168.128.1 port=9234
root@kitploit:~
يخبر إضافة **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 سيؤدي إلى أخطاء غريبة.

أسماء وحدات IDB والمصحح مختلفة```

[ALIASES] ntoskrnl_vuln.exe=ntkrnlmp.exe

root@kitploit:~
يستخدم قسم ``[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"] ] }

root@kitploit:~
كل إدخال في التعيينات هو: ``mem_base``, ``mem_end``, ``mem_size``, ``mem_name``.


## تجاوز إعادة التوطين التلقائي للعناوين

في بعض السيناريوهات، مثل تصحيح أخطاء الأجهزة المضمنة أو الاتصال بواجهات التصحيح البسيطة، قد يكون من الأسهل تجاوز ميزة إعادة التوطين التلقائي للعناوين المطبقة في إضافات مفكك التجميع.

الخيار `use_raw_addr` مدعوم حاليًا فقط لـ Ghidra. في ملف تكوين .sync استخدم:```
[GENERAL]
use_raw_addr=true

التثبيت

ملحق IDA

متطلبات IDA الأساسية

IDA 9.2+ مطلوب. للإصدارات الأقدم، يرجى مراجعة المشروع قبل علامة ida9.2 من Tags المتاحة.

تثبيت ملحق IDA

لتثبيت IDA، انسخ المجلد Syncplugin.py و retsync من ext_ida إلى دليل إضافات IDA، على سبيل المثال:

  • C:\Program Files\IDA Pro 7.4\plugins
  • %APPDATA%\Hex-Rays\IDA Pro\plugins
  • ~/.idapro/plugins

تشغيل ملحق IDA

  1. افتح IDB
  2. قم بتشغيل الإضافة في IDA (Alt-Shift-S) أو Edit -> Plugins -> ``ret-sync````` [sync] default idb name: ld.exe [sync] sync enabled [sync] cmdline: "C:\Program Files\Python38\python.exe" -u "C:\Users\user\AppData\Roaming\Hex-Rays\IDA Pro\plugins\retsync\broker.py" --idb "target.exe" [sync] module base 0x100400000 [sync] hexrays #7.3.0.190614 found [sync] broker started [sync] plugin loaded [sync] << broker << dispatcher not found, trying to run it [sync] << broker << dispatcher now runs with pid: 6544 [sync] << broker << connected to dispatcher [sync] << broker << listening on port 63107
root@kitploit:~
### استكشاف أخطاء إضافة IDA

لاستكشاف المشكلات المتعلقة بإضافة IDA، هناك خياران متاحان في الملف `retsync/rsconfig.py`:```
LOG_LEVEL = logging.INFO
LOG_TO_FILE_ENABLE = False

تعيين قيمة LOG_LEVEL إلى logging.DEBUG يجعل الإضافة أكثر تفصيلاً.

تعيين قيمة LOG_TO_FILE_ENABLE إلى True يؤدي إلى تسجيل معلومات الاستثناءات من broker.py وdispatcher.py في ملفات مخصصة. يتم إنشاء ملفات السجل في مجلد %TMP% بنمط اسم retsync.%s.err .

ملحق Ghidra

بناء ملحق Ghidra

إما استخدام الإصدار المبني مسبقًا من مجلد ext_ghidra/dist أو اتباع التعليمات لبنائه. كل بناء ملحق يدعم فقط إصدار Ghidra المحدد في اسم ملف الإضافة. على سبيل المثال: ghidra_9.1_PUBLIC_20191104_retsync.zip مخصص لـ Ghidra 9.1 Public.

  1. قم بتثبيت Ghidra
  2. قم بتثبيت gradle```bash apt install gradle
root@kitploit:~
3. قم ببناء الامتداد لتثبيت Ghidra الخاص بك (استبدل `$GHIDRA_DIR` بدليل التثبيت الخاص بك)```bash
cd ext_ghidra
gradle -PGHIDRA_INSTALL_DIR=$GHIDRA_DIR

تثبيت ملحق Ghidra

  1. من مدير مشاريع Ghidra: File -> Install Extensions...، انقر على علامة + واختر ext_ghidra/dist/ghidra_*_retsync.zip ثم انقر OK. سيؤدي هذا إلى استخراج مجلد retsync من الملف المضغوط إلى $GHIDRA_DIR/Extensions/Ghidra/
  2. أعد تشغيل Ghidra كما هو مطلوب
  3. بعد إعادة تحميل Ghidra، افتح وحدة في CodeBrowser. سيخبرك أنه تم اكتشاف ملحق جديد. اختر "yes" لتكوينه. ثم حدد "RetSyncPlugin" وانقر OK. يجب أن تظهر وحدة التحكم شيئًا مثل:``` [*] retsync init [>] programOpened: tm.sys imageBase: 0x1c0000000
root@kitploit:~
4. من أداة Ghidra CodeBrowser: استخدم أيقونات شريط الأدوات أو الاختصارات لتمكين (``Alt+s``)/تعطيل (``Alt+Shift+s``)/إعادة تشغيل (``Alt+r``) المزامنة.

كما تتوفر نافذة الحالة من ``Windows`` -> ``RetSyncPlugin``. يُفضل عادةً إسقاطها على الجانب لدمجها مع بيئة نوافذ Ghidra.


## إضافة Binary Ninja

دعم Binary Ninja تجريبي، تأكد من عمل نسخ احتياطي لقواعد بيانات التحليل الخاصة بك.

### متطلبات Binary Ninja

**ret-sync** يتطلب إصدار Binary Ninja 2.2 كحد أدنى بالإضافة إلى Python 3 (Python 2 غير مدعوم).


### تثبيت إضافة Binary Ninja

**ret-sync** لم يتم توزيعه بعد عبر مدير الإضافات في Binary Ninja؛ يلزم تثبيت يدوي. ببساطة انسخ محتوى مجلد `ext_bn` إلى مجلد الإضافات في Binary Ninja، على سبيل المثال:

`%APPDATA%\Binary Ninja\plugins`

بعد إعادة تشغيل Binary Ninja، يجب أن يظهر الناتج التالي في نافذة وحدة التحكم:```
[sync] commands added
Loaded python3 plugin 'retsync'

إضافة WinDbg

بناء إضافة WinDbg

استخدم الحل المتوفر في ext_windbg الخاص بـ Visual Studio 2017. تم اختبار Visual Studio Community Edition 2017 و 2026 بنجاح (الإصدارات بينهما يجب أن تعمل أيضًا).

سيؤدي هذا إلى بناء ملف x64\release\sync.dll.

تثبيت إضافة WinDbg

ستحتاج إلى نسخ ملف sync.dll الناتج إلى مسار إضافات WinDbg المناسب.

  • WinDbg Classic:

بالنسبة للإصدارات الأقدم من Windbg، يكون المسار مشابهًا لهذا (كن حذرًا من أنماط x86/x64)، مثال ذلك

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\winext\sync.dll

  • Windbg Preview

يبدو أن المجلد الخاص بتخزين الإضافة يعتمد على PATH، لذلك تحتاج إلى وضعه في أحد المواقع المستعلَمة.

مثال على ذلك وضعه هنا:

C:\Users\user\AppData\Local\Microsoft\WindowsApps\sync.dll

تشغيل إضافة WinDbg

  1. تشغيل WinDbg على الهدف
  2. تحميل الإضافة (أمر .load)``` 0:000> .load sync [sync.dll] DebugExtensionInitialize, ExtensionApis loaded
root@kitploit:~
3. مزامنة WinDbg```
      0:000> !sync
      [sync] No argument found, using default host (127.0.0.1:9100)
      [sync] sync success, sock 0x5a8
      [sync] probing sync
      [sync] sync is now enabled with host 127.0.0.1

على سبيل المثال في نافذة المخرجات لـ IDA``` [] << broker << dispatcher msg: add new client (listening on port 63898), nb client(s): 1 [] << broker << dispatcher msg: new debugger client: dbg connect - HostMachine\HostUser [sync] set debugger dialect to windbg, enabling hotkeys

root@kitploit:~
إذا كانت الوحدة الحالية لـ Windbg تطابق اسم ملف IDA```
      [sync] idb is enabled with the idb client matching the module name.

استكشاف أخطاء تثبيت WinDbg وإصلاحها

ملاحظة: إذا حصلت على الخطأ التالي، فذلك لأنك لم تنسخ الملف إلى المجلد الصحيح في الخطوات أعلاه.``` 0: kd> .load sync The call to LoadLibrary(sync) failed, Win32 error 0n2 "The system cannot find the file specified." Please check your debugger configuration and/or network access.

root@kitploit:~
الخطأ أدناه يعني عادةً أن Windbg حاول تحميل النكهة غير الصحيحة للإضافة، مثال: `x64` بدلاً من `x86` `sync.dll`.```
0:000> .load sync
The call to LoadLibrary(sync) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.

بما أن WinDbg Preview يقوم بتحميل كلتا الإضافتين (x86 و x64) من نفس المجلد، يمكن إعادة تسمية ملف x86 sync32.dll.``` 0:000> .load sync32

root@kitploit:~
## تثبيت GNU gdb (GDB)

1. انسخ `ext_gdb/sync.py` إلى الدليل الذي تختاره
2. قم بتحميل الامتداد (انظر auto-load-scripts)```
    gdb> source sync.py
    [sync] configuration file loaded 192.168.52.1:9100
    [sync] commands added

تثبيت LLDB

دعم LLDB تجريبي، ولكن:

  1. تحميل الامتداد (يمكن إضافته في ~/.lldbinit)``` lldb> command script import sync
root@kitploit:~
## تثبيت OllyDbg 1.10

دعم OllyDbg 1.10 تجريبي، ومع ذلك:

1. قم ببناء الإضافة باستخدام حل VS (اختياري، انظر إلى الملفات الثنائية المبنية مسبقًا)
2. انسخ ملف dll داخل دليل إضافات OllyDbg

## تثبيت OllyDbg2

دعم OllyDbg2 تجريبي، ومع ذلك:

1. قم ببناء الإضافة باستخدام حل VS (اختياري، انظر إلى الملفات الثنائية المبنية مسبقًا)
2. انسخ ملف dll داخل دليل إضافات OllyDbg2

## تثبيت x64dbg

بناءً على testplugin، https://github.com/x64dbg/testplugin. دعم x64dbg تجريبي، ومع ذلك:

1. قم ببناء الإضافة باستخدام حل VS (اختياري، انظر إلى الملفات الثنائية المبنية مسبقًا).
   قد تحتاج إلى إصدار مختلف من SDK الإضافة،
   يمكن العثور على نسخة في كل إصدار من x64dbg.
   قم بلصق الدليل "``pluginsdk``" داخل "``ext_x64dbg\x64dbg_sync``"
2. انسخ ملف dll (الامتداد هو ``.d32`` أو ``.dp64``) داخل دليل إضافات x64dbg.

# الاستخدام

## أوامر مصحح الأخطاء **ret-sync**

بالنسبة لمصححات الأخطاء الموجهة لسطر الأوامر (خاصة Windbg و GDB) يتم عرض مجموعة من الأوامر بواسطة **ret-sync** للمساعدة في مهمة الهندسة العكسية.

الأوامر أدناه عامة (Windbg و GDB)، يرجى ملاحظة أن البادئة `!` مطلوبة في WinDbg (مثال: `sync` في GDB، `!sync` في WinDbg).

| أمر مصحح الأخطاء           | الوصف                                                                               |
|----------------------------|-------------------------------------------------------------------------------------------|
| `synchelp`                   | عرض قائمة الأوامر المتاحة مع شرح مختصر                             |
| `sync`                       | بدء المزامنة                                                                     |
| `syncoff`                    | إيقاف المزامنة                                                                      |
| `cmt [-a address] <string>`  | إضافة تعليق في عنوان IP الحالي في المفكك                                               |
| `rcmt [-a address]`          | إعادة تعيين التعليق في عنوان IP الحالي في المفكك                                               |
| `fcmt [-a address] <string>` | إضافة تعليق دالة للدالة التي يوجد بها عنوان IP الحالي                        |
| `raddr <expression>`         | إضافة تعليق بالعنوان المعاد قاعدته والمقيم من التعبير                              |
| `rln <expression>`           | الحصول على الرمز من المفكك للعنوان المحدد                                    |
| `lbl [-a address] <string>`  | إضافة اسم تسمية في عنوان IP الحالي في المفكك                                            |
| `cmd <string>`               | تنفيذ أمر في مصحح الأخطاء وإضافة مخرجاته كتعليق في عنوان IP الحالي في المفكك |
| `bc <\|\|on\|off\|set 0xBBGGRR>` | تمكين/تعطيل تلوين المسار في المفكك                                              |
| `idblist`                    | الحصول على قائمة بجميع عملاء IDB المتصلين بالموزع                                   |
| `syncmodauto <on\|off>`       | تمكين/تعطيل التبديل التلقائي للمفكك بناءً على اسم الوحدة                              |
| `idbn <n>`                   | تعيين IDB النشط إلى العميل رقم n                                                          |
| `jmpto <expression>`         |                                                                                           |
| `jmpraw <expression>` | إذا تم تمكين IDB، فسيتم مزامنة عرض المفكك مع العنوان الناتج.    |
| `translate <base> <addr> <mod>` | إعادة قاعدة عنوان بالنسبة لاسم الوحدة وإزاحتها   |

أوامر WinDbg المحددة:

| أمر مصحح الأخطاء           | الوصف                                                                               |
|----------------------------|-------------------------------------------------------------------------------------------|
| `curmod`  |  عرض معلومات الوحدة لإزاحة التعليمات الحالية (لاستكشاف الأخطاء) |
| `modlist`  |  قائمة الوحدات المحسنة بلغة ترميز مصحح الأخطاء (DML) المخصصة لتبديل IDB النشط بشكل أكثر سلاسة  |
| `idb <module name>`  |  تعيين الوحدة المعطاة كـ IDB نشط (انظر `modlist` الإصدار المحسن من `lm`) |
| `modmap <base> <size> <name>` |  تتم إضافة وحدة اصطناعية (مزيفة) (محددة باستخدام عنوان قاعدتها وحجمها) إلى القائمة الداخلية لمصحح الأخطاء  |
| `modunmap <base>` |  إزالة وحدة اصطناعية سبق تعيينها في عنوان القاعدة  |
| `modcheck <\|\|md5>`  |  استخدم للتحقق مما إذا كانت الوحدة الحالية تطابق ملف IDB (مثال: تم تحديث الوحدة)  |
| `bpcmds <\|\|save\|load\|>` | غلاف **bpcmds**، حفظ وإعادة تحميل مخرجات **.bpcmds** (قائمة أوامر نقاط التوقف) إلى IDB الحالي  |
| `ks` | مخرجات محسنة بلغة ترميز مصحح الأخطاء (DML) لأمر **kv**   |

أوامر GDB المحددة:

| أمر مصحح الأخطاء           | الوصف                                                                               |
|----------------------------|-------------------------------------------------------------------------------------------|
|`bbt` |  تتبع خلفي جميل. مشابه لـ **bt** في GDB ولكنه يطلب الرموز من المفكك  |
| `patch`  | تصحيح البايتات في المفكك بناءً على السياق الحي   |
| `bx` | مشابه لـ **x** في GDB ولكن باستخدام رمز. سيتم حل الرمز بواسطة المفكك   |
| `cc` | المتابعة إلى المؤشر في المفكك  |

## استخدام IDA

### واجهة المستخدم الرسومية لإضافة IDA

حقل الإدخال ``Overwrite idb name`` يهدف إلى تغيير اسم IDB الافتراضي. إنه الاسم الذي تستخدمه الإضافة للتسجيل مع الموزع. التبديل التلقائي لـ IDB يعتمد على مطابقة اسم الوحدة. في حالة الأسماء المتضاربة (مثل ``foo.exe`` و ``foo.dll``)، يمكن استخدام ذلك لتسهيل المطابقة. يرجى ملاحظة أنه إذا قمت بتعديل حقل الإدخال أثناء نشاط المزامنة، يجب عليك إعادة التسجيل مع الموزع؛ يمكن القيام بذلك ببساطة باستخدام زر "``Restart``".

كتذكير، من الممكن عمل اسم مستعار افتراضيًا باستخدام ملف التكوين ``.sync``.

### اختصارات IDA العامة

يحدد **ret-sync** هذه الاختصارات العامة في IDA:

* ``Alt-Shift-S``  - تشغيل إضافة **ret-sync**
* ``Ctrl-Shift-S``  - تبديل المزامنة العالمية
* ``Ctrl-H``  - تبديل مزامنة Hex-Rays

يتوفر أيضًا زرّان في شريط أدوات التصحيح لتبديل المزامنة العالمية ومزامنة Hex-Rays.

### روابط IDA على أوامر مصحح الأخطاء

يسجل ``Syncplugin.py`` أيضًا مفاتيح اختصار غلاف أوامر مصحح الأخطاء.

* ``F2`` - تعيين نقطة توقف في عنوان المؤشر
* ``F3`` - تعيين نقطة توقف لمرة واحدة في عنوان المؤشر
* ``Ctrl-F2`` - تعيين نقطة توقف للأجهزة في عنوان المؤشر
* ``Ctrl-F3`` - تعيين نقطة توقف للأجهزة لمرة واحدة في عنوان المؤشر
* ``Alt-F2`` - ترجمة (إعادة قاعدة في مصحح الأخطاء) عنوان المؤشر الحالي
* ``Alt-F5`` - تشغيل
* ``Ctrl-Alt-F5`` - تشغيل (GDB فقط)
* ``F10`` - تنفيذ خطوة واحدة
* ``F11`` - تتبع فردي

هذه الأوامر متاحة فقط عندما يكون IDB الحالي نشطًا. عند الإمكان، تم تنفيذها أيضًا لمصححات أخطاء أخرى.

## استخدام Ghidra

### واجهة المستخدم الرسومية لإضافة Ghidra

بمجرد فتح RetSyncPlugin، يمكنك إضافته إلى نافذة CodeBrowser ببساطة عن طريق السحب والإفلات:

![](https://assets.kitploit.com/production/public/readmes/3693/c6d122e27a256e4f99d0f760d2d6febb89648881dbdee9d6ffd84092bb0d9931.png)

إذا كنت تريد عرض عدة وحدات، يجب أن تكون الملفات مفتوحة في نفس عارض CodeBrowser، ببساطة قم بسحب وإفلات الملفات الإضافية في نافذة CodeBrowser للحصول على النتيجة كما أعلاه.

### اختصارات Ghidra العامة

يحدد **ret-sync** هذه الاختصارات العامة في Ghidra:

* ``Alt-S``  - تمكين المزامنة
* ``Alt-Shift-S``  - تعطيل المزامنة
* ``Alt-R``  - إعادة تشغيل المزامنة
* ``Alt-Shift-R``  - إعادة تحميل التكوين

### روابط Ghidra على أوامر مصحح الأخطاء

تم أيضًا تنفيذ روابط على أوامر مصحح الأخطاء. إنها مشابهة لتلك الموجودة في إضافة IDA (باستثناء أمر "Go").

* ``F2``  - تعيين نقطة توقف في عنوان المؤشر
* ``Ctrl-F2`` - تعيين نقطة توقف للأجهزة في عنوان المؤشر
* ``Alt-F3`` - تعيين نقطة توقف لمرة واحدة في عنوان المؤشر
* ``Ctrl-F3`` - تعيين نقطة توقف للأجهزة لمرة واحدة في عنوان المؤشر
* ``Alt-F2`` - ترجمة (إعادة قاعدة في مصحح الأخطاء) عنوان المؤشر الحالي
* ``F5`` - تشغيل
* ``Alt-F5`` - تشغيل (GDB فقط)
* ``F10`` - تنفيذ خطوة واحدة
* ``F11`` - تتبع فردي

## استخدام Binary Ninja

### اختصارات Binary Ninja العامة

يحدد **ret-sync** هذه الاختصارات العامة في Binary Ninja:

* ``Alt-S``  - تمكين المزامنة
* ``Alt-Shift-S``  - تعطيل المزامنة

### اختصارات Binary Ninja

تم أيضًا تنفيذ روابط على أوامر مصحح الأخطاء. إنها مشابهة لتلك الموجودة في إضافة IDA.

* ``F2``  - تعيين نقطة توقف في عنوان المؤشر
* ``Ctrl-F2`` - تعيين نقطة توقف للأجهزة في عنوان المؤشر
* ``Alt-F3`` - تعيين نقطة توقف لمرة واحدة في عنوان المؤشر
* ``Ctrl-F3`` - تعيين نقطة توقف للأجهزة لمرة واحدة في عنوان المؤشر
* ``Alt-F2`` - ترجمة (إعادة قاعدة في مصحح الأخطاء) عنوان المؤشر الحالي
* ``Alt-F5`` - تشغيل
* ``F10`` - تنفيذ خطوة واحدة
* ``F11`` - تتبع فردي

## استخدام WinDbg

### أوامر إضافة WinDbg

* **!sync**: بدء المزامنة
* **!syncoff**: إيقاف المزامنة
* **!synchelp**: عرض قائمة الأوامر المتاحة مع شرح مختصر.
* **!cmt [-a address] <string>**: إضافة تعليق في عنوان IP الحالي في IDA```
    [WinDbg]
    0:000:x86> pr
    eax=00000032 ebx=00000032 ecx=00000032 edx=0028eebc esi=00000032 edi=00000064
    eip=00430db1 esp=0028ed94 ebp=00000000 iopl=0         nv up ei pl nz na po nc
    cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
    image00000000_00400000+0x30db1:
    00430db1 57    push    edi

    0:000:x86> dd esp 8
    0028ed94  00000000 00433845 0028eebc 00000032
    0028eda4  0028f88c 00000064 002b049e 00000110

    0:000:x86> !cmt 0028ed94  00000000 00433845 0028eebc 00000032
    [sync.dll]  !cmt called

    [IDA]
    .text:00430DB1    push    edi             ; 0028ed94  00000000 00433845 0028eebc 00000032
  • !rcmt [-a address]: إعادة تعيين التعليق في عنوان IP الحالي في IDA``` [WinDbg] 0:000:x86> !rcmt [sync] !rcmt called

    [IDA] .text:00430DB1 push edi

root@kitploit:~
* **!fcmt [-a address] <string>**: أضف تعليق دالة للدالة التي يوجد بها عنوان ip الحالي```
    [WinDbg]
    0:000:x86> !fcmt decodes buffer with key
    [sync] !fcmt called

    [IDA]
    .text:004012E0 ; decodes buffer with key
    .text:004012E0                 public decrypt_func
    .text:004012E0 decrypt_func    proc near
    .text:004012E0                 push    ebp

ملاحظة: استدعاء هذا الأمر بدون وسيطة يعيد تعيين تعليق الوظيفة.

  • !raddr : إضافة تعليق مع عنوان معاد أساسه (rebased address) يتم تقييمه من التعبير

  • !rln : الحصول على رمز من المفكك (disassembler) للعنوان المحدد

  • !lbl [-a address] : إضافة اسم تسمية (label) عند عنوان التعليمات الحالي (ip) في المفكك``` [WinDbg] 0:000:x86> !lbl meaningful_label [sync] !lbl called

    [IDA] .text:000000000040271E meaningful_label: .text:000000000040271E mov rdx, rsp

root@kitploit:~
* **!cmd <string>**: تنفيذ أمر في WinDbg وإضافة مخرجاته كتعليق عند عنوان التعليمات الحالي في مفكك التجميع```
    [WinDbg]
    0:000:x86> pr
    eax=00000032 ebx=00000032 ecx=00000032 edx=0028eebc esi=00000032 edi=00000064
    eip=00430db1 esp=0028ed94 ebp=00000000 iopl=0         nv up ei pl nz na po nc
    cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
    image00000000_00400000+0x30db1:
    00430db1 57     push    edi
    [sync.dll]  !cmd r edi

    [IDA]
    .text:00430DB1    push    edi             ; edi=00000064
  • !bc <||on|off|set 0xBBGGRR> : تمكين/تعطيل تلوين المسار في مفكك الشفرة. هذه ليست أداة تتبع الشفرة، هناك أدوات فعالة لذلك. كل تعليمة يتم تنفيذها يدويًا يتم تلوينها في الرسم البياني. قم بتلوين تعليمة واحدة عند عنوان ip الحالي إذا تم استدعاؤها بدون وسيط. الوسيطة "set" تُستخدم لتعيين لون المسار برمز rgb سداسي جديد (إعادة تعيين اللون إذا تم استدعاؤها بقيمة > 0xFFFFFF).
  • !idblist: الحصول على قائمة بجميع عملاء IDB المتصلين بالموزع:``` [WinDbg] 0:000> !idblist

    currently connected idb(s): [0] target.exe

root@kitploit:~
* **!syncmodauto <on|off>**: تفعيل/تعطيل التبديل التلقائي للمفكك بناءً على اسم الوحدة النمطية:```
    [WinDbg]
    0:000> !syncmodauto off

    [IDA]
    [*] << broker << dispatcher msg: sync mode auto set to off
  • !idbn : تعيين IDB النشط إلى العميل رقم n. يجب أن يكون n قيمة عشرية صالحة. هذا وضع شبه تلقائي (تقدير شخصي للعظيم jj)``` [WinDbg] 0:000:> !idbn 0

    current idb set to 0

root@kitploit:~
في هذا المثال، سيكون عميل IDB النشط الحالي قد تم تعيينه إلى:```
	[0] target.exe.
  • !jmpto : يتم تقييم التعبير المعطى كوسيطة في سياق حالة المصحح الحالي. ثم يتم مزامنة عرض المفكك مع العنوان الناتج إذا تم تسجيل وحدة مطابقة. يمكن اعتباره مزامنة يدوية، حيث يتم تنفيذ إعادة التوطين تلقائيًا، بشكل فوري. مفيد بشكل خاص للثنائيات التي تم إعادة توطينها عشوائيًا.
  • !jmpraw : يتم تقييم التعبير المعطى كوسيطة في سياق حالة المصحح الحالي. إذا تم تمكين IDB، يتم مزامنة عرض المفكك مع العنوان الناتج. لا يتم إعادة تعريف العنوان الأساسي (rebasing) ولا يوجد تبديل IDB. مفيد بشكل خاص للكود المخصص ديناميكيًا/المنشأ ديناميكيًا.
  • !modmap : يتم إضافة وحدة اصطناعية (مزيفة) (مُعرَّفة باستخدام عنوانها الأساسي وحجمها) إلى القائمة الداخلية للمصحح. من msdn: "إذا تم إعادة تحميل جميع الوحدات - على سبيل المثال، عن طريق استدعاء Reload مع تعيين معامل Module إلى سلسلة فارغة - فسيتم تجاهل جميع الوحدات الاصطناعية." يمكن استخدامها لتسهيل تصحيح الكود المخصص ديناميكيًا/المنشأ ديناميكيًا.
  • !modunmap : إزالة وحدة اصطناعية سبق تعيينها في العنوان الأساسي.
  • !modcheck <||md5>: يُستخدم للتحقق مما إذا كانت الوحدة الحالية تطابق ملف IDB (مثال: تم تحديث الوحدة) عند استدعائها بدون وسيطة، يتم استخدام GUID الخاص بـ pdb من دليل التصحيح. يمكنها بدلاً من ذلك استخدام md5، ولكن فقط مع برنامج محلل محلي (ليس في تصحيح النواة عن بُعد).
  • !bpcmds <||save|load|>: غلاف bpcmds، حفظ وإعادة تحميل مخرجات .bpcmds (قائمة أوامر نقاط التوقف) إلى IDB الحالي. عرض (ولكن ليس تنفيذ) البيانات المحفوظة إذا تم استدعاؤها بدون وسيطة. يتم تحقيق التخزين المستمر باستخدام ميزة netnode في IDA.
  • !ks: إخراج معزز بلغة ترميز المصحح (DML) لأمر kv. عناوين الكود قابلة للنقر (!jmpto) وكذلك عناوين البيانات (dc).
  • !translate : مخصص للاستخدام من IDA (اختصار Alt-F2)، إعادة تعريف العنوان الأساسي لعنوان بالنسبة لاسم الوحدة وإزاحتها.

الوسيطة الاختيارية للعنوان

الأوامر !cmt و !rcmt و !fcmt تدعم خيار عنوان اختياري: -a أو --address. يجب تمرير العنوان كقيمة سداسية عشرية. يعتمد تحليل الأمر على وحدة argparse في بايثون. لإيقاف تحليل السطر استخدم --.``` [WinDbg] 0:000:x86> !cmt -a 0x430DB2 comment

root@kitploit:~
يجب أن يكون العنوان عنوان تعليمة صالح.

## GNU gdb (GDB) الاستخدام

مزامنة مع المضيف:```
    gdb> sync
    [sync] sync is now enabled with host 192.168.52.1
    <not running>

    gdb> r
    Starting program: /bin/ls
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/libthread_db.so.1".

أوامر إضافة GDB

استخدم الأوامر، بدون بادئة "!"``` (gdb) cmd x/i $pc [sync] command output: => 0x8049ca3: push edi

root@kitploit:~
(gdb) synchelp
[sync] extension commands help:
 > sync <host>
 > syncoff
 > cmt [-a address] <string>
 > rcmt [-a address] <string>
 > fcmt [-a address] <string>
 > cmd <string>
 > bc <on|off|>
 > rln <address>
 > bbt <symbol>
 > patch <addr> <count> <size>
 > bx /i <symbol>
 > cc
 > translate <base> <addr> <mod>
root@kitploit:~
* **rln**: الحصول على الرمز من IDB للعنوان المعطى
* **bbt**: تتبع خلفي رائع. مشابه لـ **bt** لكن يطلب الرموز من مفكك الشفرة```
    (gdb) bt
    #0  0x0000000000a91a73 in ?? ()
    #1  0x0000000000a6d994 in ?? ()
    #2  0x0000000000a89125 in ?? ()
    #3  0x0000000000a8a574 in ?? ()
    #4  0x000000000044f83b in ?? ()
    #5  0x0000000000000000 in ?? ()
    (gdb) bbt
    #0 0x0000000000a91a73 in IKE_GetAssembledPkt ()
    #1 0x0000000000a6d994 in catcher ()
    #2 0x0000000000a89125 in IKEProcessMsg ()
    #3 0x0000000000a8a574 in IkeDaemon ()
    #4 0x000000000044f83b in sub_44F7D0 ()
    #5 0x0000000000000000 in  ()
  • patch: تصحيح البايتات في المفكك بناءً على السياق الحي

  • bx: عرض جميل. مشابه لـ x ولكن باستخدام رمز. الرمز سيتم حله بواسطة المفكك.

  • cc: متابعة إلى المؤشر في المفكك. هذا بديل لاستخدام F3 لـ تعيين نقطة توقف لمرة واحدة وF5 للمتابعة. هذا مفيد إذا كنت تفضل القيام بذلك من gdb.``` (gdb) b* 0xA91A73 Breakpoint 1 at 0xa91a73 (gdb) c Continuing.

    Breakpoint 1, 0x0000000000a91a73 in ?? () (gdb) cc [sync] current cursor: 0xa91a7f [sync] reached successfully (gdb)

root@kitploit:~
## استخدام LLDB

1. المزامنة مع المضيف```
    lldb> process launch -s
    lldb> sync
    [sync] connecting to localhost
    [sync] sync is now enabled with host localhost
    [sync] event handler started
  1. استخدم الأوامر``` lldb> synchelp [sync] extension commands help:

    sync = synchronize with or the default value syncoff = stop synchronization cmt = add comment at current eip in IDA rcmt = reset comments at current eip in IDA fcmt = add a function comment for 'f = get_func(eip)' in IDA cmd = execute command and add its output as comment at current eip in IDA bc <on|off|> = enable/disable path coloring in IDA color a single instruction at current eip if called without argument lldb> cmt mooo

root@kitploit:~
## استخدام OllyDbg 1.10

1. استخدم قائمة الإضافات أو الاختصارات لتمكين (``Alt+s``)/تعطيل (``Alt+u``) المزامنة.

## استخدام OllyDbg2

1. استخدم قائمة الإضافات أو الاختصارات لتمكين (``Ctrl+s``)/تعطيل (``Ctrl+u``) المزامنة.

نظرًا للحالة التجريبية لواجهة برمجة تطبيقات OllyDbg2، تم تنفيذ الميزات التالية فقط:

- مزامنة الرسم البياني [استخدم ``F7``؛ ``F8`` للتنقل خطوة بخطوة]
- تعليق   [استخدم ``CTRL+;``]
- تسمية     [استخدم ``CTRL+:``]

## استخدام x64dbg

1. استخدم قائمة الإضافات أو الأوامر لتمكين ("``!sync"``) أو تعطيل ("``!syncoff``") المزامنة.

2. استخدم الأوامر```
[sync] synchelp command!
[sync] extension commands help:
 > !sync                          = synchronize with <host from conf> or the default value
 > !syncoff                       = stop synchronization
 > !syncmodauto <on | off>        = enable / disable idb auto switch based on module name
 > !synchelp                      = display this help
 > !cmt <string>                  = add comment at current eip in IDA
 > !rcmt <string>                 = reset comments at current eip in IDA
 > !idblist                       = display list of all IDB clients connected to the dispatcher
 > !idb <module name>             = set given module as the active idb (see !idblist)
 > !idbn <n>                      = set active idb to the n_th client. n should be a valid decimal value
 > !translate <base> <addr> <mod> = rebase an address with respect to local module's base
 > !insync                        = synchronize the selected instruction block in the disassembly window.

ملاحظة: استخدام الأمر !translate من أداة التفكيك (IDA/Ghidra، اختصار Alt-F2)، سيجعل نافذة أداة التفكيك "تقفز" إلى العنوان المحدد (ما يعادل تشغيل disasm في سطر أوامر x64dbg).

استخدام مكتبة بايثون

قد يرغب المرء في استخدام الميزات الأساسية لـ ret-sync (مزامنة الموضع مع أداة تفكيك، تحليل الرموز) حتى لو لم تكن بيئة تصحيح أخطاء كاملة متاحة أو باستخدام أداة مخصصة. لتحقيق ذلك، تم استخراج مكتبة بايثون بسيطة للغاية.

المثال أدناه يوضح استخدام مكتبة بايثون مع سكربت يتنقل عبر مخرجات أداة تسجيل/تتبع تعتمد على الأحداث.```python from sync import *

HOST = '127.0.0.1'

MAPPINGS = [ [0x555555400000, 0x555555402000, 0x2000, " /bin/tempfile"], [0x7ffff7dd3000, 0x7ffff7dfc000, 0x29000, " /lib/x86_64-linux-gnu/ld-2.27.so"], [0x7ffff7ff7000, 0x7ffff7ffb000, 0x4000, " [vvar]"], [0x7ffff7ffb000, 0x7ffff7ffc000, 0x1000, " [vdso]"], [0x7ffffffde000, 0x7ffffffff000, 0x21000, " [stack]"], ]

EVENTS = [ [0x0000555555400e74, "malloc"], [0x0000555555400eb3, "open"], [0x0000555555400ee8, "exit"] ]

synctool = Sync(HOST, MAPPINGS)

for e in EVENTS: offset, name = e synctool.invoke(offset) print(" 0x%08x - %s" % (offset, name)) print("[>] press enter for next event") input()

root@kitploit:~
# توسيع

على الرغم من أن التركيز الأولي كان على التحليل الديناميكي (المصححات)، فمن الممكن بالطبع توسيع مجموعة الإضافات والتكامل مع أدوات أخرى.

- التكامل مع **REVEN** منصة التحليل والتصحيح الخالدة بواسطة [Tetrane](https://www.tetrane.com/):
  - http://blog.tetrane.com/2015/02/reven-in-your-toolkit.html
  - https://twitter.com/tetrane/status/1374768014193799175
- التكامل مع **محاكي EFI DXE** بواسطة Assaf Carlsbad ([@assaf_carlsbad](https://twitter.com/assaf_carlsbad)):
  - https://twitter.com/assaf_carlsbad/status/1242114356881641474
  - https://github.com/assafcarlsbad/efi_dxe_emulator

مصادر أخرى:

- "*الجمع بين التحليل الثنائي الثابت والديناميكي - ret-sync*" بواسطة Jean-Christophe Delaunay
  - https://www.synacktiv.com/ressources/bieresecu1_ret-sync_en.pdf

# TODO

- بالتأكيد.

# الأخطاء/القيود المعروفة

- تم الاختبار مع Python 2.7/3.7, IDA 7.7 (Windows, Linux and Mac OS X), Ghidra 10.1.1, Binary Ninja 3.0.3225-dev, GNU gdb (GDB) 8.1.0 (Debian), lldb 310.2.37.
- **لا يوجد أي مصادقة/تشفير** على الإطلاق بين الأطراف؛ أنت مسؤول عن نفسك.
- الكود ذاتي التعديل خارج النطاق.

مع GDB:

- يبدو أن حدث التوقف لا يتم استدعاؤه عند استخدام أمر 'return'.
- تصحيح أخطاء تعدد الخيوط يواجه مشاكل مع الإشارات.

مع WinDbg:

- يتم إعلام إضافة عميل IDA حتى لو كانت نقطة التوقف تواجه سلسلة أوامر تجعلها تستمر ('``g``'). يمكن أن يتسبب هذا في تباطؤ كبير إذا كان هناك الكثير من هذه الأحداث. تم تنفيذ إصلاح محدود، أفضل حل هو لا يزال إيقاف المزامنة مؤقتًا.
- حالة تسابق محتملة.

مع Ghidra:

- لا تعمل الاختصارات كما هو متوقع في أداة فك التجميع.

مع IDA:

- إعادة رسم نافذة الرسم البياني بطيئة جدًا للرسوم البيانية الكبيرة.
- اختصارات **ret-sync** تتعارض في بيئات لينكس.

التعارضات:

- من المعروف أن برنامج تحديث Logitech يستخدم نفس المنفذ الافتراضي (9100). الحل هو استخدام ملف تكوين `.sync` عام لتحديد منفذ مختلف.```
[INTERFACE]
host=127.0.0.1
port=9234

الترخيص

ret-sync هو برنامج حر: يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة جنو العمومية العامة كما تنشرها مؤسسة البرمجيات الحرة، إما الإصدار 3 من الرخصة أو (حسب اختيارك) أي إصدار لاحق.

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

يجب أن تكون قد تلقيت نسخة من رخصة جنو العمومية العامة مع هذا البرنامج. إذا لم يكن الأمر كذلك، راجع http://www.gnu.org/licenses/.

يتم إصدار إضافة Binary Ninja بموجب رخصة MIT.

التحيات

تحية لبروس دانغ، StalkR، @Ivanlef0u، داميان أوميتر، سيباستيان رينو وكيفين سكودلابسكي، @m00dy، @saidelike، كزافييه ميرينبرغر، ben64، رافاييل ريجو، Jiss على لطفهم ومساعدتهم وملاحظاتهم وأفكارهم. إلفاك جيلفانوف، إيغور سكوشينسكي وأرنو ديدرين لمساعدتهم في فهم آلية عمل IDA ودعمهم المتميز. شكرًا لجوردان وينز و Vector 35. أخيرًا، شكرًا أيضًا لجميع المساهمين وكل من أبلغ عن المشكلات/الأخطاء.

تنزيل الأداة