
Ghidra डीकंपाइलर निर्यात को स्थानीय LLMs के साथ जोड़कर विरासती Windows बाइनरी का C स्रोत में पुनर्निर्माण करता है, जिससे संकलन-जाँचे गए उम्मीदवार और समानता-आधारित रिपोर्टें उत्पन्न होती हैं।
यह रिपॉजिटरी Sean O'Connor द्वारा निर्मित Rats! (1994) के मूल Windows संस्करण RATS.EXE के स्रोत कोड का एक कार्य-प्रगति (work-in-progress) पुनर्निर्माण है। यह wibo के अंतर्गत Microsoft Visual C++ 4.1 के साथ एक Win32 निष्पादनीय (executable) बनाता है और इसे DREAMM में परीक्षण किया जा सकता है।
यह प्रयोग यह जाँचता है कि स्थानीय LLM एक छोटे परंतु यथार्थवादी कोडबेस पर स्रोत पुनर्निर्माण को कितनी दूर तक ले जा सकते हैं, न कि केवल एक खिलौना (toy) उदाहरण पर। मिलान निष्ठा (match fidelity) असमान बनी हुई है, जो यहाँ उपयोगी है: उद्देश्य प्रक्रिया और इसकी वर्तमान सीमाओं का यथार्थवादी दृश्य प्रस्तुत करना है, न कि कठिन फ़ंक्शनों को छिपाना।
फ़ंक्शन पुनर्निर्माण केवल स्थानीय LLM तक सीमित है। Codex और Claude का उपयोग रिपॉजिटरी सेटअप और बेंचमार्क ऑर्केस्ट्रेशन के लिए किया जाता है, लेकिन उन्हें पुनर्निर्मित स्रोत को लिखने या संपादित करने की अनुमति नहीं है।
जब तक अन्यथा न कहा जाए, सभी प्रयोगों में 128 GB मेमोरी वाले Apple M4 Max (16-कोर CPU, 40-कोर GPU) युक्त 2024 MacBook Pro पर Qwen3.8 27B BF16 का उपयोग किया गया। यह दृष्टिकोण काम करता है—अपूर्ण रूप से, परंतु उपयोगी रूप से: सुरक्षित रखे गए 36 फ़ंक्शनों को पुनर्निर्मित करने में औसत लॉग समय 2m 32.1s प्रति फ़ंक्शन लगा।
सबमॉड्यूल के साथ क्लोन करें, या क्लोन करने के बाद उन्हें इनिशियलाइज़ करें:
git submodule update --init --recursive
मूल निष्पादनीय (executable) शामिल नहीं है। आधिकारिक Rats! पृष्ठ से निःशुल्क Windows संस्करण डाउनलोड करें और original-executable तथा binary-comparison टार्गेट का उपयोग करने के लिए उसका RATS.EXE रिपॉजिटरी रूट में रखें।
make # build out/RATS_RE.EXE, .map, .obj, and .asm
make toolchain # download, extract, and verify Microsoft Visual C++ 4.1
make run # launch the rebuilt executable in DREAMM
make run-original # launch the preserved original RATS.EXE
make test # bounded DREAMM smoke test of the rebuilt executable
make test-original # bounded DREAMM smoke test of the original executable
make debug # start the rebuilt executable in DREAMM's debugger
make report # report similarity for every reconstructed function
make compare-func FUNC=SaveHighScores ADDR=00409092
चेकसम-पिन किया गया MSVC 4.1 आर्काइव, आवश्यक MSVC 4.1 लाइब्रेरी, wibo का संगत msvcrt40.dll, और DREAMM 4.0x21 मांग पर डाउनलोड किए जाते हैं। ये उपेक्षित (ignored) स्थानीय बिल्ड निर्भरताएँ बने रहते हैं और प्रतिबद्ध (committed) नहीं होते।
चेक-इन किया गया ghidra/ निर्देशिका सभी 177 आंतरिक फ़ंक्शनों के लिए असेंबली और डीकंपाइलर निर्यातों को समाहित करती है। असेंबली तुलना का अधिकार है; डीकंपाइल किया गया C केवल एक सिमेंटिक बीज (semantic seed) है।
binary-recons को एक बार इंस्टॉल करें, फिर इसे रिपॉजिटरी रूट से चलाएँ:
python3 -m pip install -e /path/to/binary-recons
binary-recons --next-function # reconstruct the next safe missing target
binary-recons --address 0x409092 # reconstruct or improve a specific target
यह उपकरण Qwen को मानक Hugging Face कैश में स्वचालित रूप से खोज लेता है; BINARY_RECONS_MODEL_PATH इसे ओवरराइड कर सकता है। binary-recons.toml स्वचालित चयन को गेम-कोड रेंज के भीतर रखता है, llama.cpp को प्रारंभ और बंद करता है, तथा ट्रांज़ैक्शनल फ़ाइलों और binary-comp कमांड को परिभाषित करता है। प्रत्येक सीमित (bounded) रन Ghidra से एक फ़ंक्शन को बीज रूप में लेता है, Qwen से केंद्रित कंपाइल या असेंबली-डिफ़ मरम्मत के लिए कहता है, और सर्वोत्तम सुरक्षित संकलन उम्मीदवार को बनाए रखता है। गहरे पास के लिए --target-score 95 का उपयोग करें, या Qwen को लोड किए बिना प्रॉम्प्ट का निरीक्षण करने के लिए --dry-run-prompt का उपयोग करें।
मापे गए स्थानीय-मॉडल रन docs/MODEL_RESULTS.md में दर्ज किए गए हैं।
अधिकांश सुरक्षित रखे गए उम्मीदवार Unsloth के Qwen3.8 27B GGUF के साथ BF16 में (Qwen3.8-27B-BF16, जिसे qwen3.8-27b-bf16 के रूप में प्रस्तुत किया गया) llama.cpp के माध्यम से 32,768-टोकन संदर्भ और qwen मॉडल प्रीसेट के साथ उत्पन्न किए गए थे। वर्तमान कार्यप्रवाह Ghidra के डीकंपाइलेशन को एक यांत्रिक बीज के रूप में उपयोग करता है, Qwen से केवल एक सार्थक अनुबंध (contract) और सीमित स्रोत संपादन के लिए कहता है, वैध संपादनों को एक मरम्मत प्रक्षेपवक्र के रूप में अनुसरण करता है, और binary-comp द्वारा मापा गया सर्वोत्तम परिणाम बनाए रखता है। Gemma 4 31B IT BF16 का भी बेंचमार्क किया गया था, लेकिन इसके किसी भी उम्मीदवार को स्रोत ट्री में सुरक्षित नहीं रखा गया।
नीचे दिए गए स्कोर वर्तमान स्रोत ट्री से MSVC 4.1 और binary-comp के साथ 2026-08-16 को पुनः मापे गए थे। लॉग किए गए समय में सुरक्षित रखे गए उम्मीदवार के लिए प्रबंधित-सर्वर स्टार्टअप, जनरेशन या मरम्मत, बिल्ड और तुलना शामिल है। इसमें असफल अन्वेषणात्मक रन और रिज़्यूमेबल उम्मीदवार पहले ही तैयार हो जाने के बाद की गई मरम्मत प्रक्रियाएँ शामिल नहीं हैं; वे रन लॉग में उपलब्ध रहती हैं।
| पता | फ़ंक्शन | वर्तमान समानता | लॉग समय |
|---|---|---|---|
0x0040215C | IsLevelIndexInRange | 65.31% | 3m 06.4s |
0x00402205 | ShowLevelComplete | 93.96% | 5m 26.1s |
0x0040250C | SubmitHighScore | 97.37% | 1m 49.7s |
0x004026D0 | RenderScoreboard | 95.40% | 2m 30.9s |
0x00402BF3 | AddLevelToTable | 73.85% | 4m 04.6s |
0x00402DC6 | UpdateGameDisplay | 78.18% | 1m 36.4s |
0x00402EE7 | GetLevelDisplayInfo | 71.70% | 2m 15.9s |
0x00402FD5 | GetLevelIndex | 87.27% | 5m 48.3s |
0x00403430 | IsBombAtLevel | 80.62% | 27.3 s |
0x00403607 | PlaceLevel | 80.00% | 2m 32.6s |
0x00404764 | DrawLevelIndicator | 97.33% | 1m 35.6s |
0x0040499F | RenderCornerGlyph | 69.83% | 1m 50.9s |
0x00404D6E | DrawBitmapPair | 98.67% | 1m 04.6s |
0x00404E3B | RenderBitmapToWindow | 94.74% | 26.4 s |
0x00404ECE | DrawBitmapToWindow | 95.59% | 59.3 s |
0x00404F8B | DrawScore | 96.20% | 1m 32.4s |
0x0040507F | DrawScorePanel | 97.97% | 2m 45.0s |
0x0040525D | DrawScoreDigits | 94.20% | 2m 13.7s |
0x00405343 | RenderScoreOverlay | 77.78% | 1m 28.1s |
0x0040546B | DrawFrameBorder | 84.93% | 37.0 s |
0x0040552E | ExplodeBomb | 64.71% | 1m 50.9s |
0x0040560E | RenderExplosionWave | 85.07% | 5m 40.0s |
0x0040591A | DrawBombExplosion | 89.31% | 1m 45.8s |
0x00405AF5 | DrawPausedOverlay | 96.21% | 1m 05.1s |
0x00405C52 | HighScoreDialogProc | 79.82% | 41.5 s |
0x00405DB8 | ScorePanelDialogProc | 50.34% | 1m 53.1s |
0x00405F72 | DemoVersionDialogProc | 46.31% | 4m 18.5s |
0x004061D3 | OrderDialogProc | 53.16% | 10m 46.5s |
0x00408854 | DrawStartButton | 70.80% | 1m 35.6s |
0x00408A51 | UpdateMainMenuState | 97.56% | 28.9 s |
0x00408AD3 | InitializeGameLevel | 83.72% | 5m 35.7s |
0x00408E6A | LoadLevelData | 77.50% | 52.5 s |
0x00408F02 | LoadHighScores | 79.61% | 1m 15.0s |
0x00409092 | SaveHighScores | 94.12% | 1m 25.9s |
0x0040910C | LoadLevelBitmaps | 98.93% | 7m 08.4s |
0x00409DB6 | IsRatsHelpFile | 91.67% | 41.5 s |
निम्नलिखित पतों के लिए पुनर्निर्माण प्रयास समाप्त हो गए, बिना कोई स्रोत कार्यान्वयन सुरक्षित रखे। खर्च किया गया समय सभी लॉग किए गए प्रयासों पर संचयी है।
| स्थगित पता | खर्च किया गया समय | परिणाम |
|---|---|---|
0x00401000 | 10m 29.7s | पहले सीमित पास के लिए फ़ंक्शन बहुत बड़ा; मूल 1.13% स्कैफ़ोल्ड सुरक्षित रखा गया |
0x00403840 | 13m 10.0s | कोई संकलन योग्य उम्मीदवार नहीं; तेज़ सीमित पास के लिए बहुत बड़ा |
0x00406674 | — | छोड़ दिया गया: तेज़ सीमित पास के लिए बहुत बड़ा |
विशेष धन्यवाद: