cls @echo off setlocal enabledelayedexpansion echo. echo ************************************** echo *** Willkommen beim c't-Keyfinder *** echo *** *** echo *** Anleitungen, Downloads, Forum: *** echo *** https://ct.de/keyfinder *** echo ************************************** echo. rem --------- Variablen setzen, es gibt nichts anzupassen ----------- Set workdir=%~d0%~p0Sources\ Set Datei=%~d0%~p0ctKey.txt Set tmpdir=%workdir%Keyfindertmp Set Generic=%tmpdir%\generic.txt Set vbs=%workdir%\DecodeKey.vbs Set checkpid=%workdir%\Check-Pid.ps1 Set Admin=1 Set PE=0 Set SRP=0 rem ----------- Aufraeumen, falls Skript beim letzten Mal nicht bis zum Ende durchlief ----------- if exist %tmpdir% ( For %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%tmpdir%\%%a:\Software" ( reg unload HKLM\_Laufwerk_%%aSoftware >nul 2>nul reg unload HKLM\_Laufwerk_%%aSystem >nul 2>nul ) if exist %generic% del %generic% ) rem ----------- 32/64-Bit-Zuordnungen ----------- Set Strings=%workdir%Strings64.exe Set BIOS=%tmpdir%\ctBiosKey64.exe if "%ProgramW6432%" EQU "" set Strings=%workdir%Strings.exe && Set BIOS=%tmpdir%\ctBiosKey32.exe if not exist %Strings% echo Fehler: %Strings% fehlt. && echo. && pause && goto :eof rem ----------- Laeuft das Skript unter PE? ----------- if exist %windir%\system32\wpeinit.exe set PE=1 rem ----------- Admin-Rechte vorhanden? ----------- if "%PE%" NEQ "1" %windir%\system32\whoami.exe /groups | %windir%\system32\find.exe "S-1-16-12288" > nul if errorlevel 1 set Admin=0 rem --------- Software Restriction Policies aktiv? ----------- If "%PE%" EQU "0" For /f %%a in ('powershell $ExecutionContext.SessionState.LanguageMode') do if "%%a" EQU "ConstrainedLanguage" set SRP=1 rem ------ Fuer Auswertung der PID-Datenbank sind Adminrechte erforderlich -------- if "%PE%" EQU "0" if "%SRP%" EQU "1" ( echo ############################################### echo ### Achtung^^! ### echo ### Die PowerShell laeuft im Modus ### echo ### "ConstrainedLanguage". Das ist normal, ### echo ### wenn Software Restriction Policies as ### echo ### aktiv sind. Auswertung der Infos ### echo ### aus der PID-Datenbank sind in diesem ### echo ### Modus allerdings nicht moeglich. ### echo ### ### echo ### Taste druecken, um Skript trotzdem ### echo ### fortzusetzen. Oder Fenster ### echo ### schliessen und Skript via Kontextmenue ### echo ### "als Administrator" erneut starten. ### echo ############################################### echo. pause ) rem ------ Fuer Auswertung von Parallelinstallationen sind ebenfalls Adminrechte erforderlich -------- if "%PE%" EQU "0" if "%Admin%" EQU "0" ( For %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%a:\windows" ( if "%%a:" NEQ "%systemdrive%" ( echo. echo ############################################### echo ### Achtung^^! ### echo ### Parallelinstallation auf %%a: gefunden. ### echo ### Schluesselsuche darin erfordert Admin- ### echo ### rechte, Skript laeuft aber gerade ohne. ### echo ### ### echo ### Taste druecken, um Skript ohne Admin- ### echo ### rechte fortzusetzen. Oder Fenster ### echo ### schliessen und Skript via Kontextmenue ### echo ### "als Administrator" erneut starten. ### echo ############################################### echo. pause ) ) ) rem ------ Unter PE ist keine Auswertung der PID-Datenbank moeglich -------- if "%PE%" EQU "1" ( echo ############################################### echo ### Hinweis: Skript laeuft unter Windows PE.### echo ### ### echo ### Auswertung der Informationen aus der ### echo ### PID-Datenbank daher nicht moeglich. ### echo ### Taste druecken zum Fortsetzen. ### echo ############################################### echo. pause ) rem ------ Unter Windows 7 kein Auslesen des BIOS-Schluessels -------- if "%PE%" EQU "0" ( for /f "tokens=3 delims=.]" %%z in ('ver') do ( set build=%%z if !Build! LSS 9200 ( echo . echo ############################################### echo ### Hinweis: Skript laeuft unter Windows 7 ### echo ### oder aelter. Es findet hier zwar die ### echo ### Schluessel in der Registry, aber die ### echo ### Suche im BIOS ist hier nicht moeglich. ### echo ### ### echo ### Um auch im BIOS zu suchen, starten Sie ### echo ### den c't-KeyFinder unter ### echo ### Windows 8, 8.1, 10, 11 oder unter dem ### echo ### c't-Notfall-Windows oder unter ### echo ### Windows PE. ### echo ### ### echo ### Taste druecken zum Fortsetzen. ### echo ############################################### pause ) ) ) rem ------ Unter PE ctBiosKey.exe entpacken -------- if "%PE%" EQU "1" ( if not exist %workdir%ctbioskey.7z echo Fehler: %workdir%ctbioskey.7z fehlt. && echo. && pause set decrypt=%workdir%7z-64\7z.exe if "%ProgramW6432%" EQU "" set decrypt=%workdir%7z-32\7z.exe !decrypt! e -pctkeyfinder -o%tmpdir% %workdir%ctbioskey.7z >nul 2>nul ) rem ----------- los gehts ----------- md %tmpdir% >nul 2>nul echo ### %COMPUTERNAME% ### %date% ### %time% >> %datei% ### echo. echo Suche in Systemdateien nach nicht-aktivierbaren Schluesseln... echo. For %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%a:\windows" ( echo Durchforste Laufwerk %%a: ... For %%d in ("%%a:\windows\System32\LicensingWinRT.dll" "%%a:\windows\System32\clipwinrt.dll" "%%a:\windows\System32\ClipUp.exe" "%%a:\windows\System32\pkeyhelper.dll" "%%a:\windows\System32\reseteng.dll" "%%a:\windows\System32\Dism\TransmogProvider.dll" "%%a:\windows\System32\oobe\winsetup.dll" "%%a:\windows\System32\Secinit.exe") do ( if exist %%d echo Auswertung: %%d For /F %%g in ('%strings% -n 29 %%d -accepteula -nobanner 2^>nul') do ( set Genkey=%%g if "!GenKey:~5,1!" EQU "-" if "!GenKey:~11,1!" EQU "-" if "!GenKey:~17,1!" EQU "-" if "!GenKey:~23,1!" EQU "-" echo %%g >> %generic% ) if "%%a:" NEQ "%systemdrive%" ( copy %%a:\windows\system32\Config\software %tmpdir%\%%aSoftware >nul 2>nul reg load HKLM\_Laufwerk_%%a_Software %tmpdir%\%%aSoftware >nul 2>nul copy %%a:\windows\system32\Config\system %tmpdir%\%%aSystem >nul 2>nul reg load HKLM\_Laufwerk_%%a_System %tmpdir%\%%aSystem >nul 2>nul ) ) echo. ) if "%PE%" EQU "0" if !Build! LSS 9200 ( echo. >> %datei% echo Suchlauf unter Windows 7 oder aelter. >> %datei% echo Damit ist das Auslesen des BIOS-Schluessels nicht moeglich. >> %datei% echo. >> %datei% goto reg ) echo. echo Suche Schluessel in ACPI-Tabelle MSDM der Mainboard-Firmware ... echo. if "%PE%" EQU "1" for /f "tokens=* delims=" %%k in ('%BIOS%') do set prodkey=%%k if "%PE%" EQU "0" for /f "tokens=*" %%k in ('wmic path softwarelicensingservice get OA3xOriginalProductKey 2^>nul') do ( set tmpKey=%%k if "!tmpKey:~5,1!" EQU "-" if "!tmpKey:~11,1!" EQU "-" if "!tmpKey:~17,1!" EQU "-" if "!tmpKey:~23,1!" EQU "-" set prodkey=%%k ) ) if "%prodkey%" EQU "" set prodkey=Kein Product Key gefunden. echo. >> %datei% echo BIOS-Schluessel >> %datei% echo ### %prodkey% ### >> %datei% echo %prodkey% if "%prodkey%" NEQ "Kein Product Key gefunden." ( if "%PE%" EQU "0" if "%SRP%" EQU "0" ( for /f "delims=;" %%n in ('powershell -NoLogo -NoProfile -NonInteractive -EP Bypass -File %checkpid% ^"%prodkey%^" -SimpleOutput') do ( if "%%n" NEQ "Produkt unbekannt" echo Laut PID-Datenbank: %%n >> %datei% ) ) ) :reg echo. echo Suche Schluessel in der Registry ... echo. for /f "delims=" %%d in ('reg query HKLM /s /v "DigitalProductId"') do ( set Treffer=%%d if "!Treffer:~0,4!" EQU "HKEY" ( echo Schluessel gefunden in %%d echo. for /f "tokens=* delims=" %%k in ('cscript.exe /nologo %vbs% "!Treffer!\DigitalProductId"') do set prodkey=%%k echo. >> %datei% echo. >> %datei% echo ### !prodkey! ### >> %datei% if "%PE%" EQU "0" if "%SRP%" EQU "0" ( for /f "delims=;" %%n in ('powershell -NoLogo -NoProfile -NonInteractive -EP Bypass -File %checkpid% ^"^!prodkey^!^" -SimpleOutput') do ( if "%%n" NEQ "Produkt unbekannt" echo Laut PID-Datenbank: %%n >> %datei% ) ) for /f "tokens=3*" %%i in ('reg query "!Treffer!" /v ProductName 2^>nul ^| %windir%\system32\find.exe "ProductName"') do if "%%i" neq "" for /f "tokens=3*" %%i in ('reg query ^"!Treffer!^" /v ProductName 2^>nul ^| %windir%\system32\find.exe "REG_SZ"') do echo Laut Registry: %%i %%j >> %datei% for /f "tokens=3*" %%m in ('reg query "!Treffer!" /v CurrentBuild 2^>nul ^| %windir%\system32\find.exe "CurrentBuild"') do if "%%m" neq "" for /f "tokens=3*" %%m in ('reg query ^"!Treffer!^" /v CurrentBuild 2^>nul ^| %windir%\system32\find.exe "REG_SZ"') do echo Laut Registry: Build %%m %%n >> %datei% echo Fundort: !Treffer! >> %datei% if not exist %generic% echo ### Bewertung: Keine Aussage zur Aktivierbarkeit moeglich. ### >> %datei% set gen=0 if exist %generic% For /F %%t in (%generic%) do if %%t EQU !prodkey! set gen=1 if !gen! EQU 1 ( echo Bewertung: Nicht aktivierbarer Schluessel >> %datei% ) else ( if exist %generic% ( echo Bewertung: >> %datei% echo ###################################################################### >> %datei% echo ######### Schluessel ist eventuell aktivierbar. AUSPROBIEREN^^! ######## >> %datei% echo ###################################################################### >> %datei% ) ) ) ) echo. >> %datei% if "%PE%" EQU "1" ( echo Achtung^^! Durchlauf unter PE. >> %datei% echo Auswertung der Informationen aus der >> %datei% echo PID-Datenbank war daher nicht moeglich. >> %datei% echo. >> %datei% ) If not exist %generic% ( echo Achtung^^! KeyFinder hat in diesem Durchlauf >> %datei% echo keine Schluessel in Systemdateien gefunden. >> %datei% echo Einordnung der Schluessel dadurch nicht moeglich. >> %datei% echo. >> %datei% ) For %%A in (%generic%) do ( set Gensize=%%~zA if !Gensize! LEQ 10000 ( echo Achtung^^! KeyFinder hat in diesem Durchlauf >> %datei% echo nur sehr wenige Infos ueber nicht aktivierbare >> %datei% echo Schluessel in Systemdateien gefunden. >> %datei% echo Einschaetzung der Schluessel dadurch eingeschraenkt. >> %datei% echo. >> %datei% ) ) echo. >> %datei% echo. >> %datei% echo. >> %datei% For %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%a:\windows" ( if "%%a:" NEQ "%systemdrive%" ( reg unload HKLM\_Laufwerk_%%a_Software >nul 2>nul reg unload HKLM\_Laufwerk_%%a_System >nul 2>nul ) ) if exist %tmpdir% rd /q /s %tmpdir% start notepad %datei% goto :eof REM Erstellt 2022 von Axel Vahldiek/c't (axv) REM mailto: axv@ct.de REM Urheber der VBS-Routine leider unbekannt. Sachdienliche Hinweise bitte an axv, danke. REM Version 1.44