Ret-Sync يرمز إلى تزامن أدوات الهندسة العكسية. إنها مجموعة من الإضافات التي تساعد على مزامنة جلسة تصحيح الأخطاء (WindBG/GDB/LLDB/OLLYDBG/OLLYDBG2/X64DBG) مع تفكيك (IDA/GHIDRA/BINARY NINJA). الفكرة الأساسية بسيطة: خذ الأفضل من كلا العالمين (تحليل ثابت وديناميكي).
يوفر لنا التصريف والتحليل الديناميكي:
!peb ، !drvobj !address !يوفر لنا Disassemblers والتحليل الثابت:
الميزات الرئيسية:
Ret-Sync هو شوكة من QB-Sync التي طورتها وصيانتها أثناء إقامتي في arcerslab.
ملحقات التصحيح:
ext_windbg/sync : ملفات مصدر امتداد Windbg ، بمجرد تصميمها: sync.dllext_gdb/sync.py : البرنامج المساعد GDBext_lldb/sync.py : البرنامج المساعد LLDBext_olly1 : البرنامج المساعد Ollydbg 1.10ext_olly2 : البرنامج المساعد Ollydbg V2ext_x64dbg : البرنامج المساعد x64dbgالمكونات الإضافية disassembler:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip : Plugin Ghidraext_bn/retsync : المكون الإضافي binary ninjaومكون المكتبة:
ext_lib/sync.py : مكتبة الثعبان المستقلةتتطلب المكونات الإضافية IDA و GDB إعداد Python صالح. يتم دعم Python 2 (> = 2.7) و Python 3.
ثنائيات مسبقة تم إنشاؤها ل Windbg/ollydbg/ollydbg2/x64dbg يقترحون من خلال خط أنابيب Azure DevOps :
حدد آخر بناء وتحقق من القطع الأثرية ضمن القسم Related : 6 published .

يتم توفير أرشيف إضافي مسبقًا من البرنامج المساعد Ghidra في ext_ghidra/dist .
يجب أن يعمل Ret-Sync خارج المربع لمعظم المستخدمين مع إعداد نموذجي: Debugger و Disassembler (s) على نفس المضيف ، مطابقة أسماء الوحدات.
ومع ذلك ، في بعض السيناريوهات يمكن استخدام تكوين معين. لذلك ، تحقق الإضافات والإضافات عن ملف تكوين عالمي اختياري يسمى .sync في الدليل الرئيسي للمستخدم. يجب أن يكون ملف .INI صالح.
بالإضافة إلى ذلك ، تبحث المكونات الإضافية لـ IDA و Ghidra أيضًا عن ملف التكوين في دليل IDB أو Project ( <project>.rep ) أولاً للسماح للإنشاءات المحلية ، لكل مشروع/مشروع. في حالة وجود ملف تكوين محلي ، يتم تجاهل ملف التكوين العالمي.
القيم المعلنة في ملفات التكوين هذه تتجاوز القيم الافتراضية. يرجى ملاحظة أنه لا يتم إنشاء ملف .sync افتراضيًا.
أدناه نقوم بالتفصيل ، ثلاثة سيناريوهات شائعة حيث يكون ملف التكوين مفيدًا/مطلوبًا:
يتم استخدام قسم [INTERFACE] لتخصيص الإعدادات المتعلقة بالشبكة. دعنا نفترض أن المرء يريد مزامنة IDA مع تصحيح الأخطاء التي تعمل داخل جهاز افتراضي (أو مجرد مضيف آخر) ، سيناريو تصحيح الأخطاء في kernel الشائع.
ببساطة إنشاء اثنين من ملف .sync :
[INTERFACE]
host=192.168.128.1
port=9234
يخبر المكوّن الإضافي Ret-Sync IDA بالاستماع إلى الواجهة 192.168.128.1 مع المنفذ 9234 . وغني عن القول أن هذه الواجهة يجب الوصول إليها من المضيف البعيد أو الجهاز الظاهري.
[INTERFACE]
host=192.168.128.1
port=9234
يخبر المكوّن الإضافي لـ Ret-Sync Debugger بالاتصال بمكون IDA Ret-Sync الذي تم تكوينه مسبقًا للاستماع في هذه الواجهة.
ملاحظة: يجب تحديد عنوان IP حقيقي هنا ، وعدم استخدام 0.0.0.0 . وذلك لأن المتغير يستخدمه مصادر متعددة لكل من الربط والتوصيل ، لذلك فإن استخدام 0.0.0.0 سيؤدي إلى أخطاء غريبة.
[ALIASES]
ntoskrnl_vuln.exe=ntkrnlmp.exe
يتم استخدام قسم [ALIASES] لتخصيص الاسم الذي يستخدمه disassembler (IDA/Ghidra) لتسجيل وحدة نمطية على مرسلها/مدير البرنامج.
بشكل افتراضي ، استخدم المكونات الإضافية disassembler اسم ملف الإدخال. ومع ذلك ، قد يكون لدى المرء اسم الملف مسبقًا ولم يعد يتطابق مع اسم العملية الفعلية أو الوحدة النمطية المحملة كما هو موضح من قبل مصحح الأخطاء.
هنا نقول ببساطة إلى المرسل لتطابق اسم ntkrnlmp.exe (الاسم الحقيقي) بدلاً من ntoskrnl_vuln.exe (اسم IDB).
يغير الواجهة الأمامية لخليط 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 .
في بعض السيناريوهات ، مثل تصحيح الأجهزة المدمجة أو الاتصال بواجهات التصحيح البسيط ، قد يكون من الملائم تجاوز ميزة إعادة صياغة العنوان التلقائي المنفذة في المكونات الإضافية disassembler.
يتم دعم خيار use_raw_addr حاليًا فقط ل Ghidra. في ملف تكوين .sync استخدام:
[GENERAL]
use_raw_addr=true
مطلوب فرع IDA 7.x. للإصدارات القديمة (6.9x) ، يرجى الاطلاع على الإصدار المؤرشفة ida6.9x .
لتثبيت IDA ، نسخ المجلد Syncplugin.py و retsync من دليل ext_ida إلى IDA الإضافات ، على سبيل المثال:
C:Program FilesIDA Pro 7.4plugins%APPDATA%Hex-RaysIDA Proplugins~/.idapro/pluginsAlt-Shift-S ) أو Edit > Plugins > ret-sync [sync] default idb name: ld.exe
[sync] sync enabled
[sync] cmdline: "C:Program FilesPython38python.exe" -u "C:UsersuserAppDataRoamingHex-RaysIDA Propluginsretsyncbroker.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
لاستكشاف الأخطاء وإصلاحها المشكلات مع امتداد IDA يتوفر خياران في الملف retsync/rsconfig.py :
LOG_LEVEL = logging.INFO
LOG_TO_FILE_ENABLE = False
ضبط قيمة LOG_LEVEL إلى logging.DEBUG يجعل Debug المكون الإضافي أكثر مطوّلة.
يؤدي تعيين LOG_TO_FILE_ENABLE إلى True إلى تسجيل تسجيل معلومات الاستثناء من broker.py و dispatcher.py إلى ملفات مخصصة. يتم إنشاء ملف السجل في المجلد %TMP% مع نمط اسم retsync.%s.err .
إما استخدام الإصدار المُصمم مسبقًا من مجلد ext_ghidra/dist أو اتبع التعليمات لإنشائها. يدعم كل بناء ملحق فقط إصدار Ghidra المحدد في اسم ملف البرنامج المساعد. eg ghidra_9.1_PUBLIC_20191104_retsync.zip ل Ghidra 9.1 للجمهور.
apt install gradle$GHIDRA_DIR مع دليل التثبيت الخاص بك) cd ext_ghidra
gradle -PGHIDRA_INSTALL_DIR= $GHIDRA_DIRFile -> Install Extensions... ، انقر فوق علامة + وحدد ext_ghidra/dist/ghidra_*_retsync.zip وانقر فوق "موافق". سيؤدي ذلك إلى استخراج مجلد retsync بشكل فعال من الرمز البريدي إلى $GHIDRA_DIR/Extensions/Ghidra/ [*] retsync init
[>] programOpened: tm.sys
imageBase: 0x1c0000000
Alt+s )/تعطيل ( Alt+Shift+s )/إعادة تشغيل ( Alt+r ). تتوفر نافذة الحالة أيضًا من Windows -> RetSyncPlugin . تريد عمومًا إسقاطه على الجانب لدمجه مع نوافذ بيئة غيدرا.
دعم النينجا الثنائي هو تجريبي ، تأكد من النسخ الاحتياطي لقواعد بيانات التحليل الخاصة بك.
يتطلب Ret-Sync إصدار Ninja الثنائي 2.2 على الأقل وكذلك Python 3 (Python 2 غير مدعوم).
لم يتم توزيع Ret-Sync بعد من خلال مدير البرنامج المساعد Binary Ninja ؛ مطلوب التثبيت اليدوي. ما عليك سوى نسخ محتوى مجلد ext_bn إلى مجلد المكونات الإضافية لـ Binary Ninja ، على سبيل المثال:
%APPDATA%Binary Ninjaplugins
بعد إعادة تشغيل النينجا الثنائية ، يجب أن يكون الإخراج التالي موجودًا في نافذة وحدة التحكم:
[sync] commands added
Loaded python3 plugin 'retsync'
إما استخدام الثنائيات التي تم إنشاؤها مسبقًا أو استخدم حل Visual Studio 2017 المقدم في ext_windbg ، (انظر https://docs.microsoft.com/en-us/visualstudio/releasenotes/VS2017-Relnotes إذا لزم الأمر).
سيؤدي ذلك إلى إنشاء ملف x64releasesync.dll .
ستحتاج إلى نسخ ملف sync.dll الناتج إلى مسار امتداد WindBG المناسب.
بالنسبة للإصدارات السابقة من Windbg ، هذا شيء من هذا القبيل (كن حذرًا من نكهات x86 / x64 ) ، على سبيل المثال
C:Program Files (x86)Windows Kits10Debuggersx64winextsync.dll
يبدو أن المجلد لتخزين التمديد يعتمد على المسار ، لذلك تحتاج إلى وضعه أحد المواقع التي تم الاستعلام عنها.
مثال واحد هو وضعه هنا:
C:UsersuserAppDataLocalMicrosoftWindowsAppssync.dll
.load تحميل) 0:000> .load sync
[sync.dll] DebugExtensionInitialize, ExtensionApis loaded
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 - HostMachineHostUser
[sync] set debugger dialect to windbg, enabling hotkeys
إذا تطابق الوحدة النمطية الحالية لـ Windbg اسم ملف IDA
[sync] idb is enabled with the idb client matching the module name.
ملاحظة: إذا حصلت على الخطأ التالي ، فذلك لأنك لم تقم بنسخ الملف إلى المجلد الصحيح في الخطوات المذكورة أعلاه.
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.
يعني الخطأ أدناه عادة أن 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 تعمل على تحميل كل من الإضافات ( x86 و x64 ) من نفس الدليل ، يمكن للمرء إعادة تسمية ملف x86 sync32.dll .
0:000> .load sync32
ext_gdb/sync.py إلى الدليل الذي تختاره gdb> source sync.py
[sync] configuration file loaded 192.168.52.1:9100
[sync] commands added
دعم LLDB تجريبي ، ولكن:
~/.lldbinit ) lldb> command script import sync
ollydbg 1.10 دعم تجريبي ، ولكن:
دعم Ollydbg2 هو تجريبي ، ولكن:
بناءً على TestPlugin ، https://github.com/x64dbg/testplugin. دعم X64DBG تجريبي ، ولكن:
pluginsdk " في " ext_x64dbgx64dbg_sync ".d32 أو .dp64 ) ضمن دليل البرنامج المساعد X64DBG.بالنسبة لتصحيحات خط الأوامر الموجهة نحو خط الأوامر (وخاصة WindBG و GDB) ، يتم تعريض مجموعة من الأوامر من قبل Ret-Sync للمساعدة في مهمة الهندسة العكسية.
الأوامر أدناه عام (Windbg و GDB) ، يرجى ملاحظة أن A ! هناك حاجة إلى البادئة على Windbg (على سبيل المثال: sync في GDB ، !sync في Windbg).
| قيادة التصحيح | وصف |
|---|---|
synchelp | عرض قائمة الأوامر المتاحة مع شرح قصير |
sync | ابدأ التزامن |
syncoff | توقف عن التزامن |
cmt [-a address] <string> | أضف تعليقًا في IP الحالي في Disassembler |
rcmt [-a address] | إعادة تعيين التعليق في IP الحالي في disassembler |
fcmt [-a address] <string> | إضافة تعليق وظيفة للوظيفة التي يوجد فيها IP الحالي |
raddr <expression> | أضف تعليقًا بعنوان إعادة تقييم تم تقييمه من التعبير |
rln <expression> | احصل على رمز من disassembler للعنوان المحدد |
lbl [-a address] <string> | إضافة اسم تسمية في IP الحالي في disassembler |
cmd <string> | قم بتنفيذ أمر في Debugger وأضف إخراجه كتعليق في IP الحالي في Disassembler |
bc <||on|off|set 0xBBGGRR> | تمكين/تعطيل تلوين المسار في disassembler |
idblist | احصل على قائمة بجميع عملاء IDB المتصلون بالمرسل |
syncmodauto <on|off> | تمكين/تعطيل مفتاح Disassembler Auto بناءً على اسم الوحدة النمطية |
idbn <n> | اضبط IDB النشط على العميل التاسع |
jmpto <expression> | |
jmpraw <expression> | إذا تم تمكين IDB ، فسيتم مزامنة عرض Disassembler مع العنوان الناتج. |
translate <base> <addr> <mod> | Rebase عنوانًا فيما يتعلق باسم الوحدة النمطية وإزاحةه |
أوامر محددة 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 ولكن يطلب رموز من disassembler |
patch | بايت التصحيح في disassembler على أساس السياق المباشر |
bx | على غرار GDB X ولكن باستخدام رمز. سيتم حل الرمز عن طريق التفكيك |
cc | استمر في المؤشر في disassembler |
يهدف حقل إدخال Overwrite idb name تغيير اسم IDB الافتراضي. إنه الاسم الذي يستخدمه البرنامج المساعد للتسجيل لدى المرسل. يعتمد التبديل التلقائي IDB على مطابقة اسم الوحدة النمطية. في حالة الأسماء المتضاربة (مثل foo.exe و foo.dll ) ، يمكن استخدام هذا لتخفيف المطابقة. يرجى ملاحظة ، إذا قمت بتعديل حقل الإدخال أثناء نشطة المزامنة ، فيجب عليك إعادة التسجيل باستخدام المرسل ؛ يمكن القيام بذلك ببساطة باستخدام زر " Restart ".
كتذكير ، من الممكن الاسم المستعار افتراضيًا باستخدام ملف تكوين .sync .
يحدد Ret-Sync هذه الاختصارات العالمية في IDA:
Alt-Shift-S -und -sync pluginCtrl-Shift-S -Toggle Global SyncingCtrl-H تبديل مزامنة الأشعة السداسيةيتوفر زران أيضًا في شريط أدوات التصحيح لتبديل مزامنة الأشعة العالمية و Hex.
Syncplugin.py يسجل أيضا debugger command compper hotkeys.
F2 - تعيين نقطة التوقف على عنوان المؤشرF3 - قم بتعيين نقطة توقف واحدة على عنوان المؤشرCtrl-F2 - تعيين نقطة توقف الأجهزة على عنوان المؤشرCtrl-F3 اضبط نقطة توقف الأجهزة ذات الطلقة الواحدة على عنوان المؤشرAlt-F2 - ترجمة (Rebase في Debugger) عنوان المؤشر الحاليAlt-F5 - اذهبCtrl-Alt-F5 -Run (GDB فقط)F10 - خطوة واحدةF11 - تتبع واحدهذه الأوامر متاحة فقط عندما يكون IDB الحالي نشطًا. عند الإمكان ، تم تنفيذها أيضًا للآخرين.
بمجرد فتح Retsyncplugin ، يمكنك إضافته إلى نافذة Codebrowser بواسطة Drag'n'Drop البسيط:

إذا كنت ترغب في عرض عدة وحدات ، فيجب أن تكون الملفات مفتوحة في نفس عارض Codebrowser ، ما عليك سوى سحب الحالات الإضافية في نافذة Codebrowser للحصول على النتيجة على النحو الوارد أعلاه.
يحدد Ret-Sync هذه الاختصارات العالمية في Ghidra:
Alt-S - تمكين المزامنةAlt-Shift-S تعطيل المزامنةAlt-R - إعادة التشغيل المزامنةAlt-Shift-R إعادة تحميليتم أيضًا تنفيذ الروابط عبر أوامر التصحيح. أنها تشبه تلك الموجودة في امتداد IDA (باستثناء أمر "GO").
F2 - تعيين نقطة التوقف على عنوان المؤشرCtrl-F2 - تعيين نقطة توقف الأجهزة على عنوان المؤشرAlt-F3 اضبط نقطة توقف واحدة على عنوان المؤشرCtrl-F3 اضبط نقطة توقف الأجهزة ذات الطلقة الواحدة على عنوان المؤشرAlt-F2 - ترجمة (Rebase في Debugger) عنوان المؤشر الحاليF5 - اذهبAlt-F5 - RUN (GDB فقط)F10 - خطوة واحدةF11 - تتبع واحد يحدد Ret-Sync هذه الاختصارات العالمية في النينجا الثنائية:
Alt-S - تمكين المزامنةAlt-Shift-S تعطيل المزامنةيتم أيضًا تنفيذ الروابط عبر أوامر التصحيح. فهي تشبه تلك الموجودة في امتداد IDA.
F2 - تعيين نقطة التوقف على عنوان المؤشرCtrl-F2 - تعيين نقطة توقف الأجهزة على عنوان المؤشرAlt-F3 اضبط نقطة توقف واحدة على عنوان المؤشرCtrl-F3 اضبط نقطة توقف الأجهزة ذات الطلقة الواحدة على عنوان المؤشرAlt-F2 - ترجمة (Rebase في Debugger) عنوان المؤشر الحاليAlt-F5 - اذهبF10 - خطوة واحدةF11 - تتبع واحد [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
[WinDbg]
0:000:x86> !rcmt
[sync] !rcmt called
[IDA]
.text:00430DB1 push edi
[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
ملاحظة: استدعاء هذا الأمر بدون وسيطة إعادة تعيين تعليق الوظيفة.
[WinDbg]
0:000:x86> !lbl meaningful_label
[sync] !lbl called
[IDA]
.text:000000000040271E meaningful_label:
.text:000000000040271E mov rdx, rsp
[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
[WinDbg]
0:000> !idblist
> currently connected idb(s):
[0] target.exe
[WinDbg]
0:000> !syncmodauto off
[IDA]
[*] << broker << dispatcher msg: sync mode auto set to off
[WinDbg]
0:000:> !idbn 0
> current idb set to 0
في هذا المثال ، كان من الممكن تعيين عميل IDB النشط الحالي على:
[0] target.exe.
Alt-F2 ) ، Rebase عنوانًا فيما يتعلق باسم الوحدة النمطية وإزاحةه. يدعم أوامر CMT ، ! RCMT و ! FCMT خيار عنوان اختياري: -a أو --address . يجب تمرير العنوان كقيمة سداسية عشرية. يعتمد تحليل الأوامر على وحدة argparse الخاصة بـ Python. لوقف استخدام خط التحليل -- .
[WinDbg]
0:000:x86> !cmt -a 0x430DB2 comment
يجب أن يكون العنوان عنوان تعليمي صالح.
المزامنة مع المضيف:
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) cmd x/i $pc
[sync] command output: => 0x8049ca3: push edi
(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>
(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 ()
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)
lldb> process launch -s
lldb> sync
[sync] connecting to localhost
[sync] sync is now enabled with host localhost
[sync] event handler started
lldb> synchelp
[sync] extension commands help:
> sync <host> = synchronize with <host> or the default value
> syncoff = stop synchronization
> cmt <string> = add comment at current eip in IDA
> rcmt <string> = reset comments at current eip in IDA
> fcmt <string> = add a function comment for 'f = get_func(eip)' in IDA
> cmd <string> = execute command <string> 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
Alt+s )/تعطيل ( Alt+u ) التزامن. Ctrl+s )/تعطيل التزامن ( Ctrl+u ).نظرًا لحالة بيتا لـ OLLYDBG2 API ، تم تنفيذ الميزات التالية فقط:
F7 ؛ F8 للتخطي]CTRL+; ]CTRL+: ] استخدم قائمة الإضافات أو الأوامر تمكين (" !sync" ) أو تعطيل (" !syncoff ") التزامن.
استخدم الأوامر
[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
ملاحظة: استخدام الأمر ! ترجمة من Disassembler (IDA/Ghidra ، Alt-F2 اختصار) ، سيجعل نافذة disassembler "القفز" إلى العنوان المحدد (ما يعادل تشغيل العارض في سطر أوامر X64DBG).
قد يرغب المرء في استخدام الميزات الأساسية لـ Ret-Sync (مزامنة الموضع مع disassembler ، دقة الرموز) على الرغم من أن بيئة تصحيح الأخطاء الكاملة غير متوفرة أو مع أداة مخصصة. تحقيقا لهذه الغاية ، تم استخراج مكتبة بيثون الحد الأدنى.
يوضح المثال أدناه استخدام مكتبة 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 ()على الرغم من التركيز في البداية على التحليل الديناميكي (Defuggers) ، من الممكن تمديد مجموعة المكونات الإضافية والاندماج مع الأدوات الأخرى.
موارد (موارد) أخرى:
مع GDB:
مع Windbg:
g '). هذا يمكن أن يسبب تباطؤ كبير إذا كان هناك الكثير من هذه الأحداث. تم تنفيذ إصلاح محدود ، لا يزال الحل الأفضل هو المزامنة مؤقتًا.مع Ghidra:
مع IDA:
الصراع (ق):
.sync عالمي لتحديد منفذ مختلف. [INTERFACE]
host=127.0.0.1
port=9234
Ret-Sync هو برنامج مجاني: يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة GNU العامة العامة كما تم نشرها من قبل مؤسسة البرمجيات المجانية ، إما الإصدار 3 من الترخيص ، أو (في خيارك) أي إصدار لاحق.
يتم توزيع هذا البرنامج على أمل أن يكون مفيدًا ، ولكن بدون أي ضمان ؛ بدون حتى الضمان الضمني للتسويق أو اللياقة لغرض معين. راجع رخصة GNU العامة لمزيد من التفاصيل.
يجب أن تكون قد تلقيت نسخة من رخصة GNU العامة العامة مع هذا البرنامج. إذا لم يكن الأمر كذلك ، راجع http://www.gnu.org/licenses/.
يتم إصدار المكون الإضافي Binary Ninja تحت رخصة MIT.
Hail to Bruce Dang و Stalkr و @Ivanlef0u و Damien Aumaître و Sébastien Renaud و Kévin Szkudlapski و @ M00dy و SaideLike و Xavier Mehrenberger و Ben64 و Raphaël Rigo و Jiss للحصول على لطفهم ومساعدة وأفكار. Ilfak Guilfanov و Igor Skochinsky و Arnaud Diederen لمساعدتهما في IDA الداخليين ودعمهم المتميز. شكرًا لك على Jordan Wiens و Vector 35. أخيرًا ، شكرًا لك أيضًا على جميع المساهمين وكل من أبلغ عن المشكلات/الأخطاء.