
Windows XP Keygen
Windows XP / Windows Server 2003 VLK कुंजी जनरेटर। यह टूल आपको रॉ प्रोडक्ट कुंजी के आधार पर मान्य Windows XP कुंजियाँ उत्पन्न करने की सुविधा देता है, जो यादृच्छिक हो सकती है।
रॉ प्रोडक्ट कुंजी (RPK) 9 अंकों XXX-YYYYYY के रूप में दी जाती है और यह केवल Windows XP कुंजी उत्पन्न करने के लिए आवश्यक है।

Releases टैब पर जाएँ और वहाँ से नवीनतम संस्करण डाउनलोड करें।
यह प्रोजेक्ट मृत नहीं है — मैं इसे पूरा करने की पूरी कोशिश करूँगा।
सामान्य तौर पर, हमें हर EDITION और हर BUILD के लिए मान्य Windows XP कुंजियाँ उत्पन्न करने से केवल एक चीज़ अलग करती है — pidgen.dll के भीतर उनके सार्वजनिक समकक्षों से उत्पन्न संबंधित निजी कुंजियों की कमी। ऑनलाइन व्यापक रूप से उपलब्ध एलिप्टिक कर्व असतत लघुगणक (elliptic curve discrete logarithm) फ़ंक्शन के लिए कोई कोड नहीं है, केवल इसे करने के तरीके के बारे में अस्पष्ट जानकारी है।
समय बीतने के साथ, यह समस्या आंशिक रूप से हल हो गई है।
BINK संसाधन किसी भी तरह से एन्कोडेड नहीं था और डेटा केवल अनुक्रमिक रूप से संसाधन में लिखा गया था। sk00ter ने MDL फ़ोरम पर BINK प्रारूप को भी पूरी तरह से समझाया। इस विषय पर समुदाय के पूर्व ज्ञान का उपयोग करते हुए, मैंने Python 3 में एक BINK Reader लिखा। यह फ़ाइल इस रिपॉजिटरी में सार्वजनिक है, स्रोत कोड देखने के लिए यहाँ क्लिक करें।
असतत लघुगणक समाधान 28 मई, 2023 तक शोध का सबसे अनदेखा क्षेत्र है। हालाँकि, मेरे मित्र nephacks को वह दुर्लभ उपकरण इंटरनेट के सबसे अंधेरे कोनों में मिल गया, जो उस कठिन समस्या को हल कर सकता है। इसे Mr. HAANDI द्वारा निर्मित ECDLP (Elliptic Curve Discrete Logarithm Problem) Solver कहा जाता है। चूँकि इसे ऑनलाइन खोजना अत्यंत निराशाजनक था, मैंने इसे अपनी वेबसाइट पर पुनः अपलोड कर दिया। आप टूल यहाँ डाउनलोड कर सकते हैं।
सॉल्वर के संस्करण 0.2a के साथ आने वाली ReadMe फ़ाइल अपने आप में काफी अच्छी है, इसलिए कोई भी समझदार व्यक्ति उस टूल को सेट कर पाएगा। हालाँकि, यह ओपन-सोर्स नहीं है, इसलिए इसे मेरे keygen में एकीकृत करना असंभव सिद्ध हो चुका है।
आदर्श परिदृश्य में, keygen आपसे pidgen.dll से निकाला गया BINK-संसाधन माँगेगा, जिसे वह फिर निम्नलिखित खंडों में विभाजित करेगा:
pubX; pubY)genX; genY)a; b)pइन खंडों को जानकर, keygen Schoof के एल्गोरिथ्म का उपयोग करके जनरेटर क्रम genOrder और फिर निजी कुंजी privateKey को ब्रूटफोर्स करेगा, तथा गणना किए गए genOrder का लाभ उठाकर सबसे अनुकूलतम Pollard's Rho एल्गोरिथ्म का उपयोग करेगा। इसमें कोई संदेह नहीं है कि यदि हमारे पास कार्यशील एल्गोरिथ्म हो, तो आधुनिक कम्प्यूटेशनल शक्ति से हम किसी भी निजी कुंजी को 20 मिनट के भीतर क्रैक कर सकते हैं।
एक बार keygen सही निजी कुंजी को ब्रूटफोर्स कर लेता है, तो कार्य वास्तव में एक कुंजी उत्पन्न करने तक सिमट जाता है, जो यह keygen करता है। आपको बेहतर परिप्रेक्ष्य देने के लिए, मैं आदर्श keygen का प्रवाह प्रदान कर सकता हूँ। जो काटा गया है, वह मेरा keygen लागू करता है:
हमें AAAAA-BBB-CCCCCCS-DDEEE के रूप में एक उत्पाद आईडी उत्पन्न करने के लिए आधार के रूप में एक यादृच्छिक रॉ प्रोडक्ट कुंजी का उपयोग करना होगा।
OS परिवार स्थिरांक AAAAA Windows XP की प्रत्येक श्रृंखला के लिए अलग होता है। उदाहरण के लिए, SP3 के लिए यह 76487 है।
BBB और CCCCCC खंड अनिवार्य रूप से रॉ प्रोडक्ट कुंजी को एन्कोड करते हैं। उदाहरण के लिए, यदि पहला खंड XXX के बराबर है और दूसरा खंड YYYYYY के बराबर है, तो रॉ प्रोडक्ट कुंजी XXX-YYYYYY के रूप में एन्कोड की जाएगी।
चेक अंक S को इस प्रकार चुना जाता है कि इसे जोड़ने पर सभी C अंकों का योग 7 से विभाज्य संख्या बन जाए।
सार्वजनिक कुंजी सूचकांक DD हमें बताता है कि हमारी उत्पाद कुंजी की प्रामाणिकता को सफलतापूर्वक सत्यापित करने के लिए किस सार्वजनिक कुंजी का उपयोग किया गया था।
उदाहरण के लिए, Professional कुंजियों के लिए यह 22 और VLK कुंजियों के लिए 23 है।
हर बार एक अलग इंस्टॉलेशन आईडी उत्पन्न करने के लिए एक यादृच्छिक संख्या EEE का उपयोग किया जाता है।
उत्पाद कुंजी स्वयं (जिसे RPK से भ्रमित न करें) FFFFF-GGGGG-HHHHH-JJJJJ-KKKKK के रूप में होती है, जो Base-24 में एन्कोड की जाती है और इसमें वर्णमाला BCDFGHJKMPQRTVWXY2346789 का उपयोग किया जाता है ताकि ऐसे किसी भी वर्ण को बाहर रखा जा सके जो आसानी से भ्रमित हो सकते हैं, जैसे I और 1 या O और 0।
वर्णमाला क्षमता सूत्र के अनुसार, कुंजी अधिकतम 114 बिट जानकारी रख सकती है। $$N = \log_2(24^{25}) \approx 114$$
उस गणना के आधार पर, हम 114-बिट उत्पाद कुंजी को 4 क्रमबद्ध खंडों में विभाजित करते हैं:
सरलता के लिए, हम Upgrade और Serial खंडों को Data नामक एक ही खंड में जोड़ देंगे। उस तर्क से हम Data को दाईं ओर शिफ्ट करके RPK निकाल पाएँगे और बिट्स को बाईं ओर शिफ्ट करके इसे वापस पैक कर पाएँगे, क्योंकि मेरे द्वारा जाँचे गए अधिकांश पूर्व-मान्य उत्पाद कुंजियों में Upgrade बिट 1 पर सेट था।
Microsoft ने Windows Server 2003 के साथ अपने उत्पाद कुंजी प्रारूप को फिर से बनाया ताकि इसमें एक बैकएंड सर्वर प्रमाणीकरण कुंजी शामिल की जा सके, जो लाइसेंस सत्यापन के लिए वास्तव में एक सुरक्षित दृष्टिकोण था, क्योंकि कोई भी कभी अनुमान नहीं लगा सकता था कि उन्होंने अपने निजी सर्वर पर कौन सा सत्यापन एल्गोरिथ्म लागू किया था। ऑनलाइन सत्यापन तंत्र जोड़ने के अलावा, उन्होंने समग्र अंकगणित को 384 से 512 बिट्स तक और हस्ताक्षर स्केलर को 62 बिट जानकारी तक भी बढ़ा दिया।
हालाँकि, यदि हम ऑनलाइन सक्रियण को ध्यान में रखे बिना एक कुंजी उत्पन्न करते हैं, तब भी हम मान्य कुंजियाँ उत्पन्न कर सकते हैं जो हमें ऑपरेटिंग सिस्टम की सेटअप प्रक्रिया से गुज़ार देंगी। और कोड बिल्कुल यही करता है - यह एक यादृच्छिक 10-बिट प्रमाणीकरण कुंजी उत्पन्न करता है। आजकल इससे कोई फर्क नहीं पड़ता, क्योंकि सक्रियण सर्वर बंद हैं और Server 2003 को abandonware माना जाता है, उसी तरह इस पूरे प्रोजेक्ट को पायरेसी नहीं माना जाना चाहिए।
एलिप्टिक कर्व क्रिप्टोग्राफी (ECC) एक प्रकार की सार्वजनिक-कुंजी क्रिप्टोग्राफिक प्रणाली है। प्रणालियों का यह वर्ग चुनौतीपूर्ण "एक-तरफ़ा" गणितीय समस्याओं पर निर्भर करता है - एक तरफ़ से गणना करना आसान और "दूसरी" तरफ़ से हल करना कठिन होता है। इन्हें कभी-कभी "ट्रैपडोर" फ़ंक्शन कहा जाता है - गिरना आसान, बाहर निकलना जटिल।[5]
ECC निम्न रूप के समीकरणों को हल करने पर निर्भर करता है $$y^2 = x^3 + ax + b$$
सामान्य तौर पर, क्रिप्टोग्राफी में उपयोग किए जाने वाले एलिप्टिक कर्व के 2 विशेष मामले हैं - F2m और Fp। वे केवल थोड़े भिन्न हैं। दोनों कर्व परिमित क्षेत्र पर परिभाषित हैं, Fp एक अभाज्य पैरामीटर का उपयोग करता है जो 3 से बड़ा होता है, F2m $p = 2m$ मानता है। Microsoft ने अपने एल्गोरिथ्म में बाद वाले का उपयोग किया।
परिमित क्षेत्र Fp पर एक एलिप्टिक कर्व में निम्नलिखित शामिल होते हैं:
F17 पर एक एलिप्टिक कर्व कुछ इस तरह दिखेगा:

कर्व उपरोक्त छवि में नीले बिंदुओं से मिलकर बना है। व्यवहार में क्रिप्टोग्राफी में उपयोग किए जाने वाले "एलिप्टिक कर्व" "एक वर्ग मैट्रिक्स में बिंदुओं के समुच्चय" होते हैं।
उपरोक्त कर्व "शैक्षिक" है। यह बहुत छोटी कुंजी लंबाई (4-5 बिट) प्रदान करता है। वास्तविक दुनिया की स्थितियों में डेवलपर्स आमतौर पर 256-बिट या उससे अधिक के कर्व का उपयोग करते हैं।
चूँकि यह एक सार्वजनिक-कुंजी क्रिप्टोग्राफिक प्रणाली है, Microsoft को अपने Windows XP रिलीज़ के साथ सार्वजनिक कुंजी साझा करनी पड़ी ताकि दर्ज की गई उत्पाद कुंजियों की जाँच की जा सके।
यह pidgen.dll के भीतर BINK संसाधन के रूप में संग्रहीत है। BINK डेटा का पहला सेट रिटेल कुंजियों को सत्यापित करने के लिए है, दूसरा क्रमशः OEM कुंजियों के लिए है।
Windows 98 और Windows XP के लिए BINK संसाधन की संरचना इस प्रकार है:
प्रत्येक खंड को एक अलग रंग से चिह्नित किया गया है, BINK हेडर मान समान हैं।

Windows Server 2003 और Windows XP x64 इसे अलग तरीके से लागू करते हैं:
और ये हैं C में BINK Reader के लिए बनाए गए मेरे संरचना प्रोटोटाइप:```c typedef struct _EC_BYTE_POINT { CHAR x[256]; // x-coordinate of the point on the elliptic curve. CHAR y[256]; // y-coordinate of the point on the elliptic curve. } EC_BYTE_POINT;
typedef struct _BINKHDR { // BINK version - not stored in the resource. ULONG32 dwVersion;
// Original BINK header.
ULONG32 dwID;
ULONG32 dwSize;
ULONG32 dwHeaderLength;
ULONG32 dwChecksum;
ULONG32 dwDate;
ULONG32 dwKeySizeInDWORDs;
ULONG32 dwHashLength;
ULONG32 dwSignatureLength;
// Extended BINK header. (Windows Server 2003+)
ULONG32 dwAuthCodeLength;
ULONG32 dwProductIDLength;
} BINKHDR;
typedef struct _BINKDATA { CHAR p[256]; // Finite Field order p. CHAR a[256]; // Elliptic Curve parameter a. CHAR b[256]; // Elliptic Curve parameter b.
EC_BYTE_POINT G; // Base point (Generator) G.
EC_BYTE_POINT K; // Public key K.
} BINKDATA;
typedef struct _BINKEY { BINKHDR header; BINKDATA data; } BINKEY;
यदि आप और अधिक जानना चाहते हैं, तो `pidgen.dll` का स्रोत कोड और इसके सभी फ़ंक्शन इस रिपॉजिटरी में, "pidgen" फ़ोल्डर में उपलब्ध हैं।
### निजी कुंजी को रिवर्स करना
यदि हम Windows XP के लिए मान्य उत्पाद कुंजियाँ उत्पन्न करना चाहते हैं, तो हमें `pidgen.dll` के साथ दी गई सार्वजनिक कुंजी का उपयोग करके संबंधित निजी कुंजी की गणना करनी होगी, जिसका अर्थ है कि हमें एक-तरफ़ा ECC कार्य को उल्टा हल करना होगा।
BINK में स्थित कुंजी को देखते हुए, Windows XP में वक्र क्रम **384 बिट** लंबा है और Server 2003 / XP x64 में क्रमशः **512 बिट** लंबा है।
सबसे कुशल Pollard's Rho एल्गोरिथ्म का उपयोग करके गणना की कठिनाई, जिसकी स्पर्शोन्मुख जटिलता $O(\sqrt{n})$ है, Windows XP के लिए कम से कम $O(2^{168})$ और Windows Server 2003 के लिए $O(2^{256})$ होगी, लेकिन सौभाग्य से हमारे लिए,
Microsoft ने मेल खाती उत्पाद कुंजियों की संख्या कम करने के लिए Windows XP में सिग्नेचर के मान को 55 बिट और Windows Server 2003 में 62 बिट तक सीमित कर दिया, जिससे कठिनाई कहीं अधिक प्रबंधनीय $O(2^{28})$ / $O(2^{31})$ तक कम हो गई।
जैसा पहले बताया गया है, हमारी वर्तमान आवश्यकताओं को पूरा करने वाला केवल एक सार्वजनिक टूल है, जो Mr. HAANDI द्वारा बनाया गया ECDLP solver है।<br>
निजी कुंजी की गणना करने के लिए, हमें टूल को BINK संसाधन में स्थित सार्वजनिक ECC मानों के साथ-साथ आधार बिंदु `G(Gx; Gy)` का क्रम `genOrder` प्रदान करना होगा।
आधार बिंदु के क्रम की गणना SageMath का उपयोग करके की जा सकती है।
**Windows 98 निजी कुंजी को रिवर्स करने के लिए मैंने जो मूल एल्गोरिथ्म इस्तेमाल किया वह यह है:**
1. **SageMath** का उपयोग करके आधार बिंदु के क्रम की गणना करें। SageMath में, निम्नलिखित कमांड निष्पादित करें:
1) `E = EllipticCurve(GF(p), [0, 0, 0, a, b])`, जहाँ `p`, `a` और `b` BINK संसाधन से दशमलव रूप में प्रदर्शित अण्डाकार वक्र पैरामीटर हैं।
2) `G = E(Gx, Gy)`, जहाँ `Gx` और `Gy` BINK संसाधन से दशमलव रूप में प्रदर्शित आधार बिंदु निर्देशांक हैं।
3) `K = E(Kx, Ky)`, जहाँ `Kx` और `Ky` BINK संसाधन से दशमलव रूप में प्रदर्शित सार्वजनिक कुंजी निर्देशांक हैं।
4) `n = G.order()`, `n` आधार बिंदु का परिकलित क्रम होगा। **इसकी गणना में कुछ समय लग सकता है, यहाँ तक कि नवीनतम बिल्ड पर भी।**
5) `factor(n)` का उपयोग करके क्रम को गुणनखंडित करें। Microsoft ने बिंदु क्रमों के लिए अभाज्य संख्याओं का उपयोग किया, इसलिए यदि यह स्वयं संख्या लौटाता है, तो यह पूरी तरह सामान्य है।
6) क्रम के परिणामी गुणनखंडों को कहीं सहेज लें।
7) `-K` आपको प्रोजेक्टिव तल में निर्देशांक `(x : y : z)` के साथ सार्वजनिक कुंजी का व्युत्क्रम देगा। `y` निर्देशांक को कहीं सहेज लें, सही निजी कुंजी उत्पन्न करने के लिए इसकी आवश्यकता होती है।
2. **ECDLP Solver v0.2a** का उपयोग करके निजी कुंजी की गणना करें।
1) टूल के साथ एक टेम्पलेट जॉब `job_template.txt` और एक ReadMe फ़ाइल आती है। इसका उपयोग करने के लिए यह समझना आवश्यक है कि टूल कैसे काम करता है।
2) BINK संसाधन से सभी सार्वजनिक अण्डाकार वक्र मान डालें, **`Ky` निर्देशांक को छोड़कर**। सही निजी कुंजी उत्पन्न करने के लिए, **आपको पहले SageMath में परिकलित व्युत्क्रम निर्देशांक `-Ky` का उपयोग करना होगा।**
3) आधार बिंदु क्रम `n` के गुणनखंड डालें और गुणनखंड संख्या निर्दिष्ट करें। यह बहुत संभवतः `1` होगा, क्योंकि Microsoft मुख्य रूप से अपने जनरेटर क्रमों के लिए अभाज्य संख्याओं का उपयोग करता है।
4) टूल `<arch> ECDLP Solver.exe <job_name>.txt` चलाएँ और तब तक प्रतीक्षा करें जब तक यह आपके लिए निजी कुंजी `k = %d` की गणना नहीं कर देता।
**Windows XP जॉब `job_xp.txt` का एक उदाहरण यहाँ दिया गया है, जो ECDLP Solver के लिए सही निजी कुंजी प्राप्त करता है।**```pascal
GF := GF(22604814143135632990679956684344311209819952803216271952472204855524756275151440456421260165232069708317717961315241);
E := EllipticCurve([GF|1,0]);
G := E![10910744922206512781156913169071750153028386884676208947062808346072531411270489432930252839559606812441712224597826,19170993669917204517491618000619818679152109690172641868349612889930480365274675096509477191800826190959228181870174];
K := E![14399230353963643339712940015954061581064239835926823517419716769613937039346822269422480779920783799484349086780408,17120082747148185997450361756610881166187863099877353630300913555824935802439591336620545428308962346299700128114607];
/*
FactorCount:=1;
61760995553426173
*/
और इसके लिए ECDLP सॉल्वर आउटपुट:

महत्वपूर्ण नोट:
सावधान रहें कि मैं अपने रिवर्स किए गए निजी कुंजी का उपयोग करके सही Windows XP x64 कुंजी उत्पन्न नहीं कर सका, यहाँ तक कि सामान्य -Ky के बजाय Ky निर्देशांक का उपयोग करने पर भी.
किसी कारण से, मैं SageMath का उपयोग करके Windows Server 2003 बेस पॉइंट ऑर्डर की गणना करने में भी विफल रहा. मैंने इसे अपने i7-12700K पर गणना करने के लिए 12 घंटे दिए, लेकिन यह अभी भी गणना में अटका हुआ था.
बाकी का काम इस कीजेन के कोड के भीतर किया जाता है.
0x40000/0x62A32 की सटीक संभावना के साथ एक वैध कुंजी उत्पन्न की, जिसके परिणामस्वरूप ठीक
0.64884, या लगभग 65%. मेरा "2 में से 3" अनुमान अकल्पनीय रूप से सटीक था.BBB सेक्शन को 640 पर सेट करके और CCCCCC सेक्शन को शून्य न रखकर "बेहतर" कुंजियाँ उत्पन्न करने की सबसे अच्छी संभावनाएँ हैं.मैं बाद के रिलीज़ों में ग्रंथ सूची में और अच्छे पठन जोड़ूँगा.
Windows XP सक्रियण की मूल बातें समझना:
एलिप्टिक कर्व क्रिप्टोग्राफी को समझना:
सार्वजनिक चर्चाएँ:
यदि आप इस सॉफ़्टवेयर को प्रदर्शित या फ़ोर्क करने जा रहे हैं, तो कृपया Endermanch, z22 और MSKey को श्रेय दें.
जब तक आप इसे ओपन-सोर्स रखते हैं, तब तक इसे अपनी पसंद के अनुसार संशोधित करने के लिए स्वतंत्र महसूस करें. GNU जनरल पब्लिक लाइसेंस v3.0 के तहत लाइसेंस प्राप्त है.
किसी भी योगदान या प्रश्नों का स्वागत है.
genOrder, privateKey)| अंक | अर्थ |
|---|
| AAAAA | OS परिवार स्थिरांक |
| BBB | चैनल आईडी |
| CCCCCC | अनुक्रम संख्या |
| S | चेक अंक |
| DD | सार्वजनिक कुंजी सूचकांक |
| EEE | यादृच्छिक 3-अंकीय संख्या |
| खंड | क्षमता | डेटा |
|---|
| Upgrade | 1 bit | अपग्रेड संस्करण फ़्लैग |
| Serial | 30 bits | रॉ प्रोडक्ट कुंजी (RPK) |
| Hash | 28 bits | RPK हैश |
| Signature | 55 bits | RPK हैश के लिए एलिप्टिक कर्व हस्ताक्षर |
| खंड | क्षमता | डेटा |
|---|
| Upgrade | 1 bit | अपग्रेड संस्करण फ़्लैग |
| Channel ID | 10 bits | RPK का BBB भाग |
| Hash | 31 bits | RPK हैश |
| Signature | 62 bits | RPK हैश के लिए एलिप्टिक कर्व हस्ताक्षर |
| Auth Key | 10 bits | बैकएंड प्रमाणीकरण मान |
| ऑफ़सेट | मान |
|---|
0x0000 | BINK आईडी |
0x0004 | BINKEY संरचना का आकार बाइट्स में (व्यवहार में हमेशा 0x16C) |
0x0008 | हेडर लंबाई (व्यवहार में हमेशा 7) |
0x000C | चेकसम |
0x0010 | संख्या-एन्कोडेड दिनांक - BINKEY संस्करण (व्यवहार में हमेशा 19980206) |
0x0014 | ECC कर्व क्रम आकार (व्यवहार में हमेशा 12) |
0x0018 | हैश लंबाई (व्यवहार में हमेशा 28) |
0x001C | हस्ताक्षर लंबाई (व्यवहार में हमेशा 55) |
0x0020 | परिमित क्षेत्र क्रम p |
0x005C | कर्व पैरामीटर a |
0x0098 | कर्व पैरामीटर b |
0x00D4 | आधार बिंदु x-निर्देशांक Gx |
0x0110 | आधार बिंदु y-निर्देशांक Gy |
0x014C | सार्वजनिक कुंजी x-निर्देशांक Kx |
0x0188 | सार्वजनिक कुंजी y-निर्देशांक Ky |
| ऑफ़सेट | मान |
|---|
0x0000 | BINK आईडी |
0x0004 | BINKEY संरचना का आकार बाइट्स में |
0x0008 | हेडर लंबाई (व्यवहार में हमेशा 9) |
0x000C | चेकसम |
0x0010 | संख्या-एन्कोडेड दिनांक - BINKEY संस्करण (व्यवहार में हमेशा 20020420) |
0x0014 | ECC कर्व क्रम आकार (व्यवहार में हमेशा 16) |
0x0018 | हैश लंबाई (व्यवहार में हमेशा 31) |
0x001C | हस्ताक्षर लंबाई (व्यवहार में हमेशा 62) |
0x0020 | बैकएंड प्रमाणीकरण मान लंबाई (व्यवहार में हमेशा 12) |
0x0024 | उत्पाद आईडी लंबाई (व्यवहार में हमेशा 20) |
0x0028 | परिमित क्षेत्र क्रम p |
0x0068 | कर्व पैरामीटर a |
0x00A8 | कर्व पैरामीटर b |
0x00E8 | आधार बिंदु x-निर्देशांक Gx |
0x0128 | आधार बिंदु y-निर्देशांक Gy |
0x0168 | सार्वजनिक कुंजी x-निर्देशांक Kx |
0x01A8 | सार्वजनिक कुंजी y-निर्देशांक Ky |