.NET
Den Office Lizenzschlüssel aus der Registry auslesen
Posted on .Bei einem Praktikum hat man mir mal die Aufgabe gestellt alle Office (und noch andere) Schlüssel zu Katalogisieren, um zu sehen ob irgendwelche Schlüssel doppelt verwendet werden und ob noch weitere Lizenzen von Nöten sind!
Diese Aufgabe würde sich als sehr Zeitaufwendig herausstellen, da es mehr als 100 Rechner inklusive Laptops in der Firma gibt. Alle aufzufinden, inbesondere die Laptops war dann nicht mehr ganz einfach!
Deswegen habe ich mich dafür entschieden ein kleines Programm zu erstellen, dass für mich den KEY ausließt und ihn für mich Lokal auf einem Freigegebenen Laufwerk speichert! Dabei habe ich die Startscripts auf dem Server so modifiziert, dass mein Programm bei den Start von Windows einmal ausgeführt wird und nach installierten Office Version sucht!
So muss ich nicht durch die ganze Firma rennen und die Leute belästigen und habe gleich eine gute Übersicht!
Schlüsselstandort
Wo ist der Schlüssel eigentlich gespeichert? Wie so ziemlich alles bei Windows in der Registry, nämlich hier:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Registration
Wie Sven in den Kommentaren korrekt anmerkt, befindet sich der Schlüssel auf moderneren Windows Systemen (64Bit) an einem etwas anderen Ort:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Registration
Der Ordner Registration teilt sich dann je nach Installation in noch mehrere Unterordner auf, die aus einer ID der Installation bestehen. In diesen Ordnern gibt es den Schlüssel DigitalProductID
die die Seriennummer enthält!
Doch leider ist diese Seriennummer nicht im Klartext gespeichert, sondern im Hexadezimalen Zahlensystem, weswegen wir das erst einmal umwandeln müssen!
Die Umwandlung
Übrigens in dem oben angegebenen Registry Pfad steht die 12.0
für die Office Version in diesem Fall ist es Office 2007. 2003 hätte dann entsprechend eine 11 dort stehen usw…
Diese Funktion wird für uns die Konvertierung vornehmen. Ich werde diese jetzt nicht auseinander nehmen, da sie im Grunde ein Zahlensystem in ein anderes konvertiert. Das besondere Hier ist, dass es in den Office Keys immer nur die gleichen paar Buchstaben gibt! Nämlich: B, D, D, F, G, H, J, K, M, P, Q, R, T, V, W X und die Zahlen 2, 3, 4, 6, 7, 8, 9. Warum das so ist weis ich leider auch nicht, darauf muss man bei der Konvertierung aber achten!
Function Reg(ByVal hexbuf() As Byte)
Dim tmp As String
For l = LBound(hexbuf) To UBound(hexbuf)
tmp = tmp & "" & Hex(hexbuf(l))
Next
Dim StartOffset As Integer = 52
Dim EndOffset As Integer = 67
Dim Digits(24)
Digits(0) = "B" : Digits(1) = "C" : Digits(2) = "D" : Digits(3) = "F"
Digits(4) = "G" : Digits(5) = "H" : Digits(6) = "J" : Digits(7) = "K"
Digits(8) = "M" : Digits(9) = "P" : Digits(10) = "Q" : Digits(11) = "R"
Digits(12) = "T" : Digits(13) = "V" : Digits(14) = "W" : Digits(15) = "X"
Digits(16) = "Y" : Digits(17) = "2" : Digits(18) = "3" : Digits(19) = "4"
Digits(20) = "6" : Digits(21) = "7" : Digits(22) = "8" : Digits(23) = "9"
Dim dLen As Integer = 29
Dim sLen As Integer = 15
Dim HexDigitalPID(15)
Dim Des(30)
Dim tmp2 As String
Dim HN As Integer
Dim Value As Integer
Dim KEYSTRING2 As String
For i As Integer = StartOffset To EndOffset
HexDigitalPID(i - StartOffset) = hexbuf(i)
tmp2 = tmp2 & " " & Hex(HexDigitalPID(i - StartOffset))
Next
Dim KEYSTRING As String = ""
For i = dLen - 1 To 0 Step -1
If ((i + 1) Mod 6) = 0 Then
Des(i) = "-"
KEYSTRING = KEYSTRING & "-"
Else
HN = 0
For N As Integer = (sLen - 1) To 0 Step -1
Value = ((HN * 2 ^ 8 ) Or HexDigitalPID(N))
HexDigitalPID(N) = Value 24
HN = (Value Mod 24)
Next
Des(i) = Digits(HN)
KEYSTRING = KEYSTRING & Digits(HN)
End If
Next
KEYSTRING2 = StrReverse(KEYSTRING)
Return KEYSTRING2
End Function
Diese Funktion erwartet einen Parameter zur Ausführung, nämlich hexbuf() as Byte
also einen Byte Array! den bekommen wir in dem wir einen Wert aus der Registry auslesen, und zwar einen REG_BINARY
Wert!
Diese Funktion stammt nicht von mir, ich habe sie vor einer Weile im Netz gefunden und in VB.NET umgeschrieben.
Einen Wert aus der Registry auszulesen ist mit .NET relativ einfach:
Dim Value() As Byte = My.Computer.Registry.GetValue_
("HKEY_LOCAL_MACHINESOFTWAREMicrosoftOffice12.0Registration...", "DigitalProductID", "")
Alle dazu benötigten Funktionen stellt uns der My
-Namespace zur Verfügung!
Zusammenfassung
Im Großen und Ganzen wars das schon gewesen! Ich habe diesbezüglich ein kleines Demo – Projekt angefertigt, dass ihr hier herunterladen könnt! In dem Projekt werden alle eure Office Keys ausgelesen, da oftmalls Outlook einen anderen KEY hat als der Rest usw… Das kann man daran erkennen, dass in dem Ordner Registration mehrere Unterordner gibt, die aus einer langen Zahl bestehen, welche auf jedem Computer anders ist! – Ihr müsst ledeglich die Version anpassen, im meinem Beispiel wird der KEY von Office 2007 ausgelesen. Also Version 12!
Hat dieser Beitrag dir geholfen? Hattest du Probleme oder hast du Anregungen? Schreib dann bitte einen Kommentar.
Hier gibts das Demo-Projekt: Office Key Finder – Demo Projekt
Hier könnt ihr euch das komplette kostenlose Programm zum auslesen vom Windows & Office Key herunterladen. (English & Deutsch)
Sebastian Gross
http://www.bigbasti.comSebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.
Author ich
Posted at 13:12 8. August 2010.
KLAPPT NICHTMEHR SEIT
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Registration
Siehe nicht 12.0 sondern 14.0!
liest falschen key aus
Author Heinrich
Posted at 20:53 16. Dezember 2010.
Danke für den netten Artikel. Coole Sache.
Ohne meckern zu wollen, du hast da noch paar Tippfehler drin. 😉
Aber macht nichts, passiert mir auch…
Author Max
Posted at 22:44 28. Dezember 2010.
Danke für das Tool. Hat mir für die Installation des neuen Rechners geholfen 😉
Author 2daniel
Posted at 13:47 2. Januar 2011.
Cooles Tool! gut gemacht!
Author Lacose
Posted at 14:14 22. August 2011.
Super Tool!
kannst du mir evtl erklären was die Zeile „Dim KEYSTRING As String = „“
33 For i = dLen – 1 To 0 Step -1
34 If ((i + 1) Mod 6) = 0 Then
35 Des(i) = „-“
36 KEYSTRING = KEYSTRING & „-“
37 Else
38 HN = 0
39 For N As Integer = (sLen – 1) To 0 Step -1
40 Value = ((HN * 2 ^ 8 ) Or HexDigitalPID(N))
41 HexDigitalPID(N) = Value \ 24
42 HN = (Value Mod 24)
43 Next
44 Des(i) = Digits(HN)
45 KEYSTRING = KEYSTRING & Digits(HN)
46 End If“
Macht? ^^
Author Sebastian Gross
Posted at 14:19 22. August 2011.
Hallo Lacose,
dieser Abschnitt wandelt die Zeichenfolde aus dem Hexydezimalen in unsere „Sprache“ um.
Falls du dich wunderst was die ganzen & Zeichen sollen, dies macht WordPress von alleine statt den ganzen &s; sollte einfach nur ein „&“ stehen. Schau dir den Beispielcode im Projekt an um das besser zu sehen.
Gruß, sebastian
Author Jenny
Posted at 07:14 23. August 2011.
Hey,
ich hab da mal eine Frage: Ich benötige einen Produkt-Key um es vollständig zu installieren, denn ich habe nur eine Testversion drauf bzw. Office 2010 Starter Version.
Wo bekomme ich den Key her??? Leider bin ich kein großer PC Crack…
Vielen Dank für deine Hilfe schon mal…. LG Jenny
Author Sebastian Gross
Posted at 07:43 23. August 2011.
Hallo Jenny,
verstehe ich das richtig? Du brauchst einen Schlüssel für Office?
Dann solltest du z.B. hier schauen: http://bit.ly/oZnp2F
Gruß, Sebastian
Author Lacose
Posted at 11:20 23. August 2011.
Hallo Sebastian Gross,
danke erstmal für deine antwort 😀
könntest du mir evtl di eumwandlung von den Hex in lesbare schrift etwas näher erklären ich versteh das nicht so ganz
lg Lacose
Author Sebastian Gross
Posted at 12:08 23. August 2011.
Hallo Lacose,
das ist kein Thema für den Kommentarbereich, das ist ein sehr oft disskutierte Thema, einfach bei Google eintippen und du wirs haufenweise Anleitungen finden.
Gruß, Sebastian
Author GT
Posted at 21:12 27. August 2011.
Hallo Sebastian,
ich habe das komplette Programm runtergeladen, es liest bei mir aber nur den Windows 7 Key aus!? Was mache ich falsch?
Beste Grüße
Gilbert
Author Sebastian Gross
Posted at 06:25 29. August 2011.
Hallo GT,
ein paar mehr Informationen wären nett:
– Welches Betriebsystem?, Welche Plattform?
– Welche Office Version, wie wurde diese Installiert?
– OEM, oder Retail Version?
Dein Fehler deutet auf eine fehlerhafte oder modifizierte installation an.
Gruß, Sebastian
Author Schlossdiener
Posted at 16:42 5. November 2011.
Hallo Sebastian,
habe das Tool angewendet und für Office 2010 wird eine Key ausgelesen.
Leider wird der Key von Office 2010 nicht als richtig erkannt.
Muss ich etwas ändern oder wo liegt mein Fehler.
Für Deine Hilfe vielen Dank.
Gruß Schlossdiener
Author um
Posted at 11:33 7. November 2011.
trotz Anpassung an 14.0 krieg ich nur eine leere Messagbox….
Author IT FIAN 85
Posted at 12:49 7. November 2011.
hab das Prog als User gestartet wo ist erkenne ich dann den Key (als .txt oder so)
Author IT FIAN 85
Posted at 12:51 7. November 2011.
Anfrage hat sich erledigt
Author Lilly
Posted at 19:30 27. November 2011.
Wie geht denn das mit Windows 7? Ich kann zwar bis Office und dann auf 12.0 aber ich komm dann nur noch auf MsoExample und User Settings? Bei mir gibt es keine Registration? Kann mir jemand erklären wie das mit Windows 7 klappt?
Author Specter
Posted at 17:07 12. Januar 2012.
Cooles Tool. Danke
Author klausi
Posted at 02:19 9. Februar 2012.
Habe mit einem älteren Vaio Office Home and Student 2007 geerbt. Läßt sich dieser Produktkey auslesen?
gruß
klausi
Author klausi
Posted at 02:20 9. Februar 2012.
Habe mit einem älteren Vaio Office Home and Student 2007 geerbt.
Läßt sich dieser Produktkey auslesen?
Gruß
klausi
Author Sebastian Gross
Posted at 07:57 9. Februar 2012.
Sollte Funktionieren!
Author Sven Mawby
Posted at 10:17 13. Februar 2012.
Seit Office 2010 wird der Key nicht „HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\“ … aufbewahrt..
.. Wo dieser ist weiss ich nicht, bin einfach mal auf ProduKey umgestiegen 😀
Author Sven Mawby
Posted at 10:21 13. Februar 2012.
Ah, hab herausgefunden warum: 64bit speichert unter „HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Registration“ 😀
Author Sebastian Gross
Posted at 10:59 13. Februar 2012.
Hallo Sven,
ganz genau, die Schlüssel in der Registry der 64Bit Systeme werden in zwei „Klassen“ unterteilt. Man muss dann im Code eine Unterscheidung einbauen und den passenden Pfad abfragen.
Gruß, Basti
Author Jonas Jelonek
Posted at 17:02 12. März 2012.
Ich verwende visual Basic 2010 Express Edition und habe den Code mal in Visual Basic eingefügt doch das Programm meckert.
Mit den Zeilen
tmp = tmp & „“ & Hex(hexbuf(l))
tmp2 = tmp2 & „“ & Hex(hexbuf(l))
KEYSTRING = KEYSTRING & Digits(HN)
scheint etwas nicht zu stimmen undzwar zeigt visual basic unter „&“ eine rote linie an
was hab ich falsch gemacht
Author Trigg3r
Posted at 13:38 22. Februar 2013.
Wäre es möglich, dass Du das Programm dahingehend anpasst, dass auch Office 2013 Keys ausgelesen werden können? Wäre sehr cool… Besten Dank im Voraus!
Author Sebastian Gross
Posted at 11:53 28. Februar 2013.
Theoretisch sollte es auch mit Office 2013 funktionieren, einfach mal testen.
Author Jürgen Köhnke
Posted at 21:45 18. Juni 2021.
Wie wäre es denn, sich einmal mit der Grammatik, Orthographie und Interpunktion der deutschen Sprache zu beschäftigen und sie zu erlernen?