312 lines
11 KiB
Batchfile
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 |