CJK Workbench
वर्कफ़्लो

व्यावहारिक रिवर्स इंजीनियरिंग, एक-एक फ़ंक्शन करके

03
परिदृश्य

व्यावहारिक रिवर्स इंजीनियरिंग कैसे शुरू करें

अपने कंपाइल किए C प्रोग्राम से एक छोटा फ़ंक्शन चुनें और उसे पहले निर्देश से आखिरी return तक पढ़ें। कानून और लाइसेंस की शर्तें देश के अनुसार अलग होती हैं, इसलिए केवल अपना कोड या अभ्यास फ़ाइलें इस्तेमाल करें। नीचे चार चरण हैं।

01

अपना प्रोजेक्ट फ़ोल्डर खोलें

ऐसा वर्किंग फ़ोल्डर चुनें जिसमें आपका C सोर्स, कंपाइल की हुई फ़ाइल की कॉपी और बाद में एक्सपोर्ट की हुई लिस्टिंग हो।

02

टेक्स्ट लिस्टिंग एक्सपोर्ट करें

Shell से अपने डिसअसेंबलर की एक्सपोर्ट कमांड कॉपी पर चलवाएँ, या लिस्टिंग खुद सहेजें, ताकि नतीजा टेक्स्ट फ़ाइल हो।

03

व्याख्या माँगें

एजेंट से लिस्टिंग पढ़ने और फ़ंक्शन को पंक्ति-दर-पंक्ति समझाने को कहें, फिर नोट्स write_file से सहेजें।

04

जवाब जाँचें

नोट्स को अपने सोर्स और लिस्टिंग से मिलाएँ, Ask first में diff पढ़ें, और अगर कानूनी हो तो नतीजा लैब में टेस्ट करें।

पढ़ने के लिए एक सिखाने वाली लिस्टिंग

add_numbers.asm
; add_numbers.asm - teaching listing, x64 Windows
; Returns the sum of its first two integer arguments.
; Argument 1 arrives in ecx (low half of rcx).
; Argument 2 arrives in edx (low half of rdx).
add_numbers:
    mov eax, ecx    ; copy argument 1 into eax
    add eax, edx    ; add argument 2, the sum stays in eax
    ret             ; return to the caller, result in eax

यह फ़ंक्शन दो इंटीजर जोड़ता है। Windows x64 कन्वेंशन में आर्ग्युमेंट ecx और edx में आते हैं, योग eax में बनता है, और ret नियंत्रण कॉलर को लौटा देता है।

रिवर्स इंजीनियरिंग क्लास के लिए दो अभ्यास

अपने लिखे फ़ंक्शन से शुरुआत करें

शुरुआत करने वालों का आम सवाल है कि असेंबली कैसे शुरू करें, और जवाब है आपका अपना लिखा फ़ंक्शन। छोटा C फ़ंक्शन लिखें, कंपाइल करें और लिस्टिंग टेक्स्ट में एक्सपोर्ट करें। read_file लिस्टिंग खोलता है और एजेंट हर निर्देश समझाता है: कौन-सा रजिस्टर किस आर्ग्युमेंट को रखता है, स्टैक क्या करता है और नतीजा कहाँ लौटता है। write_file ये व्याख्याएँ notes/begin.md में सहेजता है। Plan only में एजेंट पहले ये चरण सूचीबद्ध करता है। अभी कुछ नहीं चलता। फिर Ask first पर जाएँ और हर सेव से पहले diff पढ़ें। अंत में नोट्स को अपने सोर्स से मिलाएँ और, अगर कानूनी हो, तो कंपाइल किया फ़ंक्शन लैब में टेस्ट करें।

अपनी लाइब्रेरी के फ़ंक्शन दस्तावेज़ित करें

APIs की रिवर्स इंजीनियरिंग का अच्छा अभ्यास है अपनी लाइब्रेरी के उजागर फ़ंक्शनों की सूची बनाना और लिखना कि हर आर्ग्युमेंट क्या करता है। अपने टूल से इम्पोर्ट और उजागर फ़ंक्शनों की सूची टेक्स्ट के रूप में सहेजें, फिर एजेंट grep से किसी एक फ़ंक्शन की हर कॉल खोजता है और read_file से उसके आसपास की पंक्तियाँ खोलता है। वह notes/api.md में तालिका का मसौदा बनाता है, और edit_file हर बदलाव diff के रूप में दिखाता है। एक फ़ंक्शन से शुरू करें। यही तरीका आपके अपने पुराने कोड के काम करने का ढंग दोबारा समझने में भी मदद करता है। एजेंट किसी टाइप या मकसद पर गलत हो सकता है, इसलिए स्वीकार करने से पहले हर पंक्ति को अपने सोर्स और अपने टेस्ट से मिलाएँ।

Windows के लिए CJK Workbench

अपने उदाहरण पर काम करें

CJK Workbench डाउनलोड करें ↗