
फर्मवेयर रिवर्स इंजीनियरिंग पर कार्यशाला
इस रिपॉजिटरी में स्लाइड्स और Emproof के फ़र्मवेयर रिवर्स इंजीनियरिंग कार्यशाला के लिए व्यावहारिक सामग्री शामिल है, जिसे ScapyCon Automotive 2025 में प्रस्तुत किया गया। यह कार्यशाला न्यूनतम सुरक्षा अनुभव वाले तकनीकी दर्शकों के लिए है और व्यावहारिक, स्व-निहित कार्यों के माध्यम से बुनियादी बातें सिखाती है। विषयों में शामिल हैं:
अगर यह आपके काम की चीज़ है, तो Emproof तकनीकी वेबिनार श्रृंखला भी देखें, जिसमें अतिरिक्त अभ्यास और रिकॉर्ड किए गए सत्र शामिल हैं।
कार्यशाला की सामग्री Tim Blazytko द्वारा डिज़ाइन और व्यवस्थित की गई थी, जिसमें Simran Kathpalia का सहयोग रहा।
पर्यावरण सेट करने के लिए, रिपॉजिटरी को क्लोन करें:
git clone https://github.com/emproof-com/workshop_firmware_reverse_engineering
cd workshop_firmware_reverse_engineering
कई कार्यों के लिए हमें AArch64 Linux निष्पादन वातावरण की आवश्यकता होती है। हम Kali Linux पर आधारित एक Docker कंटेनर प्रदान करते हैं, जिसमें सामान्य उपकरण (जैसे, GNU Binutils, Binwalk) पहले से इंस्टॉल होते हैं। यह Linux, Windows और macOS पर होस्ट CPU आर्किटेक्चर की परवाह किए बिना वातावरण को सुव्यवस्थित करता है। कंटेनर शुरू करने और शेल में प्रवेश करने के लिए, निष्पादित करें:
./docker_run.sh
नोट: पहली बार चलाने में इमेज बनने में कुछ समय लग सकता है।
नोट (आर्किटेक्चर): Docker Compose सेवा
platform: "linux/arm64"सेट करती है।
x86_64 होस्ट (Intel macOS/Windows/Linux) पर Docker Desktop इमेज को एमुलेशन के तहत चलाएगा, इसलिए पहला बिल्ड और स्टार्टअप धीमा हो सकता है — यह अपेक्षित है। मूल ARM64 होस्ट (Apple Silicon, ARM सर्वर) पर यह मूल रूप से चलता है और तेज़ है।
नोट: Docker कंटेनर ARMv7 (armhf) बाइनरी भी चला सकता है। हम इमेज में armhf रनटाइम (डायनामिक लोडर + लाइब्रेरीज़) इंस्टॉल करते हैं और स्टार्टअप स्क्रिप्ट के माध्यम से
aarch64औरarmदोनों के लिए binfmt हैंडलर पंजीकृत करते हैं।
इसके अलावा, इंटरैक्टिव रिवर्स इंजीनियरिंग कार्यों के लिए अपने होस्ट पर निम्नलिखित ग्राफ़िकल टूल इंस्टॉल करें (ये कंटेनर में शामिल नहीं हैं):
दोनों उपकरण Windows, Linux और macOS के लिए उपलब्ध हैं।
नोट: Binary Ninja Free AArch64 का समर्थन नहीं करता है। AArch64 विश्लेषण के लिए Ghidra (या लाइसेंस प्राप्त Binary Ninja बिल्ड) का उपयोग करें। इसलिए, कई लैब्स विशेष रूप से Binary Ninja Free के लिए एक ARMv7 कंपेनियन बाइनरी (
*.armv7) भेजती हैं; इन्हें उसी कंटेनर में भी चलाया जा सकता है।
प्रत्येक कार्य tasks/<name>/ में स्व-निहित है और इसमें शामिल है:
samples/ — अभ्यास में उपयोग की जाने वाली बाइनरी (और कभी-कभी स्रोत)task.md — चरण-दर-चरण निर्देशों और संकेतों के साथ असाइनमेंटकार्यों को स्वतंत्र रूप से आज़माया जा सकता है, लेकिन हम एक अनुशंसित क्रम प्रदान करते हैं (नीचे सूचीबद्ध) जो कठिनाई को बढ़ाता है और धीरे-धीरे नई तकनीकों का परिचय देता है। अधिकांश सैंपल ARMv7 (Thumb/ARM32) या AArch64 को लक्षित करते हैं; जहाँ प्रासंगिक हो, कार्य नोट्स आर्किटेक्चर, आवश्यक उपकरण और किसी भी विशेष रनटाइम आवश्यकताओं को उजागर करते हैं।
tasks/hello_world: ELF फ़ाइलों और मेटाडेटा विश्लेषण की मूल बातें; Ghidra / Binary Ninja में पहला कदम।
tasks/license_check: हार्डकोडेड रहस्य निकालना / सुविधाओं को अनलॉक करना; सत्यापन को बायपास करने के लिए बुनियादी पैचिंग (क्रैकिंग)।
tasks/game: सरल संख्या-अनुमान खेल; तर्क को समझें और ट्रायल बनाम फुल मोड को क्रैक करें।
tasks/keygenning_1: लाइसेंस सत्यापन को रिवर्स करें और मान्य सीरियल उत्पन्न करने के लिए एक न्यूनतम कीजन लिखें।
tasks/keygenning_2: थोड़ा अधिक परिष्कृत कीजनिंग कार्य (सॉल्ट/कुंजियाँ, हेक्स एन्कोडिंग)।
tasks/string_encryption: एन्क्रिप्टेड स्ट्रिंग्स वाली बाइनरी (मैलवेयर में आम); डिक्रिप्टर की पहचान करें और स्ट्रिंग्स को स्टैटिक रूप से पुनर्प्राप्त करें।
tasks/mirai: स्ट्रिंग-डिक्रिप्शन रूटीन का उपयोग करने वाला एम्बेडेड मैलवेयर; बड़े कोडबेस को नेविगेट करें, दिलचस्प निर्माणों की पहचान करें और ऑबफस्केटेड स्ट्रिंग्स से निपटें।
tasks/embedded_linux_1: फाइलसिस्टम के साथ एम्बेडेड-लिनक्स फ़र्मवेयर; अनपैक करें, अन्वेषण करें और लिनक्स लॉगिन जानकारी को क्रैक करें (CTF-शैली)।
tasks/embedded_linux_2: समान, लेकिन एक छिपी हुई बाइनरी खोजें और उसका विश्लेषण करें जिसे वहाँ नहीं होना चाहिए।
tasks/car_demo: बेयर-मेटल फ़र्मवेयर विश्लेषण: आर्किटेक्चर, बोर्ड, मेमोरी मैप, टूलचेन आर्टिफैक्ट्स की पहचान करें; Wi-Fi क्रेडेंशियल्स और प्रोटोकॉल एंडपॉइंट निकालें।
जब तक अन्यथा उल्लेख न किया गया हो, इस रिपॉजिटरी में सभी कार्यशाला सामग्री GNU जनरल पब्लिक लाइसेंस, संस्करण 2 (GPL-2.0) के तहत लाइसेंस प्राप्त है। पूरा पाठ देखने के लिए LICENSE देखें।
कुछ थर्ड-पार्टी / बाह्य रूप से स्रोतित सैंपल GPL से बाहर रखे गए हैं और केवल विश्लेषण/शिक्षा के लिए प्रदान किए गए हैं (कोई पुनर्वितरण नहीं)। ये हैं:
नोट: यदि किसी सबडायरेक्ट्री में उसका अपना लाइसेंस फ़ाइल या हेडर शामिल है, तो वह लाइसेंस उस सबडायरेक्ट्री की सामग्री के लिए प्राथमिकता लेता है।
tasks/iot_diag: डायग्नोस्टिक्स टूल का बेयर-मेटल फ़र्मवेयर डंप; डेटाशीट से मेमोरी लेआउट को फिर से बनाएँ, फिर डायग्नोस्टिक्स मोड को अनलॉक करने के लिए पासवर्ड खोजें।
tasks/crypto_detection: हार्डकोडेड AES कुंजी के साथ क्रिप्टोग्राफ़िक ऑपरेशन करने वाली AArch64 बाइनरी; EVP कॉल का पता लगाएं और प्रोग्राम के बिना डिक्रिप्ट करने के लिए कुंजी/IV का पता लगाएं।
tasks/license_check_anti_patching: कोड चेकसमिंग के माध्यम से एंटी-पैचिंग; CRC गार्ड को समझें और इसे बायपास करने के तरीके सीखें।
tasks/fibonacci_obfuscation: स्वच्छ बनाम ऑबफस्केटेड Fibonacci कार्यान्वयन (स्विच फ़्लैटनिंग, कंप्यूटेड गोटो, अपारदर्शी प्रेडिकेट्स, अंकगणितीय ऑबफस्केशन, छोटा VM); तकनीकों को समझें और उन्हें सामान्य करें।