summaryrefslogtreecommitdiff
path: root/MAS/Separate-Files-Version/HWID-KMS38_Activation/HWID_Activation.cmd
diff options
context:
space:
mode:
authorDESKTOP-AJSJJMA\Admin2022-11-07 20:33:01 +0000
committerDESKTOP-AJSJJMA\Admin2022-11-07 20:33:01 +0000
commitbc8ae03488691ce45752774cc4350a5e6e11cd33 (patch)
tree36a3090e4ee09ae86ededf0d18d448734a1a80bf /MAS/Separate-Files-Version/HWID-KMS38_Activation/HWID_Activation.cmd
parentd17d7496e0f8c0fc80b97f42cfd4bb4e1008a8a5 (diff)
downloadMicrosoft-Activation-Scripts-bc8ae03488691ce45752774cc4350a5e6e11cd33.zip
1.7
Diffstat (limited to 'MAS/Separate-Files-Version/HWID-KMS38_Activation/HWID_Activation.cmd')
-rw-r--r--MAS/Separate-Files-Version/HWID-KMS38_Activation/HWID_Activation.cmd1088
1 files changed, 341 insertions, 747 deletions
diff --git a/MAS/Separate-Files-Version/HWID-KMS38_Activation/HWID_Activation.cmd b/MAS/Separate-Files-Version/HWID-KMS38_Activation/HWID_Activation.cmd
index ee05bb0..37bf005 100644
--- a/MAS/Separate-Files-Version/HWID-KMS38_Activation/HWID_Activation.cmd
+++ b/MAS/Separate-Files-Version/HWID-KMS38_Activation/HWID_Activation.cmd
@@ -14,27 +14,13 @@
-:: To activate with Downlevel method (default), run the script with /a parameter or change 0 to 1 in below line
-set _acti=0
+:: To activate, run the script with "/HWID" parameter or change 0 to 1 in below line
+set _act=0
-:: To only generate GenuineTicket.xml with Downlevel method (default), run the script with /g parameter or change 0 to 1 in below line
-set _gent=0
+:: To disable changing edition if current edition doesn't support HWID activation, change the value to 1 from 0 or run the script with "/HWID-NoEditionChange" parameter
+set _NoEditionChange=0
-:: To enable LockBox method, run the script with /k parameter or change 0 to 1 in below line
-:: You need to use this option with either activation or ticket generation.
-:: Example,
-:: HWID_Activation.cmd /a /k
-:: HWID_Activation.cmd /g /k
-set _lock=0
-
-:: Note about Lockbox method: It's working method is not very clean. We don't suggest to run it on a production system.
-
-:: If value is changed in ABOVE lines or any ABOVE parameter is used then script will run in unattended mode
-:: Incase if more than one options are used then only one option will be applied
-
-
-:: To disable changing edition if current edition doesn't support HWID activation, change the value to 0 from 1 or run the script with /c parameter
-set _chan=1
+:: If value is changed in above lines or parameter is used then script will run in unattended mode
@@ -78,8 +64,7 @@ if not %errorlevel%==0 (
echo:
echo Error: This is not a correct file. It has LF line ending issue.
echo:
-echo Press any key to exit...
-pause >nul
+ping 127.0.0.1 -n 6 > nul
popd
exit /b
)
@@ -99,15 +84,13 @@ set _args=%*
if defined _args set _args=%_args:"=%
if defined _args (
for %%A in (%_args%) do (
-if /i "%%A"=="/a" set _acti=1
-if /i "%%A"=="/g" set _gent=1
-if /i "%%A"=="/k" set _lock=1
-if /i "%%A"=="/c" set _chan=0
-if /i "%%A"=="-el" set _elev=1
+if /i "%%A"=="/HWID" set _act=1
+if /i "%%A"=="/HWID-NoEditionChange" set _NoEditionChange=1
+if /i "%%A"=="-el" set _elev=1
)
)
-for %%A in (%_acti% %_gent% %_lock%) do (if "%%A"=="1" set _unattended=1)
+for %%A in (%_act% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=1)
::========================================================================================================================================
@@ -141,7 +124,7 @@ set "_Yellow="Black" "Yellow""
set "nceline=echo: &echo ==== ERROR ==== &echo:"
set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
-if %~z0 GEQ 500000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
+if %~z0 GEQ 200000 (set "_exitmsg=Go back") else (set "_exitmsg=Exit")
::========================================================================================================================================
@@ -152,6 +135,13 @@ echo Project is supported for Windows 10/11.
goto dk_done
)
+if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
+%eline%
+echo HWID Activation is not supported for Windows Server.
+echo Use KMS38 or KMS Activation.
+goto dk_done
+)
+
for %%# in (powershell.exe) do @if "%%~$PATH:#"=="" (
%nceline%
echo Unable to find powershell.exe in the system.
@@ -191,7 +181,7 @@ goto dk_done
:: Elevate script as admin and pass arguments and preventing loop
-%nul% reg query HKU\S-1-5-19 || (
+>nul fltmc || (
if not defined _elev %nul% %psc% "start cmd.exe -arg '/c \"!_PSarg:'=''!\"' -verb runas" && exit /b
%eline%
echo This script require administrator privileges.
@@ -201,110 +191,32 @@ goto dk_done
::========================================================================================================================================
-:dl_menu
-
-:: Lockbox method is not shown in menu because it's working method is not very clean. We don't suggest to run it on a production system.
-:: Will enable it back when we have a better method for it. Till then, if you want to use Lockbox, you can use parameters, check at the top.
-
-REM if %_unattended%==0 (
-REM cls
-REM mode 76, 25
-REM title HWID Activation
-
-REM echo:
-REM echo:
-REM echo:
-REM echo:
-REM echo ____________________________________________________________
-REM echo:
-REM if !_lock!==0 (
-REM echo [1] HWID Activation
-REM ) else (
-REM call :dk_color2 %_White% " [1] HWID Activation " %_Yellow% " [LockBox Method]"
-REM )
-REM echo ____________________________________________
-REM echo:
-REM if !_lock!==0 (
-REM echo [G] Generate Ticket
-REM ) else (
-REM call :dk_color2 %_White% " [G] Generate Ticket " %_Yellow% " [LockBox Method]"
-REM )
-REM echo ____________________________________________
-REM echo:
-REM echo [C] Change Method
-REM echo:
-REM echo [0] %_exitmsg%
-REM echo ____________________________________________________________
-REM echo:
-REM call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard:"
-REM choice /C:1GC0 /N
-REM set _el=!errorlevel!
-REM if !_el!==4 exit /b
-REM if !_el!==3 (
-REM if !_lock!==0 (
-REM set _lock=1
-REM ) else (
-REM set _lock=0
-REM )
-REM cls
-REM echo:
-REM call :dk_color %_Green% " Downlevel Method:"
-REM echo It creates downlevelGTkey ticket for activation with simplest process.
-REM echo:
-REM call :dk_color %_Yellow% " LockBox Method:"
-REM echo It creates clientLockboxKey ticket which better mimics genuine activation,
-REM echo But requires more steps such as,
-REM echo - Cleaning ClipSVC licences
-REM echo - Deleting a volatile and protected registry key by taking ownership
-REM echo - System may need a restart for succesful activation
-REM echo - Microsoft Account and Store Apps may need relogin-restart in the system
-REM echo:
-REM call :dk_color2 %_White% " " %Green% "Note:"
-REM echo Microsoft accepts both types of tickets and that's unlikely to change.
-REM call :dk_color2 %_White% " " %Green% "On a production system we suggest to use Downlevel [default] Method only."
-REM echo:
-REM call :dk_color %_Yellow% " Press any key to go back..."
-REM pause >nul
-REM goto :dl_menu
-REM )
-REM if !_el!==2 set _gent=1&goto :dl_menu2
-REM if !_el!==1 goto :dl_menu2
-REM goto :dl_menu
-REM )
-
-:dl_menu2
-
cls
-mode 102, 34
-if %_gent%==1 (set _title=title Generate HWID GenuineTicket.xml) else (set _title=title HWID Activation)
-if %_lock%==0 (%_title%) else (%_title% [Lockbox Method])
+mode 102, 33
+title HWID Activation
-::========================================================================================================================================
+echo:
+echo Initializing...
+call :dk_product
+call :dk_ckeckwmic
-if %_gent%==1 if exist %Systemdrive%\GenuineTicket.xml (
-set _gent=0
-%eline%
-echo File '%Systemdrive%\GenuineTicket.xml' already exist.
-if %_unattended%==0 (
+:: Show info for potential script stuck scenario
+
+sc start sppsvc %nul%
+if %errorlevel% NEQ 1056 if %errorlevel% NEQ 0 (
+echo:
+echo Error code: %errorlevel%
+call :dk_color %Red% "Failed to start [sppsvc] service, rest of the process may take a long time..."
echo:
-call :dk_color %_Yellow% "Press any key to go back..."
-pause >nul
-goto dl_menu
-) else (
-goto dk_done
-)
)
::========================================================================================================================================
-call :dk_initial
-
:: Check if system is permanently activated or not
-cls
-call :dk_product
call :dk_checkperm
-if defined _perm if not %_gent%==1 (
+if defined _perm (
+cls
echo ___________________________________________________________________________________________
echo:
call :dk_color2 %_White% " " %Green% "Checking: %winos% is Permanently Activated."
@@ -312,7 +224,7 @@ call :dk_color2 %_White% " " %Gray% "Activation is not required."
echo ___________________________________________________________________________________________
if %_unattended%==1 goto dk_done
echo:
-choice /C:12 /N /M "> [1] Activate [2] %_exitmsg% : "
+choice /C:10 /N /M "> [1] Activate [0] %_exitmsg% : "
if errorlevel 2 exit /b
)
cls
@@ -321,26 +233,13 @@ cls
:: Check Evaluation version
-set _eval=
-set _evalserv=
-
-if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" set _eval=1
-if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalEdition~*.mum" set _evalserv=1
-if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*EvalCorEdition~*.mum" set _eval=1 & set _evalserv=1
-
-if defined _eval (
+if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID 2>nul | find /i "Eval" 1>nul && (
%eline%
echo [%winos% ^| %winbuild%]
-if defined _evalserv (
-echo Server Evaluation cannot be activated. Convert it to full Server OS.
-echo:
-echo Check 'Change Edition Option' in Extras section in MAS.
-) else (
echo Evaluation Editions cannot be activated. Download ^& Install full version of Windows OS.
echo:
echo https://massgrave.dev/
-)
goto dk_done
)
)
@@ -368,84 +267,7 @@ goto dk_done
::========================================================================================================================================
-:: Check if HWID key (Retail,OEM,MAK) is already installed or not
-
-set _hwidk=
-call :dk_channel
-for %%A in (Retail OEM:SLP OEM:NONSLP OEM:DM Volume:MAK) do (if /i "%%A"=="%_channel%" set _hwidk=1)
-
-::========================================================================================================================================
-
-:: Detect Key
-
-set app=
-set key=
-set pkey=
-set altkey=
-set changekey=
-set curedition=
-set altedition=
-set notworking=
-
-if defined applist call :hwiddata attempt1
-if not defined key call :hwiddata attempt2
-if defined notworking call :hwidfallback
-
-if defined altkey (set key=%altkey%&set changekey=1&set notworking=)
-
-set pkey=
-if not defined key call :dk_hwidkey %nul%
-
-::========================================================================================================================================
-
-if not defined key if not defined _hwidk (
-%eline%
-%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || (
-echo PowerShell is not responding properly. Aborting...
-goto dk_done
-)
-echo [%winos% ^| %winbuild% ^| SKU:%osSKU%]
-echo Unable to find this product in the supported product list.
-echo Make sure you are using updated version of the script.
-echo:
-if not "%regSKU%"=="%wmiSKU%" (
-echo Difference Found In SKU Value- WMI:%wmiSKU% Reg:%regSKU%
-echo Restart the system and try again.
-goto dk_done
-)
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:: Check files
-
-if not exist "!_work!\BIN\gatherosstate.exe" (
-%eline%
-echo 'gatherosstate.exe' file is missing in 'BIN' folder. Aborting...
-goto dk_done
-)
-
-:: Verify gatherosstate.exe file
-
-set _hash=
-for /f "skip=1 tokens=* delims=" %%# in ('certutil -hashfile "!_work!\BIN\gatherosstate.exe" SHA1^|findstr /i /v CertUtil') do set "_hash=%%#"
-set "_hash=%_hash: =%"
-
-if /i not "%_hash%"=="FABB5A0FC1E6A372219711152291339AF36ED0B5" (
-if /i not "%_hash%"=="3FCCB9C359EDB9527C9F5688683F8B3C5910E75D" (
-%eline%
-echo gatherosstate.exe SHA1 hash mismatch found.
-echo:
-echo Detected: %_hash%
-goto dk_done
-)
-)
-
-::========================================================================================================================================
-
set error=
-set activ=
:: Check Internet connection
@@ -455,18 +277,40 @@ for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Cont
echo Checking OS Info [%winos% ^| %winbuild% ^| %arch%]
set _intcon=
-if not %_gent%==1 (
for /f "delims=[] tokens=2" %%# in ('ping -n 1 licensing.mp.microsoft.com') do if not [%%#]==[] set _intcon=1
-if defined _intcon (
+
+%psc% "$t = New-Object Net.Sockets.TcpClient;try{$t.Connect("""licensing.mp.microsoft.com""", 443)}catch{};$t.Connected" | findstr /i true 1>nul
+if %errorlevel% EQU 0 (
echo Checking Internet Connection [Connected]
) else (
set error=1
-call :dk_color %Red% "Checking Internet Connection [Failed To Connect licensing.mp.microsoft.com]"
+if defined _intcon (
+call :dk_color %Red% "Checking Internet Connection [Internet Found But Cant Connect licensing.mp.microsoft.com]"
+call :dk_color %Magenta% "Make sure restricted Internet [Office/College] is not connected and URL is not blocked in the system"
+) else (
+call :dk_color %Red% "Checking Internet Connection [Not Connected]"
)
)
::========================================================================================================================================
+:: Check Windows Script Host
+
+set _WSH=1
+reg query "HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=0)
+reg query "HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _WSH=0)
+
+if %_WSH% EQU 0 (
+reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul%
+reg add "HKCU\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f %nul%
+if not "%arch%"=="x86" reg add "HKLM\Software\Microsoft\Windows Script Host\Settings" /v Enabled /t REG_DWORD /d 1 /f /reg:32 %nul%
+echo Enabling Windows Script Host [Successful]
+)
+
+::========================================================================================================================================
+
+echo Initiating Diagnostic Tests...
+
set "_serv=ClipSVC wlidsvc sppsvc LicenseManager Winmgmt wuauserv"
:: Client License Service (ClipSVC)
@@ -476,44 +320,45 @@ set "_serv=ClipSVC wlidsvc sppsvc LicenseManager Winmgmt wuauserv"
:: Windows Management Instrumentation
:: Windows Update
-:: Check disabled services
+call :dk_errorcheck
-set serv_ste=
-for %%# in (%_serv%) do (
-set serv_dis=
-reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start %nul% || set serv_dis=1
-for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b equ 0x4 set serv_dis=1
-if defined serv_dis (if defined serv_ste (set "serv_ste=!serv_ste! %%#") else (set "serv_ste=%%#"))
-)
+::========================================================================================================================================
-:: Change disabled services startup type to default
+:: Detect Key
-set serv_csts=
-set serv_cste=
+set key=
+set altkey=
+set changekey=
+set curedition=
+set altedition=
+set notworking=
+set actidnotfound=
-if defined serv_ste (
-for %%# in (%serv_ste%) do (
-if /i %%#==ClipSVC sc config %%# start= demand %nul%
-if /i %%#==wlidsvc sc config %%# start= demand %nul%
-if /i %%#==sppsvc sc config %%# start= delayed-auto %nul%
-if /i %%#==LicenseManager sc config %%# start= demand %nul%
-if /i %%#==Winmgmt sc config %%# start= auto %nul%
-if /i %%#==wuauserv sc config %%# start= demand %nul%
-if !errorlevel!==0 (
-if defined serv_csts (set "serv_csts=!serv_csts! %%#") else (set "serv_csts=%%#")
-) else (
-set error=1
-if defined serv_cste (set "serv_cste=!serv_cste! %%#") else (set "serv_cste=%%#")
-)
+for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch 2^>nul') do set "branch=%%b"
+
+if defined applist call :hwiddata key attempt1
+if not defined key call :hwiddata key attempt2
+
+if defined notworking call :hwidfallback
+if not defined key call :hwidfallback
+
+if defined altkey (set key=%altkey%&set changekey=1&set notworking=)
+
+if defined notworking if defined notfoundaltactID (
+call :dk_color %Red% "Checking Alternate Edition For HWID [%altedition% Activation ID Not Found]"
+if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
+call :dk_color %Magenta% "Evaluation Windows Found. Install Full version of Windows. https://massgrave.dev/"
)
)
-if defined serv_csts echo Enabling Disabled Services [Successful] [%serv_csts%]
-if defined serv_cste call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%]"
-
-if not "%regSKU%"=="%wmiSKU%" (
-set error=1
-call :dk_color %Red% "Checking WMI/REG SKU [Difference Found - WMI:%wmiSKU% Reg:%regSKU%] [Restart System]"
+if not defined key (
+%eline%
+echo [%winos% ^| %winbuild% ^| SKU:%osSKU%]
+echo Unable to find this product in the supported product list.
+echo Make sure you are using updated version of the script.
+echo https://massgrave.dev
+echo:
+goto dk_done
)
::========================================================================================================================================
@@ -526,205 +371,63 @@ call :dk_color %Magenta% "[%altedition%] Edition product key will be used to ena
echo:
)
-set _partial=
-if not defined key (
-if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path SoftwareLicensingProduct where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null" Get PartialProductKey /value 2^>nul') do set "_partial=%%#"
-if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT PartialProductKey FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL').Get()).PartialProductKey | %% {echo ('PartialProductKey='+$_)}" 2^>nul') do set "_partial=%%#"
-call echo Checking Installed Product Key [Partial Key - %%_partial%%] [%_channel%]
-)
-
-set _channel=
-set error_code=
-if defined key (
if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicensingService' call InstallProductKey ProductKey="%key%" %nul%
if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Version FROM SoftwareLicensingService').Get()).InstallProductKey('%key%')" %nul%
-if not !errorlevel!==0 cscript //nologo %windir%\system32\slmgr.vbs /ipk %key% %nul%
-set error_code=!errorlevel!
-cmd /c exit /b !error_code!
-if !error_code! NEQ 0 set "error_code=[0x!=ExitCode!]"
+if not %errorlevel%==0 cscript //nologo %windir%\system32\slmgr.vbs /ipk %key% %nul%
+set errorcode=%errorlevel%
+cmd /c exit /b %errorcode%
+if %errorcode% NEQ 0 set "errorcode=[0x%=ExitCode%]"
-if !error_code! EQU 0 (
+if %errorcode% EQU 0 (
call :dk_refresh
-call :dk_channel
-call echo Installing Generic Product Key [%key%] [%%_channel%%] [Successful]
-) else (
-call :dk_color %Red% "Installing Generic Product Key [%key%] [Failed] !error_code!"
-)
-)
-
-::========================================================================================================================================
-
-:: Files are copied to temp to generate ticket to avoid possible issues in case the path contains special character or non English names
-
-echo:
-set "temp_=%SystemRoot%\Temp\_Temp"
-if exist "%temp_%\.*" rmdir /s /q "%temp_%\" %nul%
-md "%temp_%\" %nul%
-
-pushd "!_work!\BIN\"
-copy /y /b "gatherosstate.exe" "%temp_%\gatherosstate.exe" %nul%
-popd
-
-if not exist "%temp_%\gatherosstate.exe" (
-call :dk_color %Red% "Copying Required Files to Temp [%temp_%] [Failed]"
-goto :dl_final
-) else (
-echo Copying Required Files to Temp [%temp_%] [Successful]
-)
-
-::========================================================================================================================================
-
-if /i "%_hash%"=="3FCCB9C359EDB9527C9F5688683F8B3C5910E75D" (
-echo Checking gatherosstate.exe [Already Modified]
-%nul% ren "%temp_%\gatherosstate.exe" "gatherosstatemodified.exe"
-goto :dlskipmod
-)
-
-:: Modify gatherosstate.exe
-
-pushd "%temp_%\"
-%nul% %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':hex\:.*';iex ($f[1]);"
-popd
-
-if not exist "%temp_%\gatherosstatemodified.exe" (
-call :dk_color %Red% "Creating Modified Gatherosstate [Failed] Aborting..."
-goto :dl_final
-)
-
-set _hash=
-for /f "skip=1 tokens=* delims=" %%# in ('certutil -hashfile "%temp_%\gatherosstatemodified.exe" SHA1^|findstr /i /v CertUtil') do set "_hash=%%#"
-set "_hash=%_hash: =%"
-
-if /i not "%_hash%"=="3FCCB9C359EDB9527C9F5688683F8B3C5910E75D" (
-call :dk_color %Red% "Creating Modified Gatherosstate [Failed] [Hash Not Matched] Aborting..."
-goto :dl_final
+echo Installing Generic Product Key [%key%] [Successful]
) else (
-echo Creating Modified Gatherosstate [Successful]
+set error=1
+call :dk_color %Red% "Installing Generic Product Key [%key%] [Failed] %errorcode%"
+if defined applist if defined actidnotfound call :dk_color %Red% "Activation ID not found for this key. Make sure you are using updated version of MAS."
)
-:dlskipmod
-
::========================================================================================================================================
-:: Clean ClipSVC Licences
-:: This code runs only if Lockbox method to generate ticket is manually set by the user in this script.
-
-if %_lock%==1 (
-for %%# in (ClipSVC) do (
-sc query %%# | find /i "STOPPED" %nul% || net stop %%# /y %nul%
-sc query %%# | find /i "STOPPED" %nul% || sc stop %%# %nul%
-)
-
-rundll32 clipc.dll,ClipCleanUpState
+:: Change Windows region to USA to avoid activation issues as Windows store license is not available in many countries
-if exist "%ProgramData%\Microsoft\Windows\ClipSVC\*.dat" del /f /q "%ProgramData%\Microsoft\Windows\ClipSVC\*.dat" %nul%
+for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Name 2^>nul') do set "name=%%b"
+for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Nation 2^>nul') do set "nation=%%b"
-if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" (
-call :dk_color %Red% "Cleaning ClipSVC Licences [Failed]"
+set regionchange=
+if not "%name%"=="US" (
+set regionchange=1
+%psc% Set-WinHomeLocation -GeoId 244
+if !errorlevel! EQU 0 (
+echo Changing Windows Region To USA [Successful]
) else (
-echo Cleaning ClipSVC Licences [Successful]
+call :dk_color %Red% "Changing Windows Region To USA [Failed]"
)
)
-::========================================================================================================================================
-
-:: Below registry key (Volatile & Protected) gets created after the ClipSVC License cleanup command, and gets automatically deleted after
-:: system restart. It needs to be deleted to activate the system without restart.
-
-:: This code runs only if Lockbox method to generate ticket is manually set by the user in this script.
-
-set "RegKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState"
-set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL"
-
-if %_lock%==1 (
-%nul% call :regown "%RegKey%"
-reg delete "%RegKey%" /f %nul%
-
-reg query "%RegKey%" %nul% && (
-call :dk_color %Red% "Deleting a Volatile Registry [Failed]"
-call :dk_color %Magenta% "Restart the system, that will delete this registry key automatically"
-) || (
-echo Deleting a Volatile Registry [Successful]
-)
-
-REM Clear HWID token related registry to fix activation incase if there is any corruption
-
-reg delete "%_ident%" /f %nul%
-reg query "%_ident%" %nul% && (
-call :dk_color %Red% "Deleting a Registry [Failed] [%_ident%]"
-) || (
-echo Deleting a Registry [Successful] [%_ident%]
-)
-)
-
-::========================================================================================================================================
+::==========================================================================================================================================
-:: Multiple attempts to generate the ticket because in some cases, one attempt is not enough.
+:: Generate GenuineTicket.xml and apply
+:: Most correct way to apply a ticket is by restarting ClipSVC service but we can not check the log details in this way
+:: To get the log details and also to correctly apply ticket, script will install tickets two times (service restart + clipup -v -o)
-echo:
-set "_noxml=if not exist "%temp_%\GenuineTicket.xml""
+set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket"
+if not exist "%tdir%\" md "%tdir%\" %nul%
-set pfn=
-for /f "skip=2 tokens=3*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn 2^>nul') do set "pfn=%%a"
+if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul%
+if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul%
-"%temp_%/gatherosstatemodified.exe" Pfn=%pfn%;DownlevelGenuineState=1
-%_noxml% timeout /t 3 %nul%
-%_noxml% net stop sppsvc /y %nul%
-%_noxml% call "%temp_%/gatherosstatemodified.exe" Pfn=%pfn%;DownlevelGenuineState=1
-%_noxml% timeout /t 3 %nul%
+call :hwiddata ticket
-:: Refresh ClipSVC (required after cleanup) with below command, not related to generating tickets
+copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul%
-if %_lock%==1 (
-for %%# in (wlidsvc LicenseManager sppsvc) do (net stop %%# /y %nul% & net start %%# /y %nul%)
-call :dk_refresh
-)
-
-%_noxml% (
-call :dk_color %Red% "Generating GenuineTicket.xml [Failed] [%pfn%]"
-goto :dl_final
-)
-
-if %_lock%==1 (
-find /i "clientLockboxKey" "%temp_%\GenuineTicket.xml" >nul && (
-echo Generating GenuineTicket.xml [Successful] [%pfn%]
-) || (
-call :dk_color %Red% "Generating GenuineTicket.xml [Failed] [%pfn%]"
-call :dk_color %Red% "downlevelGTkey Ticket created. Aborting..."
+if not exist "%tdir%\GenuineTicket.xml" (
+call :dk_color %Red% "Generating GenuineTicket.xml [Failed]"
+echo [%encoded%]
+if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul%
goto :dl_final
-)
-) else (
-echo Generating GenuineTicket.xml [Successful] [%pfn%]
-)
-
-::========================================================================================================================================
-
-:: Copy GenuineTicket.xml to the root of C drive and exit if ticket generation option was used in script
-
-if %_gent%==1 (
-echo:
-copy /y /b "%temp_%\GenuineTicket.xml" "%Systemdrive%\GenuineTicket.xml" %nul%
-if not exist "%Systemdrive%\GenuineTicket.xml" (
-call :dk_color %Red% "Copying GenuineTicket.xml to %Systemdrive%\ [Failed]"
) else (
-call :dk_color %Green% "Copying GenuineTicket.xml to %Systemdrive%\ [Successful]"
-)
-goto :dl_final
-)
-
-::========================================================================================================================================
-
-:: clipup -v -o -altto <path> & clipup -v -o both methods may fail if the username have spaces/special characters/non English names
-:: Most correct way to apply a ticket is by restarting ClipSVC service but we can not check the log details in this way
-:: To get the log details and also to correctly apply ticket, script will install tickets two times (service restart + clipup -v -o -altto <path>)
-
-set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket"
-if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul%
-if not exist "%tdir%\" md "%tdir%\" %nul%
-copy /y /b "%temp_%\GenuineTicket.xml" "%tdir%\GenuineTicket.xml" %nul%
-
-if not exist "%tdir%\GenuineTicket.xml" (
-call :dk_color %Red% "Copying Ticket to ClipSVC Location [Failed]"
+echo Generating GenuineTicket.xml [Successful]
)
set "_xmlexist=if exist "%tdir%\GenuineTicket.xml""
@@ -737,11 +440,13 @@ net start ClipSVC /y %nul%
%_xmlexist% (
if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul%
-call :dk_color %Red% "Installing GenuineTicket.xml [Failed With ClipSVC Service Restart Method]"
+call :dk_color %Red% "Installing GenuineTicket.xml [Failed With ClipSVC Service Restart, Wait...]"
)
)
-clipup -v -o -altto %temp_%\
+copy /y /b "%tdir%\GenuineTicket" "%tdir%\GenuineTicket.xml" %nul%
+clipup -v -o
+if exist "%tdir%\Genuine*" del /f /q "%tdir%\Genuine*" %nul%
::==========================================================================================================================================
@@ -754,35 +459,40 @@ echo:
call :dk_act
call :dk_checkperm
if defined _perm (
-set activ=1
call :dk_color %Green% "%winos% is permanently activated."
goto :dl_final
)
-:: Refresh some services and license status
-if %_lock%==1 set _retry=1
-if defined _intcon set _retry=1
+if not defined error (
+
+REM Clear store ID related registry to fix activation incase if there is any corruption
+
+set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL"
+reg delete "!_ident!" /f %nul%
+reg query "!_ident!" %nul% && (
+call :dk_color %Red% "Deleting a Registry [Failed] [!_ident!]"
+) || (
+echo Deleting a Registry [Successful] [!_ident!]
+)
+
+REM Refresh some services and license status
-if defined _retry (
for %%# in (wlidsvc LicenseManager sppsvc) do (net stop %%# /y %nul% & net start %%# /y %nul%)
call :dk_refresh
call :dk_act
-)
-
call :dk_checkperm
-
-set "_unsup=call :dk_color %Magenta% "At the time of writing this, HWID Activation was not supported for this product.""
+)
if defined _perm (
-set activ=1
call :dk_color %Green% "%winos% is permanently activated."
) else (
call :dk_color %Red% "Activation Failed %error_code%"
-if defined key if defined pkey %_unsup%
-if not defined key %_unsup%
-if defined notworking %_unsup%
-if not defined notworking if defined key if not defined pkey call :dk_color %Magenta% "Restart the system and try again / Check troubleshooting steps in MAS Extras option"
+if defined notworking (
+call :dk_color %Magenta% "At the time of writing this, HWID Activation was not supported for this product."
+) else (
+call :dk_color2 %Magenta% "Check this page for help" %_Yellow% " https://massgrave.dev/troubleshoot"
+)
)
::========================================================================================================================================
@@ -790,55 +500,22 @@ if not defined notworking if defined key if not defined pkey call :dk_color %Mag
:dl_final
echo:
-if exist "%temp_%\.*" rmdir /s /q "%temp_%\" %nul%
-if exist "%temp_%\" (
-call :dk_color %Red% "Cleaning Temp Files [Failed]"
+
+if defined regionchange (
+%psc% Set-WinHomeLocation -GeoId %nation%
+if !errorlevel! EQU 0 (
+echo Restoring Windows Region [Successful]
) else (
-echo Cleaning Temp Files [Successful]
+call :dk_color %Red% "Restoring Windows Region [Failed] [%name%-%nation%]"
)
-
-if %osSKU%==175 (
-call :dk_color %Red% "ServerRdsh Editon does not officially support activation on non-azure platforms."
)
-if not defined activ call :dk_checkerrors
-
-if not defined activ if not defined error (
-echo Basic Diagnostic Tests [Error Not Found]
-)
+if %osSKU%==175 call :dk_color %Red% "ServerRdsh Editon does not officially support activation on non-azure platforms."
goto :dk_done
::========================================================================================================================================
-:: A lean and mean snippet to set registry ownership and permission recursively
-:: Written by @AveYo aka @BAU
-:: pastebin.com/XTPt0JSC
-
-:: Modified by @abbodi1406 to make it work in ARM64 Windows 10 (builds older than 21277) where only x86 version of Powershell is installed.
-
-:: This code runs only if Lockbox method is manually set by the user in this script.
-
-:regown
-
-pushd "!_work!"
-setlocal DisableDelayedExpansion
-
-set "0=%~nx0"&%psc% $A='%~1','%~2','%~3','%~4','%~5','%~6';iex(([io.file]::ReadAllText($env:0)-split':Own1\:.*')[1])&popd&setlocal EnableDelayedExpansion&exit/b:Own1:
-$D1=[uri].module.gettype('System.Diagnostics.Process')."GetM`ethods"(42) |where {$_.Name -eq 'SetPrivilege'} #`:no-ev-warn
-'SeSecurityPrivilege','SeTakeOwnershipPrivilege','SeBackupPrivilege','SeRestorePrivilege'|foreach {$D1.Invoke($null, @("$_",2))}
-$path=$A[0]; $rk=$path-split'\\',2; switch -regex ($rk[0]){'[mM]'{$hv=2147483650};'[uU]'{$hv=2147483649};default{$hv=2147483648};}
-$HK=[Microsoft.Win32.RegistryKey]::OpenBaseKey($hv, 256); $s=$A[1]; $sps=[Security.Principal.SecurityIdentifier]
-$u=($A[2],'S-1-5-32-544')[!$A[2]];$o=($A[3],$u)[!$A[3]];$w=$u,$o |% {new-object $sps($_)}; $old=!$A[3];$own=!$old; $y=$s-eq'all'
-$rar=new-object Security.AccessControl.RegistryAccessRule( $w[0], ($A[5],'FullControl')[!$A[5]], 1, 0, ($A[4],'Allow')[!$A[4]] )
-$x=$s-eq'none';function Own1($k){$t=$HK.OpenSubKey($k,2,'TakeOwnership');if($t){0,4|%{try{$o=$t.GetAccessControl($_)}catch{$old=0}
-};if($old){$own=1;$w[1]=$o.GetOwner($sps)};$o.SetOwner($w[0]);$t.SetAccessControl($o); $c=$HK.OpenSubKey($k,2,'ChangePermissions')
-$p=$c.GetAccessControl(2);if($y){$p.SetAccessRuleProtection(1,1)};$p.ResetAccessRule($rar);if($x){$p.RemoveAccessRuleAll($rar)}
-$c.SetAccessControl($p);if($own){$o.SetOwner($w[1]);$t.SetAccessControl($o)};if($s){$($subkeys=$HK.OpenSubKey($k).GetSubKeyNames()) 2>$null;
-foreach($n in $subkeys){Own1 "$k\$n"}}}};Own1 $rk[1];if($env:VO){get-acl Registry::$path|fl} #:Own1: lean & mean snippet by AveYo
-
-::========================================================================================================================================
-
:: Get Windows permanent activation status
:dk_checkperm
@@ -855,14 +532,6 @@ if %_wmic% EQU 1 wmic path SoftwareLicensingService where __CLASS='SoftwareLicen
if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'SoftwareLicensingService').GetInstances()).RefreshLicenseStatus()" %nul%
exit /b
-:: Get Windows installed key channel
-
-:dk_channel
-
-if %_wmic% EQU 1 for /f "tokens=2 delims==" %%# in ('wmic path SoftwareLicensingProduct where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' and PartialProductKey<>null" Get ProductKeyChannel /value 2^>nul') do set "_channel=%%#"
-if %_wmic% EQU 0 for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT ProductKeyChannel FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL').Get()).ProductKeyChannel | %% {echo ('ProductKeyChannel='+$_)}" 2^>nul') do set "_channel=%%#"
-exit /b
-
:: Activation command
:dk_act
@@ -912,97 +581,54 @@ wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "com
)
exit /b
-:dk_initial
+::========================================================================================================================================
-echo:
-echo Initializing...
+:dk_errorcheck
-:: Check and enable WinMgmt, sppsvc services if required
+:: Check disabled services
-for %%# in (WinMgmt sppsvc) do (
-for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b NEQ 0x2 (
-echo:
-echo Enabling %%# service...
-if /i %%#==sppsvc sc config %%# start= delayed-auto %nul% || echo Failed
-if /i %%#==WinMgmt sc config %%# start= auto %nul% || echo Failed
-)
-sc start %%# %nul%
-if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 (
-echo:
-echo Starting %%# service...
-sc start %%#
-echo:
-call :dk_color %Red% "Failed to start [%%#] service, rest of the process may take a long time..."
-)
+set serv_ste=
+for %%# in (%_serv%) do (
+set serv_dis=
+reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start %nul% || set serv_dis=1
+for /f "skip=2 tokens=2*" %%a in ('reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v Start 2^>nul') do if /i %%b equ 0x4 set serv_dis=1
+if defined serv_dis (if defined serv_ste (set "serv_ste=!serv_ste! %%#") else (set "serv_ste=%%#"))
)
-:: Check WMI and SPP Errors
-
-call :dk_ckeckwmic
-
-set e_wmi=
-set e_wmispp=
-call :dk_actids
-
-if not defined applist (
-net stop sppsvc /y %nul%
-cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
-if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
-call :dk_refresh
+:: Change disabled services startup type to default
-if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
-if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul
-if !errorlevel! NEQ 0 set e_wmi=1
+set serv_csts=
+set serv_cste=
-if defined e_wmi (set e_wmispp=WMI, SPP) else (set e_wmispp=SPP)
-call :dk_actids
+if defined serv_ste (
+for %%# in (%serv_ste%) do (
+if /i %%#==ClipSVC (reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%#" /v "Start" /t REG_DWORD /d "3" /f %nul% & sc config %%# start= demand %nul%)
+if /i %%#==wlidsvc sc config %%# start= demand %nul%
+if /i %%#==sppsvc (reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%#" /v "Start" /t REG_DWORD /d "2" /f %nul% & sc config %%# start= delayed-auto %nul%)
+if /i %%#==LicenseManager sc config %%# start= demand %nul%
+if /i %%#==Winmgmt sc config %%# start= auto %nul%
+if /i %%#==wuauserv sc config %%# start= demand %nul%
+if !errorlevel!==0 (
+if defined serv_csts (set "serv_csts=!serv_csts! %%#") else (set "serv_csts=%%#")
+) else (
+set error=1
+if defined serv_cste (set "serv_cste=!serv_cste! %%#") else (set "serv_cste=%%#")
+)
+)
)
-exit /b
-
-::========================================================================================================================================
-
-:: Get Product Key from pkeyhelper.dll for future new editions
-:: It works on Windows 10 1803 (17134) and later builds. (Partially on 1803 & 1809, fully on 1903 and later)
-
-:dk_pkey
-
-set pkey=
-set d1=[DllImport(\"pkeyhelper.dll\",CharSet=CharSet.Unicode)]public static extern int SkuGetProductKeyForEdition(int e, string c, out string k, out string p);
-set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k=''; $null=$AP::SkuGetProductKeyForEdition(%1, %2, [ref]$k, [ref]$null); $k
-for /f %%a in ('%psc% "%d2%"') do if not errorlevel 1 (set pkey=%%a)
-exit /b
-
-:: Get channel name for the key which was extracted from pkeyhelper.dll
-
-:dk_pkeychannel
-
-set k=%1
-set pkeychannel=
-set p=%SystemRoot%\System32\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms
-set m=[System.Runtime.InteropServices.Marshal]
-set d1=[DllImport(\"PidGenX.dll\",CharSet=CharSet.Unicode)]public static extern int PidGenX(string k,string p,string m,int u,IntPtr i,IntPtr d,IntPtr f);
-set d2=$AP=Add-Type -Member '%d1%' -Name D1 -PassThru; $k='%k%'; $p='%p%'; $r=[byte[]]::new(0x04F8); $r[0]=0xF8; $r[1]=0x04; $f=%m%::AllocHGlobal(1272); %m%::Copy($r,0,$f,1272);
-set d3=%d2% [void]$AP::PidGenX($k,$p,\"00000\",0,0,0,$f); %m%::Copy($f,$r,0,1272); %m%::FreeHGlobal($f); [System.Text.Encoding]::Unicode.GetString($r, 1016, 128).Replace('0','')
-for /f %%a in ('%psc% "%d3%"') do if not errorlevel 1 (set pkeychannel=%%a)
-exit /b
-:dk_hwidkey
+if defined serv_csts echo Enabling Disabled Services [Successful] [%serv_csts%]
-for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b
-for %%# in (Retail OEM:NONSLP OEM:DM Volume:MAK) do (
-call :dk_pkey %osSKU% '%%#'
-if defined pkey call :dk_pkeychannel !pkey!
-if /i [!pkeychannel!]==[%%#] (
-set key=!pkey!
-exit /b
+if defined serv_cste (
+echo %serv_cste% | findstr /i "ClipSVC sppsvc" %nul% && (
+call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%] [Restart System]"
+) || (
+call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%]"
)
)
-exit /b
::========================================================================================================================================
-:dk_checkerrors
-
:: Check if the services are able to run or not
:: Workarounds are added to get correct status and error code because sc query doesn't output correct results in some conditions
@@ -1010,11 +636,12 @@ set serv_e=
for %%# in (%_serv%) do (
set errorcode=
set checkerror=
-sc query %%# | find /i ": 4 RUNNING" %nul% || net start %%# /y %nul%
+net start %%# /y %nul%
+sc query %%# | find /i "4 RUNNING" %nul% || set checkerror=1
+
sc start %%# %nul%
set errorcode=!errorlevel!
if !errorcode! NEQ 1056 if !errorcode! NEQ 0 set checkerror=1
-sc query %%# | find /i ": 4 RUNNING" %nul% || set checkerror=1
if defined checkerror if defined serv_e (set "serv_e=!serv_e!, %%#-!errorcode!") else (set "serv_e=%%#-!errorcode!")
)
@@ -1023,45 +650,71 @@ set error=1
call :dk_color %Red% "Starting Services [Failed] [%serv_e%]"
)
+::========================================================================================================================================
+
:: Various error checks
-set token=0
-if exist %Systemdrive%\Windows\System32\spp\store\2.0\tokens.dat set token=1
-if exist %Systemdrive%\Windows\System32\spp\store_test\2.0\tokens.dat set token=1
-if %token%==0 (
+for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" (
+call :dk_color %Gray% "Checking WMIC.exe [Not Found]"
+)
+
+
+%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || (
set error=1
-call :dk_color %Red% "Checking SPP tokens.dat [Not Found]"
+call :dk_color %Red% "Checking Powershell [Not Responding]"
)
+
+if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value 2>nul | find /i "computersystem" 1>nul
+if %_wmic% EQU 0 %psc% "Get-CIMInstance -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" 2>nul | find /i "computersystem" 1>nul
+if %errorlevel% NEQ 0 (
+set error=1
+call :dk_color %Red% "Checking WMI [Not Responding] %_wmic%"
+)
+
+
+if not "%regSKU%"=="%wmiSKU%" (
+set error=1
+call :dk_color %Red% "Checking WMI/REG SKU [Difference Found - WMI:%wmiSKU% Reg:%regSKU%]"
+)
+
+
DISM /English /Online /Get-CurrentEdition %nul%
set error_code=%errorlevel%
cmd /c exit /b %error_code%
if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]"
if %error_code% NEQ 0 (
-set error=1
call :dk_color %Red% "Checking DISM [Not Responding] %error_code%"
)
-%psc% $ExecutionContext.SessionState.LanguageMode 2>nul | find /i "Full" 1>nul || (
-set error=1
-call :dk_color %Red% "Checking Powershell [Not Responding]"
+
+if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" (
+call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]"
)
-for %%# in (wmic.exe) do @if "%%~$PATH:#"=="" (
+
+cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul%
+set error_code=%errorlevel%
+cmd /c exit /b %error_code%
+if %error_code% NEQ 0 set "error_code=0x%=ExitCode%"
+if %error_code% NEQ 0 (
set error=1
-call :dk_color %Gray% "Checking WMIC.exe [Not Found]"
+call :dk_color %Red% "Checking slmgr /dlv [Not Responding] %error_code%"
)
+
reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && (
set error=1
call :dk_color %Red% "Checking Rearm [System Restart Is Required]"
)
+
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" %nul% && (
set error=1
call :dk_color %Red% "Checking ClipSVC [System Restart Is Required]"
)
+
for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" 2^>nul') do if /i %%b NEQ 0x0 (
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" /t REG_DWORD /d "0" /f %nul%
call :dk_color %Red% "Checking SkipRearm [Default 0 Value Not Found, Changing To 0]"
@@ -1070,40 +723,39 @@ net start sppsvc /y %nul%
set error=1
)
-set _wsh=1
-reg query "HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _wsh=0)
-reg query "HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings" /v Enabled 2>nul | find /i "0x0" 1>nul && (set _wsh=0)
-if %_wsh% EQU 0 (
+
+call :dk_actids
+if not defined applist (
+net stop sppsvc /y %nul%
+cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
+if !errorlevel! NEQ 0 cscript //nologo %windir%\system32\slmgr.vbs /rilc %nul%
+call :dk_refresh
+call :dk_actids
+if not defined applist (
set error=1
-call :dk_color %Gray% "Checking Windows Script Host [Disabled]"
+call :dk_color %Red% "Checking Activation IDs [Not Found]"
+)
)
-cscript //nologo %windir%\system32\slmgr.vbs /dlv %nul%
-set error_code=%errorlevel%
-cmd /c exit /b %error_code%
-if %error_code% NEQ 0 set "error_code=[0x%=ExitCode%]"
-if %error_code% NEQ 0 (
+
+set token=0
+if exist %Systemdrive%\Windows\System32\spp\store\2.0\tokens.dat set token=1
+if exist %Systemdrive%\Windows\System32\spp\store_test\2.0\tokens.dat set token=1
+if %token%==0 (
set error=1
-call :dk_color %Red% "Checking slmgr /dlv [Not Responding] %error_code%"
+call :dk_color %Red% "Checking SPP tokens.dat [Not Found]"
)
-if not defined applist (
+if not exist %SystemRoot%\system32\sppsvc.exe (
set error=1
-call :dk_color %Red% "Checking WMI/SPP [Not Responding] [%e_wmispp%]"
+call :dk_color %Red% "Checking sppsvc.exe File [Not Found]"
)
-set nil=
-set _sppint=
-if not %_gent%==1 if not defined error (
-for %%# in (SppE%nil%xtComObj.exe,sppsvc.exe) do (
-reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%nil%ge File Execu%nil%tion Options\%%#" %nul% && set _sppint=1
+if /i %error_code% EQU 0xc0000022 (
+echo "%serv_e%" | find /i "sppsvc" %nul% && (
+call :dk_color %Magenta% "Looks like you may have used a Gaming spoofer. Check Activation Troubleshoot option in MAS."
)
)
-
-if defined _sppint (
-call :dk_color %Red% "Checking SPP Interference In IFEO [Found] [Uninstall KMS Activator If There Is Any]"
-set error=1
-)
exit /b
::========================================================================================================================================
@@ -1141,83 +793,92 @@ exit /b
:: 1st column = Activation ID
:: 2nd column = Generic Retail/OEM/MAK Key
:: 3rd column = SKU ID
-:: 4th column = 1 = activation is not working (at the time of writing this), 0 = activation is working
-:: 5th column = Key Type
-:: 6th column = WMI Edition ID
-:: 7th column = Version name incase same Edition ID is used in different OS versions with different key
+:: 4th column = Key part number
+:: 5th column = Ticket signature value. It's as it is, it's not encoded. (Check https://massgrave.dev/hwid.html#Manual_Activation to see how it's generated)
+:: 6th column = 1 = activation is not working (at the time of writing this), 0 = activation is working
+:: 7th column = Key Type
+:: 8th column = WMI Edition ID
+:: 9th column = Version name incase same Edition ID is used in different OS versions with different key
:: Separator = _
-:: Key preference is in the following order. Retail > OEM:NONSLP > OEM:DM > Volume:MAK
-
:hwiddata
for %%# in (
-8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8HV2C___4_0_OEM:NONSLP_Enterprise
-23505d51-32d6-41f0-8ca7-e78ad0f16e71_D6RD9-D4N8T-RT9QX-YW6YT-FCWWJ__11_1_____Retail_Starter
-c83cef07-6b72-4bbc-a28f-a00386872839_3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__27_0_Volume:MAK_EnterpriseN
-211b80cc-7f64-482c-89e9-4ba21ff827ad_3NFXW-2T27M-2BDW6-4GHRV-68XRX__47_1_____Retail_StarterN
-4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T__48_0_____Retail_Professional
-9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PKCKT__49_0_____Retail_ProfessionalN
-f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WXCHW__98_0_____Retail_CoreN
-1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8TYMD__99_0_____Retail_CoreCountrySpecific
-3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_100_0_____Retail_CoreSingleLanguage
-2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8HVX7_101_0_____Retail_Core
-2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_119_0_OEM:NONSLP_PPIPro
-e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_121_0_____Retail_Education
-c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DRR8H_122_0_____Retail_EducationN
-cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_125_1_Volume:MAK_EnterpriseS_2021
-d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P39PB_125_0_OEM:NONSLP_EnterpriseS_2019
-706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DYJWX_125_0_OEM:NONSLP_EnterpriseS_2016
-faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MDWWW_125_0_OEM:NONSLP_EnterpriseS_2015
-2c060131-0e43-4e01-adc1-cf5ad1100da8_RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_126_1_Volume:MAK_EnterpriseSN_2021
-e8f74caa-03fb-4839-8bcc-2e442b317e53_M33WV-NHY3C-R7FPM-BQGPT-239PG_126_1_Volume:MAK_EnterpriseSN_2019
-3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_126_0_Volume:MAK_EnterpriseSN_2016
-60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7V2X_126_0_Volume:MAK_EnterpriseSN_2015
-a48938aa-62fa-4966-9d44-9f04da3f72f2_G3KNM-CHG6T-R36X3-9QDG6-8M8K9_138_1_____Retail_ProfessionalSingleLanguage
-f7af7d09-40e4-419c-a49b-eae366689ebd_HNGCC-Y38KG-QVK8D-WMWRK-X86VK_139_1_____Retail_ProfessionalCountrySpecific
-eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2YV77_161_0_____Retail_ProfessionalWorkstation
-89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_162_0_____Retail_ProfessionalWorkstationN
-62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_164_0_____Retail_ProfessionalEducation
-13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QPF8P_165_0_____Retail_ProfessionalEducationN
-1ca0bfa8-d96b-4815-a732-7756f30c29e2_FV469-WGNG4-YQP66-2B2HY-KD8YX_171_1_OEM:NONSLP_EnterpriseG
-8d6f6ffe-0c30-40ec-9db2-aad7b23bb6e3_FW7NV-4T673-HF4VX-9X4MM-B4H4T_172_1_OEM:NONSLP_EnterpriseGN
-df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2YV66_175_0_____Retail_ServerRdsh
-d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_178_0_____Retail_Cloud
-af5c9381-9240-417d-8d35-eb40cd03e484_NH9J3-68WK7-6FB93-4K3DF-DJ4F6_179_0_____Retail_CloudN
-c7051f63-3a76-4992-bce5-731ec0b1e825_2HN6V-HGTM8-6C97C-RK67V-JQPFD_183_1_____Retail_CloudE
-8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQYW-NFFMW-XJPBH-K8732-CKFFD_188_0_____OEM:DM_IoTEnterprise
-ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_191_0_OEM:NONSLP_IoTEnterpriseS
-d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_202_0_____Retail_CloudEditionN
-92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_203_0_____Retail_CloudEdition
+8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8HV2C___4_X19-99683_X9J5T0gPQprYpz2euPvoJGlkurIO9h6N8ypE0KWYVpy0nbCKYnqSUCD7u8ReXAmc085jX2uM5PKurSee9Yq/PxesgiysQHDBsOhr98MXZZiIgy4ssnz2gZF70KB8tO3X7kk9LHwxXfz3rlquYPod9swe90nqvVaJMWCpQK0InUw_0_OEM:NONSLP_Enterprise
+c83cef07-6b72-4bbc-a28f-a00386872839_3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__27_X19-98746_WFZBjlVtHQumoaVE28/NHsRvv1lgkkfav6NPHqr6OC2u4vxkjjJkkl9OTF6DpHJu0IFrrQv+HYcdZ/WC5EzhOMqMxcujTBSAN7xLIVEbs72Db0Bi5iDAbOltJpk8QKKe18otQJ6vajW5WOPXjbgSJfDFaZQfiwvIJ1ICXt+stog_0_Volume:MAK_EnterpriseN
+4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T__48_X19-98841_K3qev/5gQpX1RK1F9M9beEWWv/di1GsRF7OUcEMGTGDTYnaRenRcJaO8zOHQQvKDc57fon/v77ZpHQHT/jWWhWnLm7Ssory+s8tOs72fPjivVBDwpSPIEC1v+8Vpb4a3XCZet2e/Z5wmpCq9XDkowys3IcxYM0mHWBaNPu8gIe4_0_____Retail_Professional
+9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PKCKT__49_X19-98859_WcAcor6kQgxgkTRzcoxnb8UIoo5/ueYeaOKqy9/xAzlruHAKxhatXeGtSI58lXcCK5hxXkDmcyrRFwWSwdvg0txwTi7VusYcTNCLdmNWU/62iDrBhzMrCYtuhW9EV/g4+TlbjSm4PBJ0HMlI4YzAEnyJiBgKPDgBQ8Gj9LRbEgU_0_____Retail_ProfessionalN
+f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WXCHW__98_X19-98877_MBDSEqlayxtVVEgIeAl8milgjS/BVHow6+MmpCyh9nweuctlT1+LbEHmDlnqDeLr9FQrN2FpEJtNr26rE0niMdvcAP51MfJsREyhWOEbrWwWyMH0KwDAci2WxWZTJp/SEZnq5HYYT1pPPLMWAkKRHJksJJFtg4zBtoyHvLjc35c_0_____Retail_CoreN
+1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8TYMD__99_X19-99652_mpjCoh6soA/rwJutsjekZpA9vDUD8znR20V/c8FwSjuCcSbPhmP6bpJR9rfptAZqpagliMxA/OUZsx0Knt0n/hgOy2mv8pr24gI9uYXK8EfhG74bVdsyvZz1tyA6CaVR02ZahQvbKYzCmXUvsI+Wge3bHbKbVpn9Mvl+itn2a4g_0_____Retail_CoreCountrySpecific
+3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_100_X19-99661_KaUs6KwvtthPOsxd3x0tU/baKSv1DWSFOqbq7PbU/uYEY95p0Skzv3y4aXq+xVmfwSt8STL/4vSfFIAlsaRh7Vnq6Y/Ael8joeqI8hBN461fykoHxSELRMJ+eed50T0cJUS79ol6OTBOCCVeHgmtGVbHuL88TMWW69fGNdIMM3U_0_____Retail_CoreSingleLanguage
+2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8HVX7_101_X19-98868_NpHxrAtA+GL6kawAP5Z2UdfUVcKFvf9UzEe6FIV/HztZqxpMBDFv2hdxCjD9+T8PKcW8j3n04McelOAgr3lD37Fu+wrvJIGX0dG3xEtU/MG9L9X5baBS8H6AmC6rq2+w5NUY8EchK9W2oatBflFb8IcfCSeAyOfsJei6bdu4mp8_0_____Retail_Core
+2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_119_X19-99606_gtywgqIP3j+bliKdunuseeZWtsOzWhj+DmSBq7nqeNarHutgbWEwvcRiGo+nwxONt9Ak/VyuO76ZWH/db3iRVTk1y61vFv15gVlOy1ovLjVHBvmPVdQXIne2N+pIMb0eBhZWHRX63mYdkZRZ0wg/+bj4xsjJv+qLpWhVCzNMge4_0_OEM:NONSLP_PPIPro
+e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_121_X19-98886_VuBmoSUdF63Cvwm9wNlc2yhD2tP9B72iVVWFNcbAwDGXF6o06oNMsIJ0VqGJDdBzZjVGw2wHokMabxZNDyIl90CO7trwgV8S0lLJVLymxyUaE3ThvN3YUsi9Q3H+5Kr0RpsojCWb+UQd/GY4bSXfyStXFylj6im7yv0db/ZWGbw_0_____Retail_Education
+c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DRR8H_122_X19-98892_jQ6S2bbNoVrp/zvi8BEUwCf7fge1nAdspcjXyTeTySUiR+hXPiKQEWgyLqAdZ5Or+X2JGT/LZN1/eZ9P+REmzG/WQotZ+fyyPguoSsES+d312RkfmQoI5gVanEkGjZSU4YohREM/Vyf9MOO7dbH9MMEpFm2mje6OnhyJo2gux0g_0_____Retail_EducationN
+cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_125_X22-66075_wJ/BPDFz+13PVJtBqBo+E4LCm3LoMVALCQUun9kXGBULr7V8FQ5nKUudUGHDLNNVIIicdw9Uh26BKAt0/hnE7BpBkzwdi4qAdZgKXQ1t06Ek4+zXmoT225NvpaHsuhDkE687TtCB1ZWvAulA8G9ehE3HTJSoNm4wCFOQyIQQtqQ_1_Volume:MAK_EnterpriseS_VB
+d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P39PB_125_X21-83233_V+y0SFmAnGwRwgNz+0sO0mj+XxSjbdRDpom1Iqx2BJcsf96Q5ittJOcMhKiNswyKuq5suM5vy60tA/AUdb1mrnnrnXfmz7nFam/BIOOfa18GA7vd1aNFufhpmCiMWxoGSewH/T1pnCZrsvGYIj//qC7aiQVKYBngO7UYWGaytgc_0_OEM:NONSLP_EnterpriseS_RS5
+706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DYJWX_125_X21-05035_U2DIv+LAhSGz0rNbTiMQYaP3M41+0+ZioF7vh0COeeJSIruDFCZ3Li7ZM3dSleg6QTCxG04uZ3i3r1bCZv0+WAfU9rG+3BqLAwKlJS/31rETeRWvrxB1UK4mTMHwAJc9txDAc15ureqF+2b9pIIpwLljmFer6fI7z0iI6I/ZuTU_0_OEM:NONSLP_EnterpriseS_RS1
+faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MDWWW_125_X19-99617_0frpwr4N/wBVRA/nOvAMqkxmRj6Vv9mA+jVNtnurAL1TjkPN/y+6YVUd5MP/Y4As4kddHoHiZXI+2siKHJsaV95ppXoHKR8d7FRVitr1F+82TbB7OVvdCclGrRZymnq25HvtSC3BROHt7ZXTgSCWMyB7MlbLiqHiTymOj5OMX1g_0_OEM:NONSLP_EnterpriseS_TH
+2c060131-0e43-4e01-adc1-cf5ad1100da8_RQFNW-9TPM3-JQ73T-QV4VQ-DV9PT_126_X22-66108_UeA6O2iIW6zFMJzLMCQjVA7gUHOGRTiFB6LPrgjhgfJEXSZnDjxw8wsR+tp+JQWeaQDsVt06c2byH3z7Ft2wNk8n3gcXUknIjlcCckNjw05WDI64/wCqz+gtf1RajMEoV/mODpBx7rdLtCg03FyV7Z9LOib4/WLSmnxjDPKMG7s_1_Volume:MAK_EnterpriseSN_VB
+e8f74caa-03fb-4839-8bcc-2e442b317e53_M33WV-NHY3C-R7FPM-BQGPT-239PG_126_X21-83264_NtP6sMWmOTCdABAbgIZfxZzRs8zaqzfaabLeFXQJvfJvQPLQPk2UxMliASJG+7YwwbTD8pyhUoQqUYrlCzJZ6jDSDyUTJkXgo9akR4fBOg6Z5wn5fW8NGAMDcLND5d9XxHl0gWH/HZNIs/GZaPJsCVVqPr7X8bk/y0DeIofxICU_1_Volume:MAK_EnterpriseSN_RS5
+3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_126_X21-04921_WeNSkuiC3iyNT9tDqlj6KvM17UYMsYjEelyyMEyPEXSAbYA08lYtYJjCzxSE9T30p9dxqPIuj370OwHhAxG8a51/HoLNWR0grj08HmdOXUA8Ap4clEivxKM0zRvwPR6L2M2HQP0nN54c9It7ikzweJ0X2HHOb58oEw9LbMeUM/Y_0_Volume:MAK_EnterpriseSN_RS1
+60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7V2X_126_X19-98770_QLG40WW/TtUqtir9K6FJCQXU1mfn27uutdOunHJ3gXk6v0Mbxaqu9GKqpg5xFzdFiOPb/8Bmk/ylwceXgoaUx1nKcBGb/Bg+jICiNMEYIbGyMuYiHb0iJeVbjbBLLfWuAAuUPftfnKPH3dAu1YvhaS5nv7a5wICrXdJWeVNpBxk_0_Volume:MAK_EnterpriseSN_TH
+eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2YV77_161_X21-43626_vHO/5UEtrsDzGC30A2Ya5DYXlNMs7hVYiLvM7X31xkaFMxogbiy3ZDxBbjRku3VXyW+TYsFX/D/wdJgFmMrhsNrObkxqzYMMRjx+BpwOx2PspKpS2RyzovyRl8v93SvHB5IyoO2/3pm2YqJDK1hXLhms6+DDPuiofQt36q47reQ_0_____Retail_ProfessionalWorkstation
+89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_162_X21-43644_phlxNLr+sk8cCCmAVU3k3XrtD6sFDeoaODc+21soKqePbVQbzPHgokS73ccok6/gDfu/u5UKc7omL8pm2IhIhf70oC+8M/FFp0zRFeC/ZFXdF2tL23oKWI9kZbvcaoZBiqaDGc1bNYi5KAZYaJU8wwqw16ZnohQJZ7QR9cgUfFQ_0_____Retail_ProfessionalWorkstationN
+62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_164_X21-04955_Px7QWdfy0esrMzQoydKlmIcGdfV0pQvbnumyrh4evDNF9gpENm8OIfZfljIynury0qZAkw4AG3uGyp+5IxZGIh6U3dz41uNVfEcA9NZ34OEBXMtjEOU1ZbJ8wp8JecQKwlORclvsri9OOi0GbGc0TYRanlci2jJL/3x/gSuWXCs_0_____Retail_ProfessionalEducation
+13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QPF8P_165_X21-04956_GRSYno4+yqU/JMxHLDKdvdFWRz1uT90n5JkTvSqztDvXMf/mBhSV/OpppJWGo6UL0FwqYcu9oXl+Vx336pLAE5/EDzQHh+QCwOCDJiTKnd3hW/zrGMe6Sb0OAIkNNML9gcOBbr1IHFWhN99r8ZWl5JjpzMs2nPjejB1Ec8NCcpE_0_____Retail_ProfessionalEducationN
+df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2YV66_175_X21-41295_kkJyX1AwYgDYcGK1eIRdocybkbAfEtQkDxhRUhY89X2i2PSD9jcsGQgHWyD3KUKWb3bzR8QkDS3MTeieOw3EzD0RyAQhHc6lRR+rk18lh5UOVCgrZ6byxn29Ur+jAh0LJXImggC9JMGb2cTYaZckxzm3ICoAKwrmI9JnrzBTVmY_0_____Retail_ServerRdsh
+d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_178_X21-32983_YIMgXu2dZ9x1r1NLs3egTc/8EYc1RndYDvoX7QquQQLnhnhbSNBw3hmlqrQ0zNsTLut3EKpGZK2CwPspJJWE60lecdxI4211K748P6vkuqHPL4uFqXyKxTG3qRrtDIra5nnMn4GqG2fWuguzTXaumu8cJU3H1uTOsR1E/DQnJJ0_0_____Retail_Cloud
+af5c9381-9240-417d-8d35-eb40cd03e484_NH9J3-68WK7-6FB93-4K3DF-DJ4F6_179_X21-32987_H0qrFdf+FQxcSRJDtEwd8OfwC4iH/25Q01jz3QuB9yhEqB0W1i83u0WDpVK04pvU1EDCCRRI/DhXynbkWpLC0chdTOW4k5jIy+aa0cD3fccz9ChSjVHMzyTg3abEVFAvy9rttUyxcFIOKcINXHTxTRp5cZPwOa393tlJyBiliAo_0_____Retail_CloudN
+8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQYW-NFFMW-XJPBH-K8732-CKFFD_188_X21-99378_Bwx3E7qmE6M8UR6+KPqLnnavI6ThNHHUO717RJY9di2YI9rzC3O0LceXOHjshSKwfwxosqFsD/p/inrJmabed1yA/ZWwISyGtAIGTtRgpuSE4TAfW6KEW0v7rcr2wwwDq7DHSuz4QN4odEGe9bvtx4zIZKufQzzN4TN2rd/BJkE_0_____OEM:DM_IoTEnterprise
+ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_191_X21-99682_lE8qL1p4m68mv9wcxU2sdKZPIccybtOjr+aMAdV+sLHs9wzE26oz5GiSZ3UzpU7yoYrNMqwGkKX6mrCEGRLh+XR2Ricp7ELA1PkzaGm0FLUqaK2GNVQ00i+s6KcA2XRr/gWOhhGTqSCjpSi9cMiqMbftf9Bo/BJVK3ib9xU4OQw_0_OEM:NONSLP_IoTEnterpriseS_VB
+d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_202_X22-53884_hPcIn0dF9Dq6zlXd3RxBqVDPDnf5sTasTjUqhD6lGc9IkTc8476NHd1PV1Ds++VO34/dw2H2PWk33LT5Es6PnUi32Ypva4POy4QJo5W3qyduiJiHUOM5GS9yAkKfdHFgUXaUVwopYKq+EwmgxFmEvHYdWgREHgIMyNoKAZQK0Ok_0_____Retail_CloudEditionN
+92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_203_X22-53847_DCP6QzPj+BD1EEmlBelBt7x9AmvQOfd7kdkUB0b0x6/TNHRnZtdyix3pNX2IDQtJbLnNLc2ZlMmupbZQrtyxe3xl8+xlCnHByXZpzFty9sGzq3MozHHA9u9WsJEf5R7tnFDplNM1UitlTVTAyuCGk83brY4zjmz/52pUQyQHzjI_0_____Retail_CloudEdition
+d4f9b41f-205c-405e-8e08-3d16e88e02be_J7NJW-V6KBM-CC8RW-Y29Y4-HQ2MJ_205_X23-15027_U9eyfIBXrs++lyP6OjHHaF/wjieAxQeSKwzSkGBeTTpyCDcenq8t4cKvqDHnauSZzaVPWNoVcASkMCdlJi3EkR29KSgvx9/K2OB8LVH2PPpqvwjm1ZZdrvLMGhW83A/KRrtN9AOx7bnPC8MNLErnzbRRS9/aOrmp4Uzo8EIVagI_0_OEM:NONSLP_IoTEnterpriseSK
) do (
-for /f "tokens=1-8 delims=_" %%A in ("%%#") do if %osSKU%==%%C (
+for /f "tokens=1-10 delims=_" %%A in ("%%#") do (
+
+if %1==key if %osSKU%==%%C (
+
+REM Detect key attempt 1
-if %1==attempt1 if not defined key (
+if "%2"=="attempt1" if not defined key (
echo "!applist!" | find /i "%%A" 1>nul && (
-set app=%%A
+if %%F==1 set notworking=1
set key=%%B
-if %%D==1 set notworking=1
)
)
-if %1==attempt2 if not defined key (
-set 7th=%%G
-if not defined 7th (
-set app=%%A
-if %%D==1 set notworking=1
-if %winbuild% GTR 19044 call :dk_hwidkey %nul%
-if not defined key set key=%%B
+REM Detect key attempt 2
+
+if "%2"=="attempt2" if not defined key (
+set actidnotfound=1
+set 9th=%%I
+if not defined 9th (
+if %%F==1 set notworking=1
+set key=%%B
) else (
-echo "%winos%" | find /i "%%G" 1>nul && (
-set app=%%A
-if %%D==1 set notworking=1
-if %winbuild% GTR 19044 call :dk_hwidkey %nul%
-if not defined key set key=%%B
+echo "%branch%" | find /i "%%I" 1>nul && (
+if %%F==1 set notworking=1
+set key=%%B
)
)
)
)
+
+REM Generate ticket
+
+if %1==ticket if "%key%"=="%%B" (
+set _nil=
+set "string=OSMajorVersion=5;OSMinorVersion=1;OSPlatformId=2;PP=0;Pfn=Microsoft.Windows.%%C.%%D_8wekyb3d8bbwe;DownlevelGenuineState=1;$([char]0)"
+for /f "tokens=* delims=" %%i in ('powershell [convert]::ToBas!_nil!e64String([Text.Encoding]::Unicode.GetBytes("""!string!"""^)^)') do set "encoded=%%i"
+echo "!encoded!" | find "AAAA" 1>nul || exit /b
+
+<nul set /p "=<?xml version="1.0" encoding="utf-8"?><genuineAuthorization xmlns="http://www.microsoft.com/DRM/SL/GenuineAuthorization/1.0"><version>1.0</version><genuineProperties origin="sppclient"><properties>OA3xOriginalProductId=;OA3xOriginalProductKey=;SessionId=!encoded!;TimeStampClient=2022-10-11T12:00:00Z</properties><signatures><signature name="clientLockboxKey" method="rsa-sha256">%%E=</signature></signatures></genuineProperties></genuineAuthorization>" >"%tdir%\GenuineTicket"
+)
+
+)
)
exit /b
@@ -1227,105 +888,38 @@ exit /b
:: ProfessionalCountrySpecific won't be converted because it's not a good idea to change CountrySpecific editions
-:: 1st column = Current Edition Activation ID
-:: 2nd column = Alternate Edition Activation ID
-:: 3rd column = Alternate Edition Key
-:: 4th column = Current Edition Name
-:: 5th column = Alternate Edition Name
+:: 1st column = Current SKU ID
+:: 2nd column = Current Edition Name
+:: 3rd column = Current Edition Activation ID
+:: 4th column = Alternate Edition Activation ID
+:: 5th column = Alternate Edition HWID Key
+:: 6th column = Alternate Edition Name
:: Separator = _
-:: Key preference is in the following order. Retail > OEM:NONSLP > OEM:DM > Volume:MAK
-
:hwidfallback
-if %_chan%==0 exit /b
+set notfoundaltactID=
+if %_NoEditionChange%==1 exit /b
for %%# in (
-cce9d2de-98ee-4ce2-8113-222620c64a27_ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_EnterpriseS-2021____________IoTEnterpriseS
-a48938aa-62fa-4966-9d44-9f04da3f72f2_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T_ProfessionalSingleLanguage__Professional
+125_EnterpriseS-2021___________cce9d2de-98ee-4ce2-8113-222620c64a27_ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_IoTEnterpriseS-2021
+191_IoTEnterpriseS-Win11_______59eb965c-9150-42b7-a0ec-22151b9897c5_d4f9b41f-205c-405e-8e08-3d16e88e02be_J7NJW-V6KBM-CC8RW-Y29Y4-HQ2MJ_IoTEnterpriseSK-Win11
+138_ProfessionalSingleLanguage_a48938aa-62fa-4966-9d44-9f04da3f72f2_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T_Professional
) do (
-for /f "tokens=1-5 delims=_" %%A in ("%%#") do if "%app%"=="%%A" (
-echo "!applist!" | find /i "%%B" 1>nul && (
-set altkey=%%C
-set curedition=%%D
-set altedition=%%E
+for /f "tokens=1-6 delims=_" %%A in ("%%#") do if %osSKU%==%%A (
+echo "!applist!" | find /i "%%C" 1>nul && (
+echo "!applist!" | find /i "%%D" 1>nul && (
+set altkey=%%E
+set curedition=%%B
+set altedition=%%F
+) || (
+set altedition=%%F
+set notfoundaltactID=1
+)
)
)
)
exit /b
-::========================================================================================================================================
-
-:: Script changes below values in official gatherosstate.exe so that it can generate usable ticket in Windows unlicensed state
-
-:hex:[
-$bytes = [System.IO.File]::ReadAllBytes("gatherosstate.exe")
-$bytes[320] = 0x9c
-$bytes[321] = 0xfb
-$bytes[322] = 0x05
-$bytes[13672] = 0x25
-$bytes[13674] = 0x73
-$bytes[13676] = 0x3b
-$bytes[13678] = 0x00
-$bytes[13680] = 0x00
-$bytes[13682] = 0x00
-$bytes[13684] = 0x00
-$bytes[32748] = 0xe9
-$bytes[32749] = 0x9e
-$bytes[32750] = 0x00
-$bytes[32751] = 0x00
-$bytes[32752] = 0x00
-$bytes[32894] = 0x8b
-$bytes[32895] = 0x44
-$bytes[32897] = 0x64
-$bytes[32898] = 0x85
-$bytes[32899] = 0xc0
-$bytes[32900] = 0x0f
-$bytes[32901] = 0x85
-$bytes[32902] = 0x1c
-$bytes[32903] = 0x02
-$bytes[32904] = 0x00
-$bytes[32906] = 0xe9
-$bytes[32907] = 0x3c
-$bytes[32908] = 0x01
-$bytes[32909] = 0x00
-$bytes[32910] = 0x00
-$bytes[32911] = 0x85
-$bytes[32912] = 0xdb
-$bytes[32913] = 0x75
-$bytes[32914] = 0xeb
-$bytes[32915] = 0xe9
-$bytes[32916] = 0x69
-$bytes[32917] = 0xff
-$bytes[32918] = 0xff
-$bytes[32919] = 0xff
-$bytes[33094] = 0xe9
-$bytes[33095] = 0x80
-$bytes[33096] = 0x00
-$bytes[33097] = 0x00
-$bytes[33098] = 0x00
-$bytes[33449] = 0x64
-$bytes[33576] = 0x8d
-$bytes[33577] = 0x54
-$bytes[33579] = 0x24
-$bytes[33580] = 0xe9
-$bytes[33581] = 0x55
-$bytes[33582] = 0x01
-$bytes[33583] = 0x00
-$bytes[33584] = 0x00
-$bytes[34189] = 0x59
-$bytes[34190] = 0xeb
-$bytes[34191] = 0x28
-$bytes[34238] = 0xe9
-$bytes[34239] = 0x4f
-$bytes[34240] = 0x00
-$bytes[34241] = 0x00
-$bytes[34242] = 0x00
-$bytes[34346] = 0x24
-$bytes[34376] = 0xeb
-$bytes[34377] = 0x63
-[System.IO.File]::WriteAllBytes("gatherosstatemodified.exe", $bytes)
-:hex:]
-
::======================================================================================================================================== \ No newline at end of file