RetDec Imortek · v2.0.21

एक डीकंपाइलर जो वापस निकालता है एल्गोरिदम, सिर्फ़ कोड नहीं

संगठनों को अक्सर ऐसा सॉफ़्टवेयर समझना पड़ता है जिसका स्रोत कोड उनके पास नहीं है: कोई पुराना सिस्टम, बाहर से ख़रीदा गया कोई हिस्सा, या कुछ ऐसा जो आया है और संदिग्ध लगता है। ऐसे औज़ार पहले से हैं जो मशीन कोड को वापस पढ़ने लायक़ चरणों में बदल देते हैं। RetDec Imortek एक क़दम और आगे जाकर यह बताने की कोशिश करता है कि वे चरण हैं क्या — यह हिस्सा उन्नत एन्क्रिप्शन मानक (AES) है, यह हिस्सा एक छँटाई है, यह हिस्सा बताता है कि भेजने के लिए डेटा कैसे बाँधा गया है।

भाषाC++
संस्करणv2.0.21
अपस्ट्रीमRetDec v5.0
स्टार2
आख़िरी पुशहाल ही में
RetDec को फ़ोर्क क्यों किया

अपस्ट्रीम RetDec v5.0, 2022 से निष्क्रिय है। यह उन गिने-चुने खुले डीकंपाइलरों में से एक है जिनका फ़्रंट एंड सचमुच चौड़ा है — और उस चौड़ाई को ज़िंदा रखना क़ीमती है।

जोड़ा गयालाइब्रेरी को अर्थ के स्तर पर वापस निकालना
जोड़ा गयाQt 6 इंटरफ़ेस
जोड़ा गयावैकल्पिक ऑफ़लाइन तंत्रिका परिष्करण
जोड़ा गयाएल्गोरिदम, समवर्तीता & क्रमबद्धीकरण की पहचान
सीधी-सादी भाषा में

यह क्या है, एक मिनट में

समस्या

सॉफ़्टवेयर ऐसी शक्ल में भेजा जाता है जिसे मशीन पढ़ लेती है और इंसान नहीं। जब स्रोत कोड है ही नहीं — आपूर्तिकर्ता जा चुका, अनुबंध में वह कभी शामिल ही नहीं था, फ़ाइल ऐसी जगह से आई जिस पर आपको भरोसा नहीं — तब कोई नहीं बता सकता कि प्रोग्राम सचमुच करता क्या है। हाथ से जाँचने का मतलब है मशीन के निर्देश एक-एक करके पढ़ना।

समाधान

यह कंपाइल हो चुकी फ़ाइल को खोलकर उससे C दोबारा बनाता है: परीक्षण संग्रह की सभी 216 बाइनरी ऐसी C बनकर लौटती हैं जो बिल्ड हो जाती है। फिर वह मतलब के पीछे जाता है — कौन-सी क्रिप्टोग्राफ़ी, कौन-सी छँटाई, कौन-सी थ्रेडिंग, कौन-सा फ़ाइल प्रारूप — और बताता है कि यह कितनी बार काम करता है, उस हालत समेत जहाँ यह मुश्किल से ही चलता है।

यह किसके लिए है

मैलवेयर खोलकर देखने वाली सुरक्षा टीमें, जिन्हें कोड से पहले जवाब चाहिए। ऐसा सॉफ़्टवेयर चला रही कंपनियाँ जिसका स्रोत किसी के पास नहीं, और जिन्हें कुछ भी सुरक्षित ढंग से दोबारा बनाने या बदलने से पहले उसका ब्यौरा चाहिए। और वे सब जो ऐसे फ़ाइल प्रारूप में फँसे हैं जिसका दस्तावेज़ कभी बना ही नहीं — पुराने रिकॉर्ड, या ऐसी मशीन जो सिर्फ़ अपने ही सॉफ़्टवेयर से बात करती है।

एल्गोरिदम का नाम बताना ही मुश्किल हिस्सा है, और उसके दोनों आँकड़े यहीं हैं। जिस बाइनरी पर उसके अपने लेबल अब भी हों, उस पर डिटेक्टर उनसे सहमत रहता है; लेबल हटा दिए जाएँ तो वह अटकल के क़रीब है। इस पृष्ठ का बाक़ी हिस्सा इंजीनियरिंग है: क्या जोड़ा गया, उसे कैसे नापा गया, और वह कहाँ गिरता है।
सबसे नीचे का पायदान, सचमुच चलता हुआ

असली डिकोडर, WebAssembly में कंपाइल किया हुआ

इससे ऊपर की हर चीज़ अमूर्तन की सीढ़ी पर एक लिखी हुई सैर है। यह पहला पायदान है जो सचमुच चलता है: Capstone — वही डिसअसेंबलर जिसे नेटिव RetDec बिल्ड लिंक करता है — और वह आपके चिपकाए हुए बाइट्स डिकोड करता है।

capstone — WebAssembly

791 किलोबाइट (KB), क्योंकि एक असली x86 डिकोडर पूरा इंस्ट्रक्शन सेट साथ रखता है — हर एनकोडिंग, हर प्रीफ़िक्स, हर एक्सटेंशन। इस चीज़ का ईमानदार आकार यही है।

डिकोडर
—
निर्देश
—
यह डिकोडर है, डीकंपाइलर नहीं। ऊपर के पायदान — LLVM मध्यवर्ती निरूपण (IR) तक उठाना, नियंत्रण-प्रवाह को ढाँचा देना, एल्गोरिदम का नाम बताना — LLVM का काम हैं, और LLVM किसी भी आकार में एक वेब पृष्ठ में नहीं समाता। इससे उलट कहना इस साइट का सबसे आसान झूठ होता।
Capstone 5, Emscripten से बना, सिर्फ़ x86। नेटिव बिल्ड यही लाइब्रेरी यहाँ से लिंक करता है: deps/capstone.
फ़्रंट एंड

नेटिव, बाइटकोड और उभरते प्रारूप

आउटपुट प्रारूप पर निर्भर करता है, क्योंकि यह दिखावा कि हर चीज़ C में डीकंपाइल हो जाती है, किसी के काम नहीं आता। फ़्रंट एंड नेटिव बाइनरी लेता है: निष्पादनीय और लिंक-योग्य प्रारूप (ELF), पोर्टेबल निष्पादनीय (PE) और Mach-O; बाइटकोड, जिनमें Java वर्चुअल मशीन (JVM) की क्लास फ़ाइलें, Dalvik निष्पादनीय (DEX) और साझा मध्यवर्ती भाषा (CIL) शामिल हैं; और CUDA की समांतर थ्रेड निष्पादन (PTX) जैसे नए लक्ष्य।

नेटिव

ELF · PE · Mach-O

C छद्म-कोड देता है, और साथ में वह अर्थ की परत जिसके लिए यह फ़ोर्क बना है।

बाइटकोड

Python · Lua · JVM · DEX · CIL

Python और Lua बाइटकोड अपनी ही भाषाओं में लौटते हैं; मैनेज्ड कोड के रास्ते Java-परिवार या C#-परिवार का आउटपुट देते हैं।

उभरते हुए

WebAssembly · CUDA PTX

WebAssembly को WebAssembly टेक्स्ट प्रारूप (WAT) में बदला जाता है। PTX को बाद की सोच नहीं, बल्कि पहले दर्जे का इनपुट माना गया है।

इंटरैक्टिव

किसी फ़ंक्शन को अमूर्तन की सीढ़ी चढ़ते देखिए

कोई बाइनरी फ़ंक्शन चुनिए और उसे पाइपलाइन से क़दम-दर-क़दम गुज़ारिए: कच्चे बाइट, डिसअसेंबली, उठाया हुआ IR, C छद्म-कोड, और आख़िर में अर्थ का फ़ैसला — नामित एल्गोरिदम, उस सबूत के साथ जिससे उसे पहचाना गया।

अमूर्तन के पाँच पायदान: कच्चे बाइट, डिसअसेंबली, उठाया हुआ IR, C छद्म-कोड, और नामित एल्गोरिदम अपने विनिर्देश के हवाले के साथ
पूरा आरेख देखने के लिए स्क्रॉल करें →
आख़िरी पायदान ही उत्पाद है। उससे ऊपर की हर चीज़ वही है जो दूसरे डीकंपाइलर पहले से देते हैं।

retdec — विनिर्देश निष्कर्षण


          

अर्थ का फ़ैसला

अभी वापस नहीं निकाला गया
अर्थ वाले चरण तक क़दम-दर-क़दम पहुँचिए।

सबूत

विश्वास
—
मोड
नाम-रहित

सिंबल हटा दिए जाएँ तो पहचान सिर्फ़ ढाँचे से करनी पड़ती है — स्थिरांक, राउंड की गिनती, नियंत्रण-प्रवाह का आकार। यही मुश्किल हालत है, और नापा हुआ F1 0.056 इसी की बात करता है।

असली पुनर्प्राप्ति चरणों की एक लिखी हुई सैर, जो इस पृष्ठ के लिए बनाई गई है। डीकंपाइलर ख़ुद C++ में है और ऑफ़लाइन चलता है।
यह क्या वापस निकालता है

ढाँचे के छह परिवार

रनटाइम

मानक टेम्पलेट लाइब्रेरी (STL) के कंटेनर और C++ रनटाइम की संरचनाएँ — आवंटन के पैटर्न से दोबारा उभरते std::vector का आकार।

क्रिप्टोग्राफ़ी

AES, सुरक्षित हैश एल्गोरिदम (SHA) परिवार, ChaCha20, Rivest–Shamir–Adleman (RSA) और दीर्घवृत्तीय वक्र की आदिम क्रियाएँ, जिन्हें स्थिरांकों और राउंड की बनावट से पहचाना जाता है।

छँटाई & खोज

Introsort, merge sort, binary search — उस गहराई-सीमा वाले स्विच समेत जो introsort की चुगली कर देता है।

ग्राफ़

ग्राफ़ एल्गोरिदम, साथ ही चौड़ाई-प्रथम खोज (BFS) और गहराई-प्रथम खोज (DFS) के भ्रमण पैटर्न।

समवर्तीता

std::thread, pthreads, OpenMP, Threading Building Blocks (TBB) और कच्चे एटॉमिक।

क्रमबद्धीकरण

Protobuf, FlatBuffers, MessagePack, JavaScript ऑब्जेक्ट नोटेशन (JSON) और एक्सटेंसिबल मार्कअप लैंग्वेज (XML) की फ़्रेमिंग।

मापा हुआ

216 बाइनरी, और वह आँकड़ा जो चुभता है

परीक्षण संग्रह की सभी 216 ELF बाइनरी बिल्ड होने लायक़ C देती हैं, साथ में --buildable, जो तयशुदा तौर पर चालू रहता है। एल्गोरिदम वापस निकालने की कहानी अलग है, और उसे बताने का ईमानदार तरीक़ा यह है कि दोनों आँकड़े साथ-साथ रखे जाएँ।

मापनतीजाशर्त
बिल्ड होने लायक़ C आउटपुट216 / 216--buildable, तयशुदा तौर पर चालू
एल्गोरिदम वापस निकालने का F10.056नाम-रहित, 95% विश्वास अंतराल 0.034–0.083
एल्गोरिदम वापस निकालने का F11.000नाम-सहित, सिंबल वाली बाइनरी
तयशुदा .c दोबारा कंपाइल होती हैनहींन यह फ़ोर्क, न स्टॉक RetDec
उन दोनों F1 आँकड़ों को साथ पढ़िए। सिंबल के साथ 1.000 का मतलब है कि डिटेक्टर सिंबल टेबल से सहमत है। सिंबल के बिना 0.056 का मतलब है कि सिंबल हटी बाइनरी पर ढाँचे की वापसी आज अटकल के क़रीब है। सिर्फ़ पहला आँकड़ा बताना मार्केटिंग होती; सिर्फ़ दूसरा बताना यह छिपा लेता कि जब पाइपलाइन को कुछ भी सहारा मिलता है, तब वह काम करती है।
तंत्रिका परिष्करण

वैकल्पिक, ऑफ़लाइन, और पहरे के नीचे

परिष्करण llama.cpp के ज़रिए GGUF मॉडलों से चलता है, पूरी तरह ऑफ़लाइन, और सिर्फ़ तब जब RETDEC_NEURAL_REFINE=1 हो और मॉडल का पथ दिया गया हो। यह तयशुदा तौर पर बंद रहता है और बेसलाइन की जगह कभी नहीं लेता।

  • कंपाइल का पहरा। परिष्कृत आउटपुट को स्वीकार होने से पहले gcc -fsyntax-only पास करना ज़रूरी है।
  • ढाँचे की जाँच। परिष्करण को फिर भी उठाए हुए ढाँचे से मेल खाना होगा।
  • नियतात्मक बेसलाइन बचाकर रखी जाती है। बिना परिष्कार वाला डीकंपाइलर आउटपुट ही वह चीज़ रहती है जिसकी जाँच हो सकती है। अगर आपको किसी निष्कर्ष का बचाव करना है, तो आप उसी का बचाव करते हैं।
  • कोई नेटवर्क नहीं। स्थानीय GGUF इन्फ़रेंस। आपकी बाइनरी की कोई बात मशीन से बाहर नहीं जाती।
$ export RETDEC_NEURAL_REFINE=1
$ export RETDEC_NEURAL_MODEL=/models/qwen-coder.gguf
$ retdec-decompiler --buildable ./target.elf
यह किसके लिए है

जब स्रोत कोड नहीं बचा, तब यह बताता है कि प्रोग्राम करता क्या है

सॉफ़्टवेयर ऐसी शक्ल में आता है जिसे मशीन पढ़ सकती है और इंसान नहीं। यह उसे वापस खोलकर सादे शब्दों में बताता है कि प्रोग्राम असल में कर क्या रहा है।

01

मैलवेयर खोलकर देखने वाली सुरक्षा टीमें

पन्नों भर न पढ़े जाने वाले कोड की जगह आपको जवाब मिलता है: यह हिस्सा डेटा को गड्डमड्ड कर रहा है, यह हिस्सा घर फ़ोन करने का तरीक़ा है, यह हिस्सा छिपने का। विश्लेषक को सबसे पहले यही चाहिए।

02

पुराने सॉफ़्टवेयर वाली वे कंपनियाँ जिनके पास स्रोत कोड नहीं है

सिस्टम अब भी कारोबार चला रहा है, और जिसने उसे लिखा था वह सालों पहले जा चुका। यह उसका ब्यौरा वापस निकालता है कि वह करता क्या है, और किसी के भी उसे सुरक्षित ढंग से दोबारा बनाने या बदलने से पहले यही चाहिए।

03

वे सब जो ऐसे फ़ाइल प्रारूप में फँसे हैं जिसका कोई प्रलेख नहीं

पुराने अभिलेख, ऐसी मशीन जो सिर्फ़ अपने ही सॉफ़्टवेयर से बात करेगी, किसी प्रतिद्वंद्वी की निर्यात फ़ाइल। यह ढाँचा निकाल देता है, ताकि आपका अपना सॉफ़्टवेयर उसे पढ़ सके।

क्या यहाँ आपको अपनी स्थिति दिख रही है? यह अभी बीटा परीक्षण के लिए खुला है, और जिनके लिए यह बना है, उन्हीं की राय इसे सचमुच बदलती है। बीटा टेस्टर बनें →
इंटरफ़ेस

Qt 6 ग्राफ़िकल यूज़र इंटरफ़ेस (GUI), या कोई GUI ही नहीं

C, असेंबली, IR और नियंत्रण-प्रवाह ग्राफ़ पर तालमेल में चलने वाले कोड दृश्य, साथ में फ़ंक्शन नेविगेशन, स्ट्रिंग जाँच, एक बाइनरी ब्राउज़र और एक सहायक पैनल। हेडलेस मोड हर GUI निर्भरता हटा देता है, ताकि वही बिल्ड सतत एकीकरण (CI) में चल सके।

दोहरा लाइसेंस

खुले स्रोत के इस्तेमाल के लिए GNU Affero जनरल पब्लिक लाइसेंस (AGPL-3.0+), या मालिकाना तैनाती के लिए वाणिज्यिक लाइसेंस। कॉपीराइट Odin Loch, Imortek के नाम से कारोबार करते हुए, 2025–2026।

v2.0.21 पर भेजने लायक़। CI के पहरे उत्पादन की परिपक्वता के मानकों के बजाय विकास की हालत दिखाते हैं — यह परियोजना ख़ुद कहती है, अंदाज़े से निकाला हुआ नहीं।