Wb-FreeKill Posted February 15, 2005 Posted February 15, 2005 I have a script that was posted by another user. It converts the reg cd-key from the registry to the actual key (as on the cd case) Now i need one witch convert the key (as on the cd case) to the digits in the registry. I can't figure how he did it...
Andre Posted February 15, 2005 Posted February 15, 2005 Hi, please post the src so we can help u. Andre What about Windows without using AutoIt ?It would be the same as driving a car without an steering Wheel!
Wb-FreeKill Posted February 15, 2005 Author Posted February 15, 2005 expandcollapse popupDim $Bin $Bin = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion","DigitalProductID") InputBox("Product Key", "Your " & @OSVERSION & " product key is:", DecodeProductKey($bin), "", -1, 100, -1, -1) Func DecodeProductKey($BinaryDPID) Local $bKey[15] Local $sKey[29] Local $Digits[24] Local $Value = 0 Local $hi = 0 local $n = 0 Local $i = 0 Local $dlen = 29 Local $slen = 15 Local $Result $Digits = StringSplit("BCDFGHJKMPQRTVWXY2346789","") $binaryDPID = stringmid($binaryDPID,105,30) For $i = 1 to 29 step 2 $bKey[int($i / 2)] = dec(stringmid($binaryDPID,$i,2)) next For $i = $dlen -1 To 0 Step -1 If Mod(($i + 1), 6) = 0 Then $sKey[$i] = "-" Else $hi = 0 For $n = $slen -1 To 0 Step -1 $Value = Bitor(bitshift($hi ,- 8) , $bKey[$n]) $bKey[$n] = int($Value / 24) $hi = mod($Value , 24) Next $sKey[$i] = $Digits[$hi +1] EndIf Next For $i = 0 To 28 $Result = $Result & $sKey[$i] Next Return $Result EndFunc
Andre Posted February 15, 2005 Posted February 15, 2005 Hi,Nice script.Too bad i don't have the time do find out how it works but here is a document explaning every thing Andre Inside Windows Product Activation A Fully Licensed Paper July 2001 Fully Licensed GmbH, Rudower Chaussee 29, 12489 Berlin, Germany http://www.licenturion.com>> INTRODUCTIONThe current public discussion of Windows Product Activation (WPA) ischaracterized by uncertainty and speculation. In this paper we supplythe technical details of WPA - as implemented in Windows XP - thatMicrosoft should have published long ago.While we strongly believe that every software vendor has the right toenforce the licensing terms governing the use of a piece of licensedsoftware by technical means, we also do believe that each individualhas the right to detailed knowledge about the full implications of theemployed means and possible limitations imposed by it on softwareusage.In this paper we answer what we think are currently the two mostimportant open questions related to Windows Product Activation. * Exactly what information is transmitted during activation? * How do hardware modifications affect an already activated installation of Windows XP?Our answers to these questions are based on Windows XP ReleaseCandidate 1 (build 2505). Later builds as well as the final version ofWindows XP might differ from build 2505, e.g. in the employedcryptographic keys or the layout of some of the datastructures.However, beyond such minor modifications we expect Microsoft to clingto the general architecture of their activation mechanism. Thus, weare convinced that the answers provided by this paper will still beuseful when the final version of Windows XP ships.This paper supplies in-depth technical information about the innerworkings of WPA. Still, the discussion is a little vague at somepoints in order not to facilitate the task of an attacker attemptingto circumvent the license enforcement supplied by the activationmechanism.XPDec, a command line utility suitable for verifying the presentedinformation, can be obtained from http://www.licenturion.com/xp/. Itimplements the algorithms presented in this paper. Reading its sourcecode, which is available from the same location, is highlyrecommended.We have removed an important cryptographic key from the XPDec sourcecode. Recompiling the source code will thus fail to produce a workingexecutable. The XPDec executable on our website, however, containsthis key and is fully functional.So, download the source code to learn about the inner workings of WPA,but obtain the executable to experiment with your installation ofWindows XP.We expect the reader to be familiar with the general procedure ofWindows Product Activation.>> INSIDE THE INSTALLATION IDWe focused our research on product activation via telephone. We didso, because we expected this variant of activation to be the moststraight-forward to analyze.The first step in activating Windows XP via telephone is supplying thecall-center agent with the Installation ID displayed by msoobe.exe,the application that guides a user through the activation process. TheInstallation ID is a number consisting of 50 decimal digits that aredivided into groups of six digits each, as in 002666-077894-484890-114573-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXIn this authentic Installation ID we have substituted digits that weprefer not to disclose by 'X' characters.If msoobe.exe is invoked more than once, it provides a differentInstallation ID each time.In return, the call-center agent provides a Confirmation ID matchingthe given Installation ID. Entering the Confirmation ID completes theactivation process.Since the Installation ID is the only piece of information revealedduring activation, the above question concerning the informationtransmitted during the activation process is equivalent to thequestion 'How is the Installation ID generated?'To find an answer to this question, we trace back each digit of theInstallation ID to its origins.>>> Check digitsThe rightmost digit in each of the groups is a check digit to guardagainst simple errors such as the call center agent's mistyping of oneof the digits read to him or her. The value of the check digit iscalculated by adding the other five digits in the group, adding thedigits at even positions a second time, and dividing the sum byseven. The remainder of the division is the value of the checkdigit. In the above example the check digit for the first group (6) iscalculated as follows. 1 | 2 | 3 | 4 | 5 <- position ---+---+---+---+--- 0 | 0 | 2 | 6 | 6 <- digits 0 + 0 + 2 + 6 + 6 = 14 (step 1: add all digits) 0 + 6 + 14 = 20 (step 2: add even digits again) step 3: division 20 / 7 = 2, remainder is 20 - (2 * 7) = 6 => check digit is 6Adding the even digits twice is probably intended to guard against therelatively frequent error of accidentally swapping two digits whiletyping, as in 00626 vs. 00266, which yield different check digits.>>> DecodingRemoving the check digits results in a 41-digit decimal number. Adecimal number of this length roughly corresponds to a 136-bit binarynumber. In fact, the 41-digit number is just the decimal encoding ofsuch a 136-bit multi-precision integer, which is stored in littleendian byte order as a byte array. Hence, the above Installation IDcan also be represented as a sequence of 17 bytes as in 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0x94 0xAA 0x46 0xD6 0x0F 0xBD 0x2C 0xC8 0x00In this representation of the above Installation ID 'X' charactersagain substitute the digits that we prefer not to disclose. The '0x'prefix denotes hex notation throughout this paper.>>> DecryptionWhen decoding arbitrary Installation IDs it can be noticed that themost significant byte always seems to be 0x00 or 0x01, whereas theother bytes look random. The reason for this is that the lower 16bytes of the Installation ID are encrypted, whereas the mostsignificant byte is kept in plaintext.The cryptographic algorithm employed to encrypt the Installation ID isa proprietary four-round Feistel cipher. Since the block of inputbytes passed to a Feistel cipher is divided into two blocks of equalsize, this class of ciphers is typically applied to input blocksconsisting of an even number of bytes - in this case the lower 16 ofthe 17 input bytes. The round function of the cipher is the SHA-1message digest algorithm keyed with a four-byte sequence.Let + denote the concatenation of two byte sequences, ^ the XORoperation, L and R the left and right eight-byte input half for oneround, L' and R' the output halves of said round, and First-8() afunction that returns the first eight bytes of an SHA-1 messagedigest. Then one round of decryption looks as follows. L' = R ^ First-8(SHA-1(L + Key)) R' = LThe result of the decryption is 16 bytes of plaintext, which are -together with the 17th unencrypted byte - from now on interpreted asfour double words in little endian byte order followed by a singlebyte as in name | size | offset -----+-------------+------- H1 | double word | 0 H2 | double word | 4 P1 | double word | 8 P2 | double word | 12 P3 | byte | 16H1 and H2 specify the hardware configuration that the Installation IDis linked to. P1 and P2 as well as the remaining byte P3 contain theProduct ID associated with the Installation ID.>>> Product IDThe Product ID consists of five groups of decimal digits, as in AAAAA-BBB-CCCCCCC-DDEEEIf you search your registry for a value named 'ProductID', you willdiscover the ID that applies to your installation. The 'About' windowof Internet Explorer should also yield your Product ID.>>>> DecodingThe mapping between the Product ID in decimal representation and itsbinary encoding in the double words P1 and P2 and the byte P3 issummarized in the following table. digits | length | encoding --------+---------+--------------------------------------- AAAAA | 17 bits | bit 0 to bit 16 of P1 BBB | 10 bits | bit 17 to bit 26 of P1 CCCCCCC | 28 bits | bit 27 to bit 31 of P1 (lower 5 bits) | | bit 0 to bit 22 of P2 (upper 23 bits) DDEEE | 17 bits | bit 23 to bit 31 of P2 (lower 9 bits) | | bit 0 to bit 7 of P3 (upper 8 bits)The meaning of each of the five groups of digits is documented in thenext table. digits | meaning --------+------------------------------------------------- AAAAA | apparently always 55034 (in Windows XP RC1) BBB | most significant three digits of Raw Product Key | (see below) CCCCCCC | least significant six digits of Raw Product Key | plus check digit (see below) DD | index of the public key used to verify the | Product Key (see below) EEE | random valueAs can be seen, the (Raw) Product Key plays an important role ingenerating the Product ID.>>>> Product KeyThe Raw Product Key is buried inside the Product Key that is printedon the sticker distributed with each Windows XP CD. It consists offive alphanumeric strings separated by '-' characters, where eachstring is composed of five characters, as in FFFFF-GGGGG-HHHHH-JJJJJ-KKKKKEach character is one of the following 24 letters and digits: B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9Very similar to the decimal encoding of the Installation ID the 25characters of the Product Key form a base-24 encoding of the binaryrepresentation of the Product Key. Decoding the Product Key yields amulti-precision integer of roughly 115 bits, which is stored - againin little endian byte order - in an array of 15 bytes. Decoding theabove Product Key results in the following byte sequence. 0x6F 0xFA 0x95 0x45 0xFC 0x75 0xB5 0x52 0xBB 0xEF 0xB1 0x17 0xDA 0xCD 0x00Of these 15 bytes the least significant four bytes contain the RawProduct Key in little endian byte order. The least significant bit isremoved by shifting this 32-bit value (0x4595FA6F - remember thelittle endian byte order) to the left by one bit position, resultingin a Raw Product Key of 0x22CAFD37, or 583728439in decimal notation.The eleven remaining bytes form a digital signature, allowingverification of the authenticity of the Product Key by means of ahard-coded public key.>>>> Product Key -> Product IDThe three most significant digits, i.e. 583, of the Raw Product Key'snine-digit decimal representation directly map to the BBB component ofthe Product ID described above.To obtain the CCCCCCC component, a check digit is appended to theremaining six digits 728439. The check digit is chosen such that thesum of all digits - including the check digit - is divisible byseven. In the given case, the sum of the six digits is 7 + 2 + 8 + 4 + 3 + 9 = 33which results in a check digit of 2, since 7 + 2 + 8 + 4 + 3 + 9 + 2 = 33 + 2 = 35which is divisible by seven. The CCCCCCC component of the Product IDis therefore 7284392.For verifying a Product Key, more than one public key is available. Ifverification with the first public key fails, the second is tried,etc. The DD component of the Product ID specifies which of the publickeys in this sequence was successfully used to verify the Product Key.This mechanism might be intended to support several different partiesgenerating valid Product Keys with different individual private keys.However, the different private keys might also represent differentversions of a product. A Product Key for the 'professional' releasecould then be signed with a different key than a Product Key for the'server' release. The DD component would then represent the productversion.Finally, a valid Product ID derived from our example Product Key mightbe 55034-583-7284392-00123which indicates that the first public key (DD = index = 0) matched and123 was chosen as the random number EEE.The randomly selected EEE component is the reason for msoobe.exepresenting a different Installation ID at each invocation. Because ofthe applied encryption this small change results in a completelydifferent Installation ID.So, the Product ID transmitted during activation will most probablydiffer in the last three digits from your Product ID as displayed byInternet Explorer or as stored in the registry.>>> Hardware InformationAs discussed above, the hardware configuration linked to theInstallation ID is represented by the two double words H1 and H2.>>>> Bit-fieldsFor this purpose, the double words are divided into twelvebit-fields. The relationship between the computer hardware and thebit-fields is given in the following table. double word | offset | length | bit-field value based on ------------+--------+--------+---------------------------- H1 | 0 | 10 | volume serial number string | | | of system volume H1 | 10 | 10 | network adapter MAC address | | | string H1 | 20 | 7 | CD-ROM drive hardware | | | identification string H1 | 27 | 5 | graphics adapter hardware | | | identification string H2 | 0 | 3 | unused, set to 001 H2 | 3 | 6 | CPU serial number string H2 | 9 | 7 | harddrive hardware | | | identification string H2 | 16 | 5 | SCSI host adapter hardware | | | identification string H2 | 21 | 4 | IDE controller hardware | | | identification string H2 | 25 | 3 | processor model string H2 | 28 | 3 | RAM size H2 | 31 | 1 | 1 = dockable | | | 0 = not dockableBit 31 of H2 specifies, whether the bit-fields represent a notebookcomputer that supports a docking station. If docking is possible, theactivation mechanism will be more tolerant with respect to futurehardware modifications. Here, the idea is that plugging a notebookinto its docking station possibly results in changes to its hardwareconfiguration, e.g. a SCSI host adapter built into the docking stationmay become available.Bits 2 through 0 of H2 are unused and always set to 001.If the hardware component corresponding to one of the remaining tenbit-fields is present, the respective bit-field contains a non-zerovalue describing the component. A value of zero marks the hardwarecomponent as not present.All hardware components are identified by a hardware identificationstring obtained from the registry. Hashing this string provides thevalue for the corresponding bit-field.>>>> HashingThe hash result is obtained by feeding the hardware identificationstring into the MD5 message digest algorithm and picking the number ofbits required for a bit-field from predetermined locations in theresulting message digest. Different predetermined locations are usedfor different bit-fields. In addition, a hash result of zero isavoided by calculating Hash = (Hash % BitFieldMax) + 1where BitFieldMax is the maximal value that may be stored in thebit-field in question, e.g. 1023 for a 10-bit bit-field, and 'x % y'denotes the remainder of the division of x by y. This results invalues between 1 and BitFieldMax. The obtained value is then stored inthe respective bit-field.>>>> RAM bit-fieldThe bit-field related to the amount of RAM available to the operatingsystem is calculated differently. The seven valid values specify theapproximate amount of available RAM as documented in the followingtable. value | amount of RAM available ------+--------------------------- 0 | (bit-field unused) 1 | below 32 MB 2 | between 32 MB and 63 MB 3 | between 64 MB and 127 MB 4 | between 128 MB and 255 MB 5 | between 256 MB and 511 MB 6 | between 512 MB and 1023 MB 7 | above 1023 MBIt is important to note that the amount of RAM is retrieved by callingthe GlobalMemoryStatus() function, which reports a few hundredkilobytes less than the amount of RAM physically installed. So, 128 MBof RAM would typically be classified as "between 64 MB and 127 MB".>>>> Real-world exampleLet us have a look at a real-world example. On one of our test systemsthe hardware information consists of the following eight bytes. 0xC5 0x95 0x12 0xAC 0x01 0x6E 0x2C 0x32Converting the bytes into H1 and H2, we obtain H1 = 0xAC1295C5 and H2 = 0x322C6E01Splitting H1 and H2 yields the next table in which we give the valueof each of the bit-fields and the information from which each value isderived. dw & | | offset | value | derived from -------+-------+----------------------------------------------- H1 0 | 0x1C5 | '1234-ABCD' H1 10 | 0x0A5 | '00C0DF089E44' H1 20 | 0x37 | 'SCSI\CDROMPLEXTOR_CD-ROM_PX-32TS__1.01' H1 27 | 0x15 | 'PCI\VEN_102B&DEV_0519&SUBSYS_00000000&REV_01' H2 0 | 0x1 | (unused, always 0x1) H2 3 | 0x00 | (CPU serial number not present) H2 9 | 0x37 | 'SCSI\DISKIBM_____DCAS-34330______S65A' H2 16 | 0x0C | 'PCI\VEN_9004&DEV_7178&SUBSYS_00000000&REV_03' H2 21 | 0x1 | 'PCI\VEN_8086&DEV_7111&SUBSYS_00000000&REV_01' H2 25 | 0x1 | 'GenuineIntel Family 6 Model 3' H2 28 | 0x3 | (system has 128 MB of RAM) H2 31 | 0x0 | (system is not dockable)>>> Using XPDecXPDec is a utility to be run from the command prompt. It may beinvoked with one of four command line options to carry out one of fourtasks.>>>> XPDec -iThis option enables you to access the information hidden in anInstallation ID. It decodes the Installation ID, decrypts it, anddisplays the values of the hardware bit-fields as well as the ProductID of your product. Keep in mind that the last three digits of theProduct ID contained in the Installation ID are randomly selected anddiffer from the Product ID displayed by Internet Explorer.The only argument needed for the '-i' option is the Installation ID,as in XPDec -i 002666-077894-484890-114573-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XX>>>> XPDec -pTo help you trace the origin of your Product ID, this option decodes aProduct Key and displays the Raw Product Key as it would be used in aProduct ID.The only argument needed for the '-p' option is the Product Key, as in XPDec -p FFFFF-GGGGG-HHHHH-JJJJJ-KKKKKNote that this option does not verify the digital signature of theProduct Key.>>>> XPDec -vThis option calculates the hash of a given volume serial number. Itwas implemented to illustrate our description of string hashing. Firstuse '-i' to display the hardware bit-fields. Then use this option toverify our claims concerning the volume serial number hash.The only argument needed for the '-v' option is the volume serialnumber of your system volume, as in XPDec -v 1234-ABCD(The volume serial number is part of the 'dir' command's output.)>>>> XPDec -mThis option calculates the network adapter bit-field valuecorresponding to the given MAC address. Similar to '-v' this optionwas implemented as a proof of concept.The only argument needed for the '-m' option is the MAC address ofyour network adapter, as in XPDec -m 00-C0-DF-08-9E-44(Use the 'route print' command to obtain the MAC address of yournetwork adapter.)>> HARDWARE MODIFICATIONSWhen looking at the effects of hardware modifications on an alreadyactivated installation of Windows XP, the file 'wpa.dbl' in the'system32' directory plays a central role. It is a simpleRC4-encrypted database that stores, among other things like expirationinformation and the Confirmation ID of an activated installation, a) the bit-field values representing the current hardware configuration, and the bit-field values representing the hardware configuration at the time of product activation.While a) is automatically updated each time the hardware configurationis modified in order to reflect the changes, remains fixed. Hence, can be thought of as a snapshot of the hardware configuration atthe time of product activation.This snapshot does not exist in the database before product activationand if we compare the size of 'wpa.dbl' before and after activation,we will notice an increased file size. This is because the snapshot isadded to the database.When judging whether re-activation is necessary, the bit-field valuesof a) are compared to the bit-field values of , i.e. the currenthardware configuration is compared to the hardware configuration atthe time of activation.>>> Non-dockable computerTypically all bit-fields with the exception of the unused field andthe 'dockable' field are compared. If more than three of these tenbit-fields have changed in a) since product activation, re-activationis required.This means, for example, that in our above real-world example, wecould replace the harddrive and the CD-ROM drive and substantiallyupgrade our RAM without having to re-activate our Windows XPinstallation.However, if we completely re-installed Windows XP, the information in would be lost and we would have to re-activate our installation,even if we had not changed our hardware.>>> Dockable computerIf bit 31 of H2 indicates that our computer supports a dockingstation, however, only seven of the ten bit-fields mentioned above arecompared. The bit-fields corresponding to the SCSI host adapter, theIDE controller, and the graphics board are omitted. But again, ofthese remaining seven bit-fields, only up to three may change withoutrequiring re-activation.>> CONCLUSIONSIn this paper we have given a technical overview of Windows ProductActivation as implemented in Windows XP. We have shown whatinformation the data transmitted during product activation is derivedfrom and how hardware upgrades affect an already activatedinstallation.Looking at the technical details of WPA, we do not think that it is asproblematic as many people have expected. We think so, because WPA istolerant with respect to hardware modifications. In addition, it islikely that more than one hardware component map to a certain valuefor a given bit-field. From the above real-world example we know thatthe PX-32TS maps to the value 0x37 = 55. But there are probably manyother CD-ROM drives that map to the same value. Hence, it isimpossible to tell from the bit-field value whether it is a PX-32TSthat we are using or one of the other drives that map to the samevalue.In contrast to many critics of Windows Product Activation, we thinkthat WPA does not prevent typical hardware modifications and,moreover, respects the user's right to privacy.>> ABOUT THE AUTHORSFully Licensed GmbH is a start-up company focusing on novel approachesto online software licensing and distribution. Have a look at theirwebsite at http://www.licenturion.comfor more information.Their research branch every now and then analyzes licensing solutionsimplemented by other companies.>> COPYRIGHTCopyright © 2001 Fully Licensed GmbH (www.licenturion.com)All rights reserved.You are free to do whatever you want with this paper. However, youhave to supply the URL of its online version http://www.licenturion.com/xp/with any work derived from this paper to give credit to its authors. What about Windows without using AutoIt ?It would be the same as driving a car without an steering Wheel!
Wb-FreeKill Posted February 15, 2005 Author Posted February 15, 2005 That aint helping much i can't make it my self, anyone know how to do it?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now