
ret-sync एक प्लगइन्स का सेट है जो डिबगिंग सत्र (WinDbg/GDB/LLDB/OllyDbg2/x64dbg) को IDA/Ghidra/Binary Ninja डिसअसेंबलरों के साथ सिंक्रोनाइज़ करने में मदद करता है।
ret-sync का मतलब Reverse-Engineering Tools SYNChronization है। यह प्लगइन्स का एक सेट है जो डिबगिंग सत्र (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: GDB प्लगइनext_lldb/sync.py: LLDB प्लगइनext_olly1: OllyDbg 1.10 प्लगइनext_olly2: OllyDbg v2 प्लगइनext_x64dbg: x64dbg प्लगइनडिसअसेंबलर प्लगइन्स:
ext_ida/SyncPlugin.pyext_ghidra/dist/ghidra_*_retsync.zip: Ghidra प्लगइनext_bn/retsync: Binary Ninja प्लगइनऔर लाइब्रेरी प्लगइन:
ext_lib/sync.py: स्वतंत्र पायथन लाइब्रेरीIDA और GDB प्लगइन्स को एक मान्य पायथन सेटअप की आवश्यकता होती है। पायथन 2 (>=2.7) और पायथन 3 समर्थित हैं।
WinDbg/OllyDbg/OllyDbg2/x64dbg डीबगर्स के लिए पूर्व-निर्मित बाइनरी एक Azure DevOps पाइपलाइन के माध्यम से प्रस्तावित हैं:
अंतिम बिल्ड चुनें और Related अनुभाग के अंतर्गत आर्टिफैक्ट्स की जाँच करें: 6 प्रकाशित।

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
The ``[ALIASES]`` अनुभाग का उपयोग उस नाम को अनुकूलित करने के लिए किया जाता है जो एक डिस्सेम्बलर (IDA/Ghidra) द्वारा किसी मॉड्यूल को उसके डिस्पैचर/प्रोग्राम प्रबंधक में पंजीकृत करने के लिए उपयोग किया जाता है।
डिफ़ॉल्ट रूप से, डिस्सेम्बलर प्लगइन्स इनपुट फ़ाइल का नाम उपयोग करते हैं। हालांकि, हो सकता है कि किसी ने फ़ाइल का पहले से नाम बदल दिया हो और वह डीबगर द्वारा देखे गए वास्तविक प्रक्रिया या लोड किए गए मॉड्यूल के नाम से मेल न खाता हो।
यहाँ हम डिस्पैचर को बस यह बताते हैं कि `ntkrnlmp.exe` (वास्तविक नाम) का मिलान करें, न कि `ntoskrnl_vuln.exe` (IDB नाम) का।
## Qt Creator डिबगिंग फ्रंटएंड के साथ gdb
Qt Creator डिबगिंग फ्रंटएंड gdb कमांड आउटपुट के लॉग होने के तरीके को बदल देता है। चूंकि यह सिंक्रोनाइज़ेशन में हस्तक्षेप करेगा, इसलिए एक विकल्प मौजूद है जो अस्थायी फ़ाइल के बजाय सिंक्रोनाइज़ेशन के लिए रॉ gdb आउटपुट का उपयोग करता है। .sync कॉन्फ़िगरेशन फ़ाइल में उपयोग करें```
[GENERAL]
use_tmp_logging_file=false
यदि आप लक्ष्य के लिए Qt डिबगिंग फ्रंटएंड का उपयोग करना चाहते हैं।
/proc/<pid>/mapsकुछ परिदृश्यों में, जैसे कि सीरियल या QEMU में रॉ फर्मवेयर पर एम्बेडेड उपकरणों को डीबग करना, gdb PID से अवगत नहीं होता है और /proc/<pid>/maps तक पहुँच नहीं सकता है।
इन मामलों में, [INIT] अनुभाग का उपयोग प्लगइन को एक कस्टम कॉन्टेक्स्ट पास करने के लिए किया जाता है। यह PID और मेमोरी मैपिंग जैसे कुछ फ़ील्ड को ओवरराइड करने की अनुमति देता है।