40 साल पुराने कॉपी-प्रोटेक्शन डोंगल को निष्क्रिय करना
(dmitrybrant.com)- 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/outcommands दिखाई नहीं दिए, लेकिन वे दूसरे segment (0800h) में मिले - यह रूटीन BIOS data area से parallel port address पढ़ता है और LPT1 port के ज़रिए डेटा भेजता और प्राप्त करता है
- परिणाम मान
BXregister में स्टोर होता है, कोई input नहीं लिया जाता, और हमेशा वही परिणाम लौटता है
- शुरुआत में
constant value का अनुमान और patch
- रूटीन के अंत में
BHvalue का 76h पर स्थिर होना पुष्टि किया गया- केवल
BLvalue अज्ञात बची, इसलिए 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. के बारे में ऑनलाइन लगभग कोई सामग्री नहीं बची है, इसलिए लेखक इसके निर्माता से आगे संपर्क की उम्मीद कर रहा है
1 टिप्पणियां
Hacker News की राय
शुरुआती दौर का software protection वाकई बहुत साधारण था
मेरे पास पहले Windows 3.11 upgrade disk थी, और installer तब fail हो जाता था जब कोई पुराना version installed न हो
इसका हल बस इतना था कि एक खाली text file बनाकर उसका नाम
win.comरख दो। installer पूरी disk scan करके सिर्फ वही file ढूंढता थाअसल में उस upgrade disk में पूरा install set शामिल था। उस दौर में चीज़ें सचमुच बहुत simple थीं
आखिरकार हमने एक दोस्त से 3.x version लेकर install किया, और क्योंकि यह विज्ञापन में कही बात से अलग था, इसलिए यह नैतिक रूप से ठीक लगा
संबंधित product की तस्वीर eBay link पर देखी जा सकती है
मैं civil engineering software develop करता हूँ (mes100.com)
आज भी कुछ users hardware dongle को पसंद करते हैं। उनका कहना है कि हाथ में पकड़ने लायक कोई physical device हो तो ज़्यादा भरोसा रहता है
हम perpetual license बेचते हैं, इसलिए dongle खराब हो जाए तो replacement parts न मिलने की दिक्कत आती है। वे cloud license पसंद नहीं करते, लेकिन वही subscription-based revenue संभव बनाता है
फिर भी कितनी भी कोशिश करो, cracked versions online घूमते रहते हैं। कानूनी कार्रवाई करने की क्षमता भी नहीं होती, इसलिए protection ज़रूरी है
और कुछ लोग बस third-party server पर निर्भर न रहने वाली autonomy को पसंद करते हैं
इसलिए SaaS model user के लिए किसी आपदा जैसा लगता है। piracy भी नापसंद है, लेकिन SaaS भी उतना ही नापसंद है
पहले crack करना कहीं ज़्यादा simple हुआ करता था
सिर्फ JE या JNE को JMP में बदलना भी protection bypass करने के लिए काफी होता था
असली बात यह पता लगाना थी कि protection code कहाँ है और कैसे काम करता है
पहली, developer हमसे कहीं ज़्यादा लंबे समय तक code के साथ काम करते हैं, इसलिए बहुत complex protection bug fixing को मुश्किल बना देता है
दूसरी, hacker को बस कुछ tricks जाननी होती हैं, लेकिन developer को उन सबका बचाव करना पड़ता है
तीसरी, protection feature बनाना मज़ेदार भी नहीं होता और उसकी पहचान भी नहीं मिलती, इसलिए motivation की कमी रहती है
उसे डालते ही activation हो गया। बाद में मैंने उसे आधिकारिक रूप से खरीद भी लिया
floppy पर laser से sign करने का तरीका था, लेकिन assembly पढ़ने वाला कोई किशोर लड़का भी उसे आसानी से bypass कर सकता था
यहाँ तक कि pin से floppy को खरोंचकर भी उसकी copy बनाई जा सकती थी। आखिरकार यह मार्केटिंग के तकनीक से आगे निकल जाने का मामला था
मैंने 80 के दशक में RPG II code लिखा था, और 90 के दशक में S/36 emulation environment में migration में मदद की थी
हमने California Software Products नाम की कंपनी का product इस्तेमाल किया था, और वह इतना अच्छा चला कि कंपनी संस्थापक की retirement तक बनी रही
“क्या यह copy protection तरीका बहुत ही simple नहीं है?” इस पर मेरा मानना है कि उस समय के लिए यह उचित स्तर की engineering थी
emulator और decompiler की मदद से यह कुछ दिनों में हल हो सकता था, लेकिन उस समय ऐसे tools भी मौजूद नहीं थे
उस दौर के 90% software सचमुच इतने ही simple थे। कोई complex चीज़ छूट नहीं रही थी
बचपन में मैंने Ultima game crack किया था
वजह बस यह थी कि हर बार floppy डालना झंझट लगता था। code खुद को decrypt करता था और disk के एक खास sector से start address पढ़ता था
वह sector सामान्य copy tools से copy नहीं हो सकता था, लेकिन executable header बदलकर मैंने समस्या हल कर ली
90 के दशक की शुरुआत में मैंने franchise headquarters द्वारा internally developed license renewal system का maintenance किया था
हर महीने floppy से renewal करना पड़ता था, और headquarters जिसे पसंद न करे, उसकी branch को मनमाने ढंग से block भी कर देता था
आखिरकार कई branches ने मिलकर lawsuit दायर किया, और मैंने एक DOS-based license generator बनाया ताकि हर branch फोन पर code लेकर renewal कर सके
मुकदमा खत्म होने के बाद हमने license check को पूरी तरह हटाने वाला patch distribute कर दिया। कभी DOSBox में इसे फिर से चलाकर देखना चाहूँगा
यह पढ़कर दिलचस्प लगा कि Windows 95 अभी भी real-world काम में इस्तेमाल हो रहा है
चमकदार AI trends के उलट, industry के उबाऊ हिस्सों में तकनीकी बदलाव बहुत धीमा होता है
यहाँ तक कि आज भी ऐसे systems मौजूद हैं जो PDP-11 emulator पर चल रहे हैं
यह बात प्रभावशाली है कि यह software और hardware अब भी कुछ कंपनियों में इस्तेमाल हो रहे हैं
इसलिए cracked version public करना कानूनी जोखिम ला सकता है
कंपनियाँ पुराने systems को बनाए रखने के लिए बड़ा पैसा चुकाती हैं, इसलिए ऐसी vendor lock-in बनी रहती है
अगर patent या intellectual property rights अब भी प्रभावी हैं, तो public करने से पहले इसकी ज़रूर जाँच कर लेनी चाहिए
सिर्फ एक तय संख्या लौटाने वाला hardware dongle — यह सचमुच बहुत simple protection तरीका है
लेकिन उस समय के लिए इतना ही काफी था। आज भी enterprise software अक्सर इसी तरह सिर्फ license key जैसी चीज़ें इस्तेमाल करता है
आखिरकार यह 80 के दशक वाला वही विचार था: “बस इतना संकेत दे दो कि बिल मौजूद है, लोग पैसे दे देंगे”