Files
2023-09-07 08:41:01 +02:00

312 lines
11 KiB
Batchfile

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