Liebe AHK-Freunde,
bin auf der Suche nach einer Möglichkeit zur Anzeige des product-key's für Windows 10... bzw. der Entschlüsselung des eigenen, aktivierten Schlüssels aus der registry. Im Archiv-Board habe ich folgendes gefunden (die Entschlüsselung klappt zwar unter Windows 10 Pro 32/64 Bit, zeigt aber nicht den richtigen Code):
https://autohotkey.com/board/topic/7327 ... on-script/
Hat denn jemand bereits damit experimentiert, bzw. eine Lösung oder Korrektur des Archivscripts von Isavell (...Danke!) parat?
moefr01
Microsoft Product Key Enumeration - Windows 10 ?
Moderator: jNizM
Re: Microsoft Product Key Enumeration - Windows 10 ?
Hi AHK-Coder,
nachdem ich nun etwas Luft für die Aktualisierung vergangener Scripte hatte, bin ich selber fündig geworden und habe folgendes Script gebastelt:
o.a. Code nutzt VBScript für das Lesen und Konvertieren der ProductID aus der Registry von Windows 7, 8.x und 10 (FUNKTIONSTÜCHTIG: Windows 10 Pro 1709.16299.19)
Da sich mir VBScript noch nicht sooo erschlossen hat , baute ich den Code in AHK ein und starte diesen darüber. Das VBS-Script wird nach Ausführung dessen wieder gelöscht.
Mein Anliegen: Wer kann mir den implantierten VBScript-Code in puren AHK-Code umwandeln ???
moefr01
nachdem ich nun etwas Luft für die Aktualisierung vergangener Scripte hatte, bin ich selber fündig geworden und habe folgendes Script gebastelt:
Code: Select all
; Embedded VBScript to get the Windows(R) 7/8.x/10 DigitalProductID (registry) converting to Product Key
myVBScript =
(
Set WshShell = WScript.CreateObject("WScript.Shell")
RegKeyPath = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId"
ProductKey = ConvertKey(WshShell.RegRead(RegKeyPath))
MsgBox ProductKey, , "My Windows Product-Key:"
Function ConvertKey(KeyInput)
Const KeyOffset = 52
Dim isW8, i, x, Cur, KeyOutput, Last, keypart1, insert
'If Windows >= 8:
isW8 = (KeyInput(66) \ 6) And 1
KeyInput(66) = (KeyInput(66) And &HF7) Or ((isW8 And 2) * 4)
i = 24
Chars = "BCDFGHJKMPQRTVWXY2346789"
Do
Cur = 0
x = 14
Do
Cur = Cur * 256
Cur = KeyInput(x + KeyOffset) + Cur
KeyInput(x + KeyOffset) = (Cur \ 24) And 255
Cur = Cur Mod 24
x = x -1
Loop While x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
Last = Cur
Loop While i >= 0
keypart1 = Mid(KeyOutput, 2, Last)
insert = "N"
KeyOutput = Replace(KeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
If Last = 0 Then KeyOutput = insert & KeyOutput
ConvertKey = Mid(KeyOutput, 1, 5) & "-" & Mid(KeyOutput, 6, 5) & "-" & Mid(KeyOutput, 11, 5) & "-" & Mid(KeyOutput, 16, 5) & "-" & Mid(KeyOutput, 21, 5)
End Function
)
FileAppend, %myVBScript%, ProductKey.vbs
RunWait, ProductKey.vbs
FileDelete, ProductKey.vbs
ExitApp
Da sich mir VBScript noch nicht sooo erschlossen hat , baute ich den Code in AHK ein und starte diesen darüber. Das VBS-Script wird nach Ausführung dessen wieder gelöscht.
Mein Anliegen: Wer kann mir den implantierten VBScript-Code in puren AHK-Code umwandeln ???
moefr01
Re: Microsoft Product Key Enumeration - Windows 10 ?
Moin,
Ich habe allerdings noch ein Problem mit:Nach meinem bisherigen Verständnis liefert (KeyInput(66) \ 6) And 1 auch in VB immer 0 oder 1. Was genau macht dann (isW8 And 2)?
Da bin ich ganz auf Deinem Stand. Dennoch sollte es nicht zu schwer sein. Dein VB-Code vermittelt den Eindruck, als ob Microsoft (zumindest) für den Key eine BASE24 Kodierung verwendet. In VB liefert RegRead ein 0-basiertes Array von Integer-Werten im Bereich von 0x00 - 0xFF. AHK liefert einen Hex-String.moefr01 wrote:Da sich mir VBScript noch nicht sooo erschlossen hat , ...
Ich habe allerdings noch ein Problem mit:
Code: Select all
isW8 = (KeyInput(66) \ 6) And 1
KeyInput(66) = (KeyInput(66) And &HF7) Or ((isW8 And 2) * 4)
Re: Microsoft Product Key Enumeration - Windows 10 ?
hey just me,
habe das VBScript gegoogelt... der ominöse Code setzt die Variablen isW8 und KeyInput(66) auf 1... ebenso bei Windows 8.1 und 10, jedoch nicht bei 7.
Die ProductId-Werte in der Registry sind unter VB mit &HF7 (dec 247) maskiert und werden 14 mal ausgelesen (x).
Bei meinen kläglichen Versuchen die Do ... Loop While - Schleifen mit AHK-Code Loop { while } oder Loop ( until ) zu ersetzen kommt nix raus:
Die Variablen isW8 und Key[66] := 1 umgehen den ominösen Code und erzeugen unter VB den richtigen ProductKey, aber nicht unter AHK... Beim Debuggen des VB-codes mit msgbox lese ich in der Variablen Cur dezimale Werte, beim AHK-Code nix. Stimmt die Syntax meines AHK-codes?
moefr01
habe das VBScript gegoogelt... der ominöse Code setzt die Variablen isW8 und KeyInput(66) auf 1... ebenso bei Windows 8.1 und 10, jedoch nicht bei 7.
Die ProductId-Werte in der Registry sind unter VB mit &HF7 (dec 247) maskiert und werden 14 mal ausgelesen (x).
Bei meinen kläglichen Versuchen die Do ... Loop While - Schleifen mit AHK-Code Loop { while } oder Loop ( until ) zu ersetzen kommt nix raus:
Code: Select all
RegRead, DigitalID, HKEY_LOCAL_MACHINE, SOFTWARE\Microsoft\Windows NT\CurrentVersion, DigitalProductId
ProductKey := ConvertToKey(DigitalID)
MsgBox, %ProductKey%
ConvertToKey(Key) {
KeyOffset := 52
;isWin8 := (Key[66] // 6) And 1
;Key(66) := (Key[66] And &HF7) Or ((isWin8 And 2) * 4)
isWin8 := 1
Key[66] := 1
i := 24
Chars := "BCDFGHJKMPQRTVWXY2346789"
Loop {
Cur := 0
X := 14
Loop {
Cur := Cur * 256
Cur := Key[X + KeyOffset] + Cur
Key[X + KeyOffset] := (Cur // 24)
Cur := Mod(Cur, 24)
X -= 1
} While X >= 0
i -= 1
KeyOutput := SubStr(Chars, Cur + 1, 1) & KeyOutput
Last := Cur
} While i >= 0
If (isWin8 = 1)
{
keypart1 := SubStr(KeyOutput, 2, Last)
insert := "N"
KeyOutput := StrReplace(KeyOutput, keypart1, keypart1 & insert, 2, 1)
If Last := 0
KeyOutput := insert & KeyOutput
}
a := SubStr(KeyOutput, 1, 5)
b := SubStr(KeyOutput, 6, 5)
c := SubStr(KeyOutput, 11, 5)
d := SubStr(KeyOutput, 16, 5)
e := SubStr(KeyOutput, 21, 5)
ConvertToKey := a "-" b "-" c "-" d "-" e
}
moefr01
Re: Microsoft Product Key Enumeration - Windows 10 ?
Moin,
ich habe hier etwas, das auf meinem Rechner einen Key ausgibt, der mit dem des VB-Skripts identisch ist. Um erst einmal möglichst nahe am VB-Skript zu bleiben, habe ich dabei den Hex-String aus RegRead in ein 0-basiertes Array übertragen. Der 'ominöse' Code ist noch drin, ich habe aber nach wie vor Zweifel am Sinn von | ((IsW8 & 2) * 4), zumindest in AHK. Das Arrayelement 66 wird hier auf 1 gesetzt, weil das Element den Wert 9 enthält (9 & 0xF7 = 1). Du kannst ja probieren, ob Dein Workaround Key[66] := 1 zuverlässig funktioniert:
Hast Du noch den Link für das VB-Skript?
ich habe hier etwas, das auf meinem Rechner einen Key ausgibt, der mit dem des VB-Skripts identisch ist. Um erst einmal möglichst nahe am VB-Skript zu bleiben, habe ich dabei den Hex-String aus RegRead in ein 0-basiertes Array übertragen. Der 'ominöse' Code ist noch drin, ich habe aber nach wie vor Zweifel am Sinn von | ((IsW8 & 2) * 4), zumindest in AHK. Das Arrayelement 66 wird hier auf 1 gesetzt, weil das Element den Wert 9 enthält (9 & 0xF7 = 1). Du kannst ja probieren, ob Dein Workaround Key[66] := 1 zuverlässig funktioniert:
Code: Select all
#NoEnv
MsgBox, % GetWinProductKey()
ExitApp
GetWinProductKey() {
Static Chars := "BCDFGHJKMPQRTVWXY2346789"
Static Insert := "N"
Static KeyOffset := 52
ProductKeyArray := []
RegRead, ProductKey, HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion, DigitalProductId
Loop, % (StrLen(ProductKey) // 2) {
I := A_Index - 1
ProductKeyArray[I] := "0x" . SubStr(ProductKey, (I * 2) + 1, 2)
}
IsW8 := (ProductKeyArray[66] // 6) & 1
ProductKeyArray[66] := (ProductKeyArray[66] & 0xF7) | ((IsW8 & 2) * 4)
I := 24
KeyOutput := ""
While (I >= 0) {
Cur = 0
X := 14
While (X >= 0) {
Cur := Cur * 256
Cur := ProductKeyArray[X + KeyOffset] + Cur
ProductKeyArray[X + KeyOffset] := (Cur // 24) & 0xFF
Cur := Mod(Cur, 24)
X--
}
KeyOutput := Substr(Chars, Cur + 1, 1) . KeyOutput
Last := Cur
I--
}
KeyPart1 := SubStr(KeyOutput, 2, Last)
KeyOutput := StrReplace(SubStr(KeyOutput, 2), KeyPart1, KeyPart1 . Insert, , 1)
If (Last = 0)
KeyOutput := Insert . KeyOutput
Return SubStr(KeyOutput, 1, 5) . "-" . SubStr(KeyOutput, 6, 5) . "-" . SubStr(KeyOutput, 11, 5) . "-"
. SubStr(KeyOutput, 16, 5) . "-" . SubStr(KeyOutput, 21, 5)
}
Re: Microsoft Product Key Enumeration - Windows 10 ?
Hey hey just me,
hier der gewünschte link: https://stackoverflow.com/questions/313 ... ean-in-vbs
Super... dein Code (ist so aufgeräumt! ) funktioniert soweit gut. Ich habe festgestellt, dass der ausgelesene ProductKey auf einem Windows 7 Pro 64Bit-System sich wie folgt jeweils nur am Anfang unterscheidet:
mit VBScript-Code: CVMQH - ...
mit AHK-Code: VNMQH - ...
Scheint so, dass die Berechnung | ((IsW8 & 2) * 4) doch irgendwie relevant ist.
Microsoft hat auch zu Zeiten Windows 7 den ProductKey anders verschlüsselt - ich hatte mal einen alten VBS-Code, der damals funktionierte, heute aber nicht mehr... siehe auch im Code das replacement mit dem Buchstabe "N" für Windows 8.x und 10.
Bei einem Windows 10 Pro 64Bit-System jedenfalls passt der key.
Test 2 - Windows 7 Pro 64Bit: Beim Weglassen von | ((IsW8 & 2) * 4) oder Key[66] := 1 wird wiederrum der falsche key angezeigt (VNMQH - ...).
Element 66 ist laut registry bei Windows 7 Pro eine 0 ... bei Windows 10 eine 9.
hier der gewünschte link: https://stackoverflow.com/questions/313 ... ean-in-vbs
Super... dein Code (ist so aufgeräumt! ) funktioniert soweit gut. Ich habe festgestellt, dass der ausgelesene ProductKey auf einem Windows 7 Pro 64Bit-System sich wie folgt jeweils nur am Anfang unterscheidet:
mit VBScript-Code: CVMQH - ...
mit AHK-Code: VNMQH - ...
Scheint so, dass die Berechnung | ((IsW8 & 2) * 4) doch irgendwie relevant ist.
Microsoft hat auch zu Zeiten Windows 7 den ProductKey anders verschlüsselt - ich hatte mal einen alten VBS-Code, der damals funktionierte, heute aber nicht mehr... siehe auch im Code das replacement mit dem Buchstabe "N" für Windows 8.x und 10.
Bei einem Windows 10 Pro 64Bit-System jedenfalls passt der key.
Test 2 - Windows 7 Pro 64Bit: Beim Weglassen von | ((IsW8 & 2) * 4) oder Key[66] := 1 wird wiederrum der falsche key angezeigt (VNMQH - ...).
Element 66 ist laut registry bei Windows 7 Pro eine 0 ... bei Windows 10 eine 9.
Re: Microsoft Product Key Enumeration - Windows 10 ?
Code: Select all
If (isWin8 = 1)
{
keypart1 := SubStr(KeyOutput, 2, Last)
insert := "N"
KeyOutput := StrReplace(KeyOutput, keypart1, keypart1 & insert, 2, 1)
If Last := 0
KeyOutput := insert & KeyOutput
}
Re: Microsoft Product Key Enumeration - Windows 10 ?
hab' ich da womöglich voll übersehen... passiert!
Deine Info wahr goldrichtig, jetzt klappt's auch mit dem Auslesen des ProductKeys für Windows 7.
Hier der angepasste und verifizierte Code:
moefr01 sagt artig schankedön für die prompte Hilfe
Deine Info wahr goldrichtig, jetzt klappt's auch mit dem Auslesen des ProductKeys für Windows 7.
Hier der angepasste und verifizierte Code:
Code: Select all
; ProductKey von Windows 7, 8.x, 10 auslesen
#NoEnv
MsgBox, % GetWinProductKey()
ExitApp
GetWinProductKey() {
Static Chars := "BCDFGHJKMPQRTVWXY2346789"
Static KeyOffset := 52
ProductKeyArray := []
RegRead, ProductKey, HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion, DigitalProductId
Loop, % (StrLen(ProductKey) // 2) {
I := A_Index - 1
ProductKeyArray[I] := "0x" . SubStr(ProductKey, (I * 2) + 1, 2)
}
IsW8 := (ProductKeyArray[66] // 6) & 1
ProductKeyArray[66] := (ProductKeyArray[66] & 0xF7) | ((IsW8 & 2) * 4)
I := 24
KeyOutput := ""
While (I >= 0) {
Cur := 0
X := 14
While (X >= 0) {
Cur := Cur * 256
Cur := ProductKeyArray[X + KeyOffset] + Cur
ProductKeyArray[X + KeyOffset] := (Cur // 24) & 0xFF
Cur := Mod(Cur, 24)
X--
}
KeyOutput := Substr(Chars, Cur + 1, 1) . KeyOutput
Last := Cur
I--
}
If (IsW8 = 1)
{
KeyPart1 := SubStr(KeyOutput, 2, Last)
Insert := "N"
KeyOutput := StrReplace(SubStr(KeyOutput, 2), KeyPart1, KeyPart1 . Insert, , 1)
If Last := 0
KeyOutput := Insert & KeyOutput
}
Return SubStr(KeyOutput, 1, 5) . "-" . SubStr(KeyOutput, 6, 5) . "-" . SubStr(KeyOutput, 11, 5) . "-"
. SubStr(KeyOutput, 16, 5) . "-" . SubStr(KeyOutput, 21, 5)
}
Re: Microsoft Product Key Enumeration - Windows 10 ?
Gut, das es funktioniert. Hast Du eine Chance, den gelieferten Aktivierungskey zu prüfen? Alle Skriptversionen, die ich noch gefunden habe, geben schließlich immer irgendetwas zurück, das wie ein Aktivierungskey aussieht.
Re: Microsoft Product Key Enumeration - Windows 10 ?
Konnte heute meinen barebone mit gekaufter Softwarebuilder-Lizenz für Windows 10 Pro 64Bit und einen älteren Asus-Laptop mit aufgeklebter OEM-Lizenz für Windows 7 Pro 64Bit erfolgreich verifizieren. Mit der "Microsoft PID Checker"-Anwendung kann man auch Keys manuell eingeben und auf Gültigkeit prüfen lassen ... gerade erfolgreich ausprobiert. Ansonsten kannst Du mit "slmgr.vbs -dlv" deinen Aktivierungsstatus abfragen > https://msdn.microsoft.com/de-de/librar ... s.11).aspx
Sobald ich wieder einen PC mit aufgeklebtem COA in die Finger bekomme (Home und 32Bit ...) lasse ich das AHK-script drüberlaufen und poste das Ergebnis.
ProductKey VERIFIZIERUNG:
- Windows 10 Professional 64 Bit, deutsch, Version 1709 Build 16299.19
- Windows 10 Home 32 Bit, deutsch, Version 1709 Build 16299.19
- Windows 7 Home 32 Bit, deutsch, Version 6.1 Build 7601.23914
- Windows 7 Professional 64 Bit, deutsch, Version 6.1 Build 7601.23914
Sobald ich wieder einen PC mit aufgeklebtem COA in die Finger bekomme (Home und 32Bit ...) lasse ich das AHK-script drüberlaufen und poste das Ergebnis.
ProductKey VERIFIZIERUNG:
- Windows 10 Professional 64 Bit, deutsch, Version 1709 Build 16299.19
- Windows 10 Home 32 Bit, deutsch, Version 1709 Build 16299.19
- Windows 7 Home 32 Bit, deutsch, Version 6.1 Build 7601.23914
- Windows 7 Professional 64 Bit, deutsch, Version 6.1 Build 7601.23914
Last edited by moefr01 on 10 Nov 2017, 12:01, edited 2 times in total.
Re: Microsoft Product Key Enumeration - Windows 10 ?
Wirklich spannend ist, ob das so auch für Win 8(.1) funktioniert. Man müsste herausfinden, welchen Inhalt das Feld 66 da hat.
Re: Microsoft Product Key Enumeration - Windows 10 ?
Also ich nehm dafür "Produkey". Das kostet nix und macht genau, was ich will - Auch unter Windows 10.
Re: Microsoft Product Key Enumeration - Windows 10 ?
Moin Gucky,
ich habe beim Recherchieren auch einige Tools gefunden. Ich bin mir aber inzwischen ziemlich sicher, dass die eine sehr ähnliche Methode vewenden. Und schließlich: Nur bei Software, die man selbst geschrieben hat bzw. deren Sourcecode man kennt und lesen kann, weiß man genau, was sie tut.
ich habe beim Recherchieren auch einige Tools gefunden. Ich bin mir aber inzwischen ziemlich sicher, dass die eine sehr ähnliche Methode vewenden. Und schließlich: Nur bei Software, die man selbst geschrieben hat bzw. deren Sourcecode man kennt und lesen kann, weiß man genau, was sie tut.
Re: Microsoft Product Key Enumeration - Windows 10 ?
Das ist natürlich klar, keine Frage.
Außerdem ist es ja auch eine Bereicherung für die AHK Community, wenn sich das auch mit AHK lösen lässt.
Gucky.
Außerdem ist es ja auch eine Bereicherung für die AHK Community, wenn sich das auch mit AHK lösen lässt.
Gucky.
Who is online
Users browsing this forum: No registered users and 62 guests