evinben
Goto Top

Hex in Dez umwandeln - innerhalb einer Batchdatei (ProductID auslesen)

Hallo Gemeinde,

ich bin noch am Leben face-wink

Mir geht es ebenso ausschließlich darum, wie hier Hex in Dez umwandeln innerhalb einer Batchdatei, SAFER HASH-Regeln erstellen
Hex in Dez umwandeln innerhalb einer Batchdatei, SAFER HASH-Regeln erstellen

Gibt es eine einfache Variante die Produktschlüsseln für MS-Office aus der Registrierungsdatenbank, die dort in den "ProductID"-REG-BINARY-Werten im hexadezimalen Zahlensystem eingetragen sind, auszulesen (im Klartext umzuwandeln und in eine txt-Datei abzuspeichern)?
Dies befindet sich meist in einem oder unterschiedlichen Unterschlüssel unterhalb von
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Registration
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Registration
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Registration
usw.. Diese Schlüsselnamen bestehen aus einer ID der durchgeführten Installationen, was aber hier nicht so relevant sein muss vermutlich, da einfach alles unterhalb nach diesem "ProductID"-Wert leicht durchgesucht werden kann.
Mir geht wesentlich nur darum diese hexadezimalen Zahlen korrekt umzuwandeln, sodass dann bei der Installation die Eingabe des Lizenz-Schlüssels klappt.

(muss auf mehreren Rechner die Produkt-IDs manuell auslesen, um dann eine Neuinstallation vorzunehmen - sicherlich wird es zum Auslesen von Windows Lizenzschlüsseln nachdem gleichen Schema funktionieren, wenn der übergeordnete Registry-Schlüssel angepasst wird - dies würde mir dann nämlich ein Entfernen von Akkus und manuelles Ablesen ersparen)


PS. wie immer auf fremde Tools hab ich keine Lust, sonst wäre ich nicht hier bei ADMINISTRATOR face-wink
Und wie immer ist mir Batch bisher weiterhin am liebsten.


Gruß
evinben

Content-ID: 269724

Url: https://administrator.de/contentid/269724

Ausgedruckt am: 24.11.2024 um 12:11 Uhr

rubberman
Lösung rubberman 20.04.2015, aktualisiert am 26.04.2015 um 21:33:47 Uhr
Goto Top
Hallo evinben.

Das Thema hat überhaupt nichts mit Hex zu Dez zu tun. Der Produktkey ist kein Dezimalwert und der Algorithmus um aus dem Registrywert den Key zu berechnen ist ein vollkommen anderer.

... da einfach alles unterhalb nach diesem "ProductID"-Wert leicht durchgesucht werden kann.
1. Wenn's so einfach ist, warum brauchst du unsere Hilfe?
2. Der Key heißt sicher auch bei dir "DigitalProductID" und nicht nur "ProductID".

wie immer auf fremde Tools hab ich keine Lust
Wenn bei mir nicht gerade der Spieltrieb durchgekommen wäre, hätte ich dir was erzählt von wegen bereits erfundener runder Räder eckig neu erfinden.
@echo off &setlocal EnableDelayedExpansion
for %%i in (
  "" "\Wow6432Node"  
) do for /f "delims=" %%j in (  
  '2^>nul reg query "HKLM\SOFTWARE%%~i\Microsoft\Office"^|findstr /e "\\[0-9][0-9]*\.[0-9]"'  
) do for /f "delims=" %%k in (  
  '2^>nul reg query "%%j\Registration"^|findstr /e "\\{........-....-....-....-............}"'  
) do  for /f "tokens=3" %%l in (  
  '2^>nul reg query "%%k" /v "DigitalProductID"'  
) do (
  set "version=%%j"  
  call :GetProductKey %%l sProdKey
  echo ~~~
  echo Version:    !version:~-4!
  echo Produktkey: !sProdKey!
  echo ~~~
)

pause
exit /b


:GetProductKey inDigitalProdID outVarName
setlocal EnableDelayedExpansion
set "sKeyChar=BCDFGHJKMPQRTVWXY2346789"  
set "sHex=%~1"  

set /a "n = 52"  
for /l %%i in (104,2,132) do set /a "aRegValue_!n! = 0x!sHex:~%%i,2! , n += 1"  

for /l %%b in (24,-1,0) do (
  set /a "c = 0 , n = %%b %% 5"  
  for /l %%i in (66,-1,52) do set /a "c = (c << 8) + !aRegValue_%%i! , aRegValue_%%i = c / 24 , c %%= 24"  
  for %%j in (!c!) do set "sProductKey=!sKeyChar:~%%j,1!!sProductKey!"  
  if %%b neq 0 if !n!==0 set "sProductKey=-!sProductKey!"  
)
endlocal &set "%~2=%sProductKey%" &exit /b  
Grüße
rubberman

Edit: Für 64Bit Systeme erweitert.
evinben
evinben 26.04.2015 um 21:33:25 Uhr
Goto Top
Hallo rubberman@,

noch am gleichen Abend habe ich dir geantwortet gehabt, aber meine Nachricht ging leider in Nirwana (aus mir unerklärlichen Gründen unvollständig bei Administratoren gelandet).

1. Wenn's so einfach ist, warum brauchst du unsere Hilfe?
hier habe ich mich lediglich auf das einfache Suchen gleichnamiger Werte und Auslesen deren Daten unterhalb eines Schlüssels mit 'REG QUERY' bezogen. Wie der Titel schon lautet, ging es mir primär um das Umwandeln, worüber ich dir sehr dankbar für die sofortige Hilfe bin! Hier wäre zeitlich der Schluss bei mir (bräuchte ich sicherlich Monate hierfür).
Sorry, wenn es oben meinerseits zu angeberisch rüberkam, so wollte ich es natürlich nicht.

2. Der Key heißt sicher auch bei dir "DigitalProductID" und nicht nur "ProductID".
ja, da hast du natürlich vollkommen Recht. Wiedermal hat sich einfach ein klassischer "Copy&Passt"-Fehler eingeschlichen (nicht alles vom Anfang kopier gehabt).

Wenn bei mir nicht gerade der Spieltrieb durchgekommen wäre, hätte ich dir was erzählt von wegen bereits erfundener runder Räder eckig neu erfinden.
bin ich wirklich so schlimm?
Mir geht es wie immer darum, dass ich e verstehe und im Batch bin ich einfach erstmals besser aufgehoben. Weil ich so dies und jenes an das jeweilige Projekt gewissermaßen gerade so noch selbstständig anpassen kann, ohne viel nachfragen zu müssen. Außerdem bei fertig servierten Lösungen gibt es kaum was zu lernen.
Nicht vergessen, dass ich mir das "bescheidene Programmiren" erst seit drei - vier Jahren von bastla@ aber auch von dir und andere Helfer hier im Forum nebenbei beigebracht habe (bin eigentlich vom völlig anderen Beruf her, aber gut).

Diese Lösung hier fand ich zwar auch raffiniert:
Den Office Lizenzschlüssel aus der Registry auslesen
http://blog.bigbasti.com/den-office-lizenzschlussel-aus-der-registry-au ...
kenne ich mich aber im VB.NET nicht aus, selbst wenn es VBS (Visual Basic Script) ähnlich ist. Der Hauptgrund zur Distanzierung war eigentlich, dass das Script in .exe kompiliert ist.
Ja gut, mit Bemühung hätte ich es eventuell irgendwann in VBS hinkriegen können - bin ich ja bereit zu lernen, aber wie immer die Zeit…
So wie es aussieht, bleibe ich voraussichtlich lieber bei Batch und notfalls etwas bei VBS.

Für 64Bit Systeme erweitert.
ja, das war das erste Problem. Hierfür habe ich einfach den Abschnitt von der Zeile 2 bis 17 kopiert, nach der 18. Zeile eingefügt und dort in der entsprechenden Zeile auf "HKLM\SOFTWARE\Wow6432Node\Microsoft\Office" umgeändert.

Leider war das Projekt nicht erfolgreich. Das MS Office Packet wurde inkl. sämtlicher Updates zwar erfolgreich installiert, aber leider wurde keiner von den ausgelesenen Lizenz-Schlüsseln akzipiert. Es kam jeweils die Fehlermeldung, dass der Schlüsse nicht korrekt sei. Meine Vermutung ist, dass MS Office Installationen (im Falle 2007 Professional) sich generell nicht wie Windows-Installationen Key-Neutral verhalten (also dass da leider eher bestimmte Installationsdateien an bestimmten Produkt-Schlüsseln gebunden sind, bin mir aber nicht ganz sicher).

Gruß
evinben
rubberman
rubberman 26.04.2015 um 22:50:08 Uhr
Goto Top
Hallo evinben.

Mir geht es wie immer darum, dass ich e verstehe und im Batch bin ich einfach erstmals besser aufgehoben.
Das ist einleuchtend. Allerdings glaube ich nicht, dass du per copy/paste des Codes den Decryption-Algorithmus verstanden hast.

(bin eigentlich vom völlig anderen Beruf her, aber gut)
Willkommen im Club.

Diese Lösung hier fand ich zwar auch raffiniert
Die macht exakt das gleiche. Eigentlich ist es in VB wesentlich einfacher als in Batch. Der Kollege dort hat es etwas umständlich umgesetzt.

Es kam jeweils die Fehlermeldung, dass der Schlüsse nicht korrekt sei.
Bin auch auf Win7 unterwegs, allerdings noch mit dem alten Office 11.0 (2003). Dort ist der Schlüssel korrekt, habe ihn verglichen. Ich weiß nicht ob MS mittlerweile daran gedreht hat.
An deiner Stelle hätte ich mal mit einem aktuellen Keyfinder getestet. Andere Leute haben sich da sicher bereits Gedanken gemacht, bevor sie eine Software veröffentlichen. Wie schon geschrieben - das Rad neu erfinden zu wollen, ist nicht unbedingt die beste Vorgehensweise...

Grüße
rubberman
evinben
evinben 27.04.2015 aktualisiert um 09:05:43 Uhr
Goto Top
Hallo rubberman@

Allerdings glaube ich nicht, dass du per copy/paste des Codes den Decryption-Algorithmus verstanden hast.
Nein, dies hat aber mit dem anderen nichts zu tun. Eine Script-Sprache bevorzuge ich nicht, um alles im Code auseinander zu setzen, sondern weil ich mir den Code (auch wenn ich die Funktion einer Prozedur gar nichts verstehe) anpassen kann.

Den Algorithmus in der Unterprozedur :GetProductKey inDigitalProdID outVarName habe ich auf den ersten Blick gar nicht verstanden (mir nur dabei gedacht Respekt rubberman@). Würde ich mir Zeit nehmen, werde ich es hoffentlich mit Nachschlagen und paar Fragen sicherlich auch verstehen, selbst wenn es dauern wird. Wie immer alles Frage der Zeit. Soweit bin ich aber gar nicht gekommen. Du hast mir die Lösung fertig serviert gehabt und diese Motivation ist natürlich nicht mehr da.

Willkommen im Club.
ich fühle mich hier ganz wohl.

Eigentlich ist es in VB wesentlich einfacher als in Batch.
dies kann ich mir nur schwer vorstellen...


...allerdings noch mit dem alten Office 11.0 (2003). Dort ist der Schlüssel korrekt, habe ihn verglichen. Ich weiß nicht ob MS mittlerweile daran gedreht hat.
Ich glaube du hast mich falsch verstanden: ich bezog mich nicht auf den Algorithmus. Das funktioniert doch zweifelsfrei einwandfrei ! Alle Schlüssel werden überall fehlerfrei ausgelesen und korrekt umgewandelt. Darum geht es nicht. Was ich oben lediglich angesprochen habe wäre eventuell die Tatsache, dass MS Office Installationsdatenträger eventuell nicht Key-Neutral sind.
Beispiel:
Ich habe meinen damals gekauften MS Office 2007 Professional SP1 32-Bit zur Installation auf allen Rechnern zur Arbeit mitgenommen, wo ebenso auf allen betroffenen Rechnern MS Office 2007 Professional vorhanden ist aber der Installationsdatenträger fehlt.
Mein Lizenz-Schlüssel (also natürlich auf meinem Rechner) wird in der Registrierungsdatenbank korrekt ausgelesen und auf der Arbeit auf den anderen Rechnern muss es sicherlich genauso korrekt funktionieren. Allerdings wurden die ausgelesenen Keys nicht von meiner Office Installation akzeptiert. Ich vermute sehr, dass die Keys an Datenträger gebunden sind. Das sind günstige Notebooks, die lediglich um die 350€/Stück gekostet haben, weswegen ich vermute, dass da wieder irgendwelche OEM-Tricks eingesetzt wurden, mit denen ein günstiger Kauf einfach benachteiligt wird.

An deiner Stelle hätte ich mal mit einem aktuellen Keyfinder getestet.
kann mir kaum vorstellen, weil wie gesagt mit dem obigen Algorithmus mein Product-Key korrekt ermittelt wird, aber wenn du sagt, werde ich es versuchen ...

Gruß
evinben
rubberman
rubberman 27.04.2015 um 18:18:55 Uhr
Goto Top
Hallo evinben.

Willkommen im Club.
ich fühle mich hier ganz wohl.
Hehe, ich meinte damit eigentlich, dass ich auch absolut nicht vom Fach bin. Wie mein Nickname und mein Avatar evtl. erkennen lassen, könnte ich weitaus mehr zum Thema hochpolymere Werkstoffe und deren Verarbeitung erklären, als ich das zu irgendwelchen IT Themen je könnte face-wink

Eigentlich ist es in VB wesentlich einfacher als in Batch.
dies kann ich mir nur schwer vorstellen...
Ist aber so. Batch kennt keinen Array-Typ, was die Sache wirklich nicht einfacher macht. Der Umweg über Strings und ein assoziatives Array ist eigentlich Humbug, für Batch ist mir aber nichts besseres eingefallen.

ich bezog mich nicht auf den Algorithmus. Das funktioniert doch zweifelsfrei einwandfrei !
Was zu beweisen wäre. Wenn der Key bei anderen Windows- oder Office-Versionen anders oder woanders abgelegt ist, mag der Algorithmus zwar immer noch funktionieren, liefert aber nicht das gewünschte Ergebnis.

Grüße
rubberman
evinben
evinben 27.04.2015 um 18:49:38 Uhr
Goto Top
Hehe, ich meinte damit eigentlich, dass ich auch absolut nicht vom Fach bin. Wie mein Nickname und mein Avatar evtl. erkennen lassen, könnte ich weitaus mehr zum Thema hochpolymere Werkstoffe und deren Verarbeitung erklären, als ich das zu irgendwelchen IT Themen je könnte 

neeee, das glaube ich nicht face-wink !
vom Fach bist du schon