Hilfe beim Office Produkt key auslesen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Hilfe beim Office Produkt key auslesen

    Guten Tag,

    Ich bastel gerade an einem Programm was den Kompletten Office Produkt-schlüssel auslesen kann, im Internet hab ich diverse Scripte und Codes gefunden, ABER ist dort ziemlich groß geschrieben.
    Also bei mir so, denn egal mit welcher Version und oder Betriebssystem ich Arbeite, ich bekomme immer nur einen Falschen schlüssel raus. Ich hab die Normale Umwandlung genommen und mit der "N" Variante , gibt es bei der Office key auslese einen anderen Algorithmus ? mfg Alex
    Afaik gibt es da nichts 100%ig zuverlässiges. Ich habe das auch schon mal geschrieben in VBS.
    Das war auf Basis der GetProductKeys.VBS v1.0 by Foolish IT
    zB hier:
    gist.github.com/ilikenwf/11216271

    Vielleicht nimmst das als Ansatz, beginnst es nach VB.NET umzuschreiben und dann meldest dich wenn was nicht klappt.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    Dies ist nur ein Beispiel. Das ist ja nicht deine erste Aufgabe in diese Richtung, daher gehe ich davon aus das du iwas Richtung Programmierung lernst. Einfach nur kopieren und nix selber machen ist da nicht.
    Du brauchst den Teil mit der Domain nicht. Es geht um den Teil mit dem Auslesen des Keys!
    Das ist meine Signatur und sie wird wunderbar sein!
    @Mono

    Ja ich bin in Richtung Anwendungsentwicklung tätig, aktuell noch als Praktikant , aber hoffe bald auch mit einer Ausbildungsannahme.

    Ich dachte es ist schon so fertig das man es Testen kann, naja dann heißt es wohl bisschen Pfeilen und rumprobieren, ich hab VBS gelernt zu hassen ^^ aber was man muss das muss man :)

    @Mono was ist jetzt anders an dem "GetProductKey" ? die Umwandlung ist genauso wie in meinen schon vorhandenen Code.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Th3RaZe“ ()

    @Mono

    Basieren tut es immer gleich.

    VB.NET-Quellcode

    1. Private Function GetProductKey() As String
    2. Dim BaseKey As RegistryKey = Nothing
    3. Dim SubKey As RegistryKey = Nothing
    4. If Environment.Is64BitOperatingSystem = True Then
    5. BaseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
    6. SubKey = BaseKey.OpenSubKey("SOFTWARE\Wow6432Node\Microsoft\Office\" & "14.0\Registration\{90140000-0011-0000-0000-0000000FF1CE}", False)
    7. Else
    8. SubKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Registration\{90140000-0011-0000-0000-0000000FF1CE}", False)
    9. End If
    10. Dim digitalProductId As Byte() = DirectCast(SubKey.GetValue("DigitalProductId", New Byte(-1) {}), Byte())
    11. Dim keyStartIndex As Integer = 52
    12. Dim keyEndIndex As Integer = keyStartIndex + 15
    13. Const numLetters As Integer = 24
    14. ' Possible alpha-numeric characters in product key.
    15. Dim digits As Char() = New Char() {"B"c, "C"c, "D"c, "F"c, "G"c, "H"c,
    16. "J"c, "K"c, "M"c, "P"c, "Q"c, "R"c,
    17. "T"c, "V"c, "W"c, "X"c, "Y"c, "2"c,
    18. "3"c, "4"c, "6"c, "7"c, "8"c, "9"c}
    19. ' Check if Windows 8/Office 2013 Style Key (Can contain the letter "N")
    20. Dim containsN As Integer = (digitalProductId(keyStartIndex + 14) >> 3) And 1
    21. digitalProductId(keyStartIndex + 14) = Convert.ToByte((digitalProductId(keyStartIndex + 14) And &HF7) Or ((containsN And 2) << 2))
    22. 'Length of decoded product key
    23. Const decodeLength As Integer = 29
    24. ' Length of decoded product key in byte-form.
    25. ' Each byte represents 2 chars.
    26. Const decodeStringLength As Integer = 15
    27. ' Array of containing the decoded product key.
    28. Dim decodedChars As Char() = New Char(decodeLength - 1) {}
    29. ' Extract byte 52 to 67 inclusive.
    30. Dim hexPid As New List(Of Byte)()
    31. For i As Integer = keyStartIndex To keyEndIndex
    32. hexPid.Add(digitalProductId(i))
    33. Next
    34. For i As Integer = decodeLength - 1 To 0 Step -1
    35. ' Every sixth char is a separator.
    36. If (i + 1) Mod 6 = 0 Then
    37. decodedChars(i) = "-"c
    38. Else
    39. ' Do the actual decoding.
    40. Dim digitMapIndex As Integer = 0
    41. For j As Integer = decodeStringLength - 1 To 0 Step -1
    42. Dim byteValue As Integer = (digitMapIndex << 8) Or hexPid(j)
    43. hexPid(j) = CByte(byteValue \ numLetters)
    44. digitMapIndex = byteValue Mod numLetters
    45. decodedChars(i) = digits(digitMapIndex)
    46. Next
    47. End If
    48. Next
    49. ' Remove first character and put N in the right place
    50. Dim firstLetterIndex As Integer = 0
    51. For index As Integer = 0 To numLetters - 1
    52. If decodedChars(0) <> digits(index) Then
    53. Continue For
    54. End If
    55. firstLetterIndex = index
    56. Exit For
    57. Next
    58. Dim keyWithN As New String(decodedChars)
    59. keyWithN = keyWithN.Replace("-", String.Empty).Remove(0, 1)
    60. keyWithN = keyWithN.Substring(0, firstLetterIndex) & "N" & keyWithN.Remove(0, firstLetterIndex)
    61. keyWithN = keyWithN.Substring(0, 5) & "-" & keyWithN.Substring(5, 5) & "-" & keyWithN.Substring(10, 5) & "-" & keyWithN.Substring(15, 5) & "-" & keyWithN.Substring(20, 5)
    62. Return keyWithN
    63. Return New String(decodedChars)
    64. End Function
    Ich will das alte Thema nochmal aufleben lassen.
    Ab Office Version 14 klappt der Code nicht mehr. Kann es sein das sich der Offset verändert hat? Ich habe mit einem bekannten Key das Office 2010 installiert und nach dem auslesen leider einen anderen angezeigt bekommen.
    Was miss geändert werden ?

    MfG