- 1990 के दशक के अकाउंटिंग RPG II compiler के लिए आवश्यक parallel port dongle का विश्लेषण कर उसके व्यवहार को पुनर्स्थापित करने का एक मामला
- मूल सॉफ़्टवेयर Windows 98 वातावरण के DOS console में चलता है, और डोंगल के बिना काम नहीं करता
- डिस्क इमेज को emulator में ले जाकर विश्लेषण करने पर पता चला कि RPGC.EXE और SEU.EXE जैसे executable फ़ाइलों के भीतर एक ही कॉपी-प्रोटेक्शन रूटीन डाला गया है
- assembly विश्लेषण से पुष्टि हुई कि यह रूटीन हमेशा एक निश्चित constant value (7606h) लौटाता है, और 4-byte patch से डोंगल सत्यापन को बायपास किया गया
- इसके परिणामस्वरूप Software West की RPG II compiler अब डोंगल के बिना भी चल सकती है, जो classic software preservation के नज़रिए से एक महत्वपूर्ण उपलब्धि है
प्राचीन अकाउंटिंग सॉफ़्टवेयर और डोंगल की खोज
- 40 साल से उपयोग में रहा अकाउंटिंग RPG-आधारित software अब भी Windows 98 PC पर चल रहा था
- RPG, IBM System/3, System/32, AS/400 जैसे midrange computers के लिए बनी भाषा थी, जिसे बाद में MS-DOS पर पोर्ट किया गया
- यह प्रोग्राम चलते समय parallel port में hardware copy-protection dongle मांगता था
- डोंगल पर “Stamford, CT” और “Software Security Inc.” का लोगो धुंधला-सा बचा हुआ था
- उस पर “RUNTIME” शब्द लिखा था, जिसका अर्थ बाद के विश्लेषण में स्पष्ट हुआ
डिस्क इमेज विश्लेषण और RPG compiler की संरचना
- Windows 98 सिस्टम की डिस्क इमेज निकालकर उसे emulator में चलाया गया
- RPG II compiler (Software West Inc. द्वारा निर्मित) के दो संस्करण और अकाउंटिंग software का पूरा RPG source code मिला
- यह कई RPG modules और DOS batch files से बने menu system के रूप में संरचित था
- compiler स्वयं डोंगल सत्यापन करता था, और बने हुए executable फ़ाइलों में भी वही protection routine डाल देता था
parallel port communication routine की reverse engineering
- Reko disassembler का उपयोग कर SEU.EXE का विश्लेषण किया गया
- शुरुआत में
in/out commands दिखाई नहीं दिए, लेकिन वे दूसरे segment (0800h) में मिले
- यह रूटीन BIOS data area से parallel port address पढ़ता है और LPT1 port के ज़रिए डेटा भेजता और प्राप्त करता है
- परिणाम मान
BX register में स्टोर होता है, कोई input नहीं लिया जाता, और हमेशा वही परिणाम लौटता है
constant value का अनुमान और patch
- रूटीन के अंत में
BH value का 76h पर स्थिर होना पुष्टि किया गया
- केवल
BL value अज्ञात बची, इसलिए 0~255 रेंज को brute force से खोजा गया
- सही संयोजन
BL=06h, यानी BX=7606h निकला
- रूटीन के पहले 4 bytes को
MOV BX,7606h और RETF से बदलकर डोंगल सत्यापन को बायपास किया गया
- इसके बाद प्रोग्राम तुरंत चल पड़ा, और वही रूटीन रखने वाली दूसरी executable फ़ाइलों पर भी यही संशोधन लागू किया जा सका
परिणाम और महत्व
- सभी RPG II compiler components में एक ही copy-protection code मिला, इसलिए उन्हें एक साथ संशोधित किया जा सका
- डोंगल की संरचना ऐसी थी कि वह सिर्फ एक constant value लौटाता था, इसलिए केवल 4-byte patch से इसे निष्क्रिय किया जा सकता था
- संशोधित compiler डोंगल के बिना भी सामान्य रूप से काम करता है, और भविष्य में व्यक्तिगत जानकारी हटाने के बाद इसे ऐतिहासिक software archive के रूप में सार्वजनिक करने की योजना है
- Software West Inc. के बारे में ऑनलाइन लगभग कोई सामग्री नहीं बची है, इसलिए लेखक इसके निर्माता से आगे संपर्क की उम्मीद कर रहा है
अभी कोई टिप्पणी नहीं है.