@echo off ::============================================================================ :: :: Homepage: mass grave[.]dev :: Email: mas.help@outlook.com :: ::============================================================================ :: To activate, run the script with "/HWID" parameter or change 0 to 1 in below line set _act=0 :: To activate with LockBox method, run the script with "/HWID-Lockbox" parameter or change 0 to 1 in below line set _lock=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 run the script in debug mode, change 0 to "/HWID" in below line set "_debug=0" :: If value is changed in above lines or parameter is used then script will run in unattended mode ::======================================================================================================================================== :: Set Environment variables, it helps if they are misconfigured in the system setlocal EnableExtensions setlocal DisableDelayedExpansion set "PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC" set "SysPath=%SystemRoot%\System32" set "Path=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\" if exist "%SystemRoot%\Sysnative\reg.exe" ( set "SysPath=%SystemRoot%\Sysnative" set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%" ) set "ComSpec=%SysPath%\cmd.exe" set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules" set "_cmdf=%~f0" for %%# in (%*) do ( if /i "%%#"=="r1" set r1=1 if /i "%%#"=="r2" set r2=1 ) :: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows :: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows if exist %SystemRoot%\Sysnative\cmd.exe if not defined r1 ( setlocal EnableDelayedExpansion start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* r1" exit /b ) :: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined r2 ( setlocal EnableDelayedExpansion start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* r2" exit /b ) ::======================================================================================================================================== :: Debug code if "%_debug%" EQU "0" ( set "nul1=1>nul" set "nul2=2>nul" set "nul6=2^>nul" set "nul=>nul 2>&1" goto :_debug ) set "nul1=" set "nul2=" set "nul6=" set "nul=" @echo on @prompt $G @call :_debug "%_debug%" >"%~dp0_tmp.log" 2>&1 @cmd /u /c type "%~dp0_tmp.log">"%~dp0_Debug.log" @del "%~dp0_tmp.log" @echo off @exit /b :_debug ::======================================================================================================================================== set "blank=" set "mas=ht%blank%tps%blank%://mass%blank%grave.dev/" :: Check if Null service is working, it's important for the batch script sc query Null | find /i "RUNNING" if %errorlevel% NEQ 0 ( echo: echo Null service is not running, script may crash... echo: echo: echo Help - %mas%troubleshoot echo: echo: ping 127.0.0.1 -n 20 ) cls :: Check LF line ending pushd "%~dp0" >nul findstr /v "$" "%~nx0" && ( echo: echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing. echo: echo: echo Help - %mas%troubleshoot echo: echo: ping 127.0.0.1 -n 20 >nul popd exit /b ) popd ::======================================================================================================================================== cls color 07 title HWID Activation set _args= set _elev= set _unattended=0 set _args=%* if defined _args set _args=%_args:"=% if defined _args ( for %%A in (%_args%) do ( if /i "%%A"=="/HWID" set _act=1 if /i "%%A"=="/HWID-Lockbox" set _lock=1 if /i "%%A"=="/HWID-NoEditionChange" set _NoEditionChange=1 if /i "%%A"=="-el" set _elev=1 ) ) for %%A in (%_act% %_lock% %_NoEditionChange%) do (if "%%A"=="1" set _unattended=1) ::======================================================================================================================================== call :dk_setvar if %winbuild% LSS 10240 ( %eline% echo Unsupported OS version detected [%winbuild%]. echo HWID Activation is supported only for Windows 10/11. echo: call :dk_color %Blue% "Use Online KMS Activation option." goto dk_done ) if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" ( %eline% echo HWID Activation is not supported for Windows Server. call :dk_color %Blue% "Use KMS38 or Online KMS Activation option." goto dk_done ) ::======================================================================================================================================== :: Fix special characters limitation in path name set "_work=%~dp0" if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%" set "_batf=%~f0" set "_batp=%_batf:'=''%" set _PSarg="""%~f0""" -el %_args% set _PSarg=%_PSarg:'=''% set "_ttemp=%userprofile%\AppData\Local\Temp" setlocal EnableDelayedExpansion ::======================================================================================================================================== echo "!_batf!" | find /i "!_ttemp!" %nul1% && ( if /i not "!_work!"=="!_ttemp!" ( %eline% echo Script is launched from the temp folder, echo Most likely you are running the script directly from the archive file. echo: echo Extract the archive file and launch the script from the extracted folder. goto dk_done ) ) ::======================================================================================================================================== :: Check PowerShell REM :PowerShellTest: $ExecutionContext.SessionState.LanguageMode :PowerShellTest: cmd /c "%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':PowerShellTest:\s*';iex ($f[1])"" | find /i "FullLanguage" %nul1% || ( %eline% cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" echo: cmd /c "%psc% "$ExecutionContext.SessionState.LanguageMode"" | find /i "FullLanguage" %nul1% && ( echo Failed to run Powershell command but Powershell is working. call :dk_color %Blue% "Check if your antivirus is blocking the script." echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) || ( echo PowerShell is not working. Aborting... echo If you have applied restrictions on Powershell then undo those changes. echo: set fixes=%fixes% %mas%fix_powershell call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%fix_powershell" ) goto dk_done ) ::======================================================================================================================================== :: Elevate script as admin and pass arguments and preventing loop %nul1% fltmc || ( if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg!\"' -verb runas" && exit /b %eline% echo This script needs admin rights. echo To do so, right click on this script and select 'Run as administrator'. goto dk_done ) ::======================================================================================================================================== :: Disable QuickEdit and launch from conhost.exe to avoid Terminal app if %winbuild% GEQ 17763 ( set terminal=1 ) else ( set terminal= ) :: Check if script is running in Terminal app set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); set r2=%r1% [void]$TB.DefinePInvokeMethod('GetConsoleWindow', 'kernel32.dll', 22, 1, [IntPtr], @(), 1, 3).SetImplementationFlags(128); set r3=%r2% [void]$TB.DefinePInvokeMethod('SendMessageW', 'user32.dll', 22, 1, [IntPtr], @([IntPtr], [UInt32], [IntPtr], [IntPtr]), 1, 3).SetImplementationFlags(128); set d1=%r3% $hIcon = $TB.CreateType(); $hWnd = $hIcon::GetConsoleWindow(); set d2=%d1% echo $($hIcon::SendMessageW($hWnd, 127, 0, 0) -ne [IntPtr]::Zero); if defined terminal ( %psc% "%d2%" %nul2% | find /i "True" %nul1% && set terminal= ) if %_unattended%==1 goto :skipQE for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE) if defined terminal ( set "launchcmd=start conhost.exe %psc%" ) else ( set "launchcmd=%psc%" ) :: Disable QuickEdit in current session set "d1=$t=[AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0);" set "d2=$t.DefinePInvokeMethod('GetStdHandle', 'kernel32.dll', 22, 1, [IntPtr], @([Int32]), 1, 3).SetImplementationFlags(128);" set "d3=$t.DefinePInvokeMethod('SetConsoleMode', 'kernel32.dll', 22, 1, [Boolean], @([IntPtr], [Int32]), 1, 3).SetImplementationFlags(128);" set "d4=$k=$t.CreateType(); $b=$k::SetConsoleMode($k::GetStdHandle(-10), 0x0080);" %launchcmd% "%d1% %d2% %d3% %d4% & cmd.exe '/c' '!_PSarg! -qedit'" && (exit /b) || (set terminal=1) :skipQE ::======================================================================================================================================== :dl_menu if %_unattended%==0 ( cls mode 76, 25 title HWID Activation echo: echo: echo: echo: echo ____________________________________________________________ echo: if !_lock!==0 ( call :dk_color2 %_White% " [1] HWID Activation " %_Green% " [Downlevel Method]" ) else ( call :dk_color2 %_White% " [1] HWID Activation " %_Yellow% " [LockBox Method]" ) echo ____________________________________________ echo: echo [C] Change Method echo: echo [0] %_exitmsg% echo ____________________________________________________________ echo: call :dk_color2 %_White% " " %_Green% "Enter a menu option in the Keyboard:" choice /C:1C0 /N set _el=!errorlevel! if !_el!==3 exit /b if !_el!==2 ( if !_lock!==0 ( set _lock=1 ) else ( set _lock=0 ) cls echo: call :dk_color %_Green% " Downlevel Method:" echo It creates downlevelGTkey ticket for activation with simplest process. echo: call :dk_color %_Yellow% " LockBox Method:" echo It creates clientLockboxKey ticket, echo But requires more steps such as, echo - Cleaning ClipSVC licences echo - Deleting a volatile and protected registry key by taking ownership echo - System may need a restart for succesful activation echo - Microsoft Account and Store Apps may need relogin-restart in the system echo: call :dk_color2 %_White% " " %Green% "Note:" echo Microsoft accepts both types of tickets and that's unlikely to change. echo On a production system we suggest to use Downlevel [default] Method. echo: call :dk_color %_Yellow% " Press any key to go back..." pause %nul1% goto :dl_menu ) if !_el!==1 goto :dl_menu2 goto :dl_menu ) :dl_menu2 cls if not defined terminal ( mode 110, 38 if exist "%SysPath%\spp\store_test\" mode 134, 38 ) set _title=title HWID Activation if %_lock%==0 (%_title% [Downlevel Method]) else (%_title% [Lockbox Method]) echo: echo Initializing... call :dk_chkmal for %%# in ( sppsvc.exe ClipUp.exe ) do ( if not exist %SysPath%\%%# ( %eline% echo [%SysPath%\%%#] file is missing. Aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) ::======================================================================================================================================== set spp=SoftwareLicensingProduct set sps=SoftwareLicensingService call :dk_ckeckwmic call :dk_checksku call :dk_product call :dk_sppissue ::======================================================================================================================================== :: Check if system is permanently activated or not call :dk_checkperm if defined _perm ( cls echo ___________________________________________________________________________________________ echo: call :dk_color2 %_White% " " %Green% "Checking: %winos% is Permanently Activated." call :dk_color2 %_White% " " %Gray% "Activation is not required." echo ___________________________________________________________________________________________ if %_unattended%==1 goto dk_done echo: choice /C:10 /N /M "> [1] Activate [0] %_exitmsg% : " if errorlevel 2 exit /b ) cls ::======================================================================================================================================== :: Check files if not exist "!_work!\BIN\gatherosstate.exe" ( %eline% echo 'gatherosstate.exe' file is missing in 'BIN' folder. Aborting... echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" 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%"=="0CC709275767E0AA7BD69236E364A45E66AAD9AB" ( %eline% echo gatherosstate.exe SHA1 hash mismatch found. echo: echo Detected: %_hash% echo: set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" goto dk_done ) ) ::======================================================================================================================================== :: Check Evaluation version if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% && ( %eline% echo [%winos% ^| %winbuild%] echo: echo Evaluation Editions cannot be activated outside of evaluation period. echo: set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" goto dk_done ) ) ::======================================================================================================================================== set error= cls echo: call :dk_showosinfo :: Check Internet connection set _int= for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int ( for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not [%%#]==[] set _int=1) ) if not defined _int ( %psc% "If([Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{DCB00C01-570F-4A9B-8D69-199FDBA5723B}')).IsConnectedToInternet){Exit 0}Else{Exit 1}" if !errorlevel!==0 (set _int=1&set ping_f= But Ping Failed) ) if defined _int ( echo Checking Internet Connection [Connected%ping_f%] ) else ( set error=1 call :dk_color %Red% "Checking Internet Connection [Not Connected]" call :dk_color %Blue% "Internet is required for HWID Activation." ) ::======================================================================================================================================== echo Initiating Diagnostic Tests... set "_serv=ClipSVC wlidsvc sppsvc KeyIso LicenseManager Winmgmt" :: Client License Service (ClipSVC) :: Microsoft Account Sign-in Assistant :: Software Protection :: CNG Key Isolation :: Windows License Manager Service :: Windows Management Instrumentation call :dk_errorcheck ::======================================================================================================================================== :: Detect Key set key= set pfn= set altkey= set changekey= set altapplist= set altedition= set notworking= call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f if defined allapps call :hwiddata key if not defined key ( for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':getactivationid\:.*';iex ($f[1])"') do (set altapplist=%%a) if defined altapplist call :hwiddata key ) 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 not defined key ( %eline% echo [%winos% ^| %winbuild% ^| SKU:%osSKU%] if not defined skunotfound ( echo This product does not support HWID Activation. echo Try KMS38 Activation option. echo Make sure you are using updated version of the script. set fixes=%fixes% %mas% echo %mas% ) else ( echo Required License files not found in %SysPath%\spp\tokens\skus\ set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) echo: goto dk_done ) call :hwiddata pfn if defined notworking set error=1 ::======================================================================================================================================== :: Install key echo: if defined changekey ( call :dk_color %Blue% "[%altedition%] Edition product key will be used to enable HWID activation." echo: ) if defined winsub ( call :dk_color %Blue% "Windows Subscription [SKU ID-%slcSKU%] found. Script will activate base edition [SKU ID-%regSKU%]." echo: ) call :dk_inskey "[%key%]" ::======================================================================================================================================== :: 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\%random%" 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%"=="0CC709275767E0AA7BD69236E364A45E66AAD9AB" ( 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%"=="0CC709275767E0AA7BD69236E364A45E66AAD9AB" ( call :dk_color %Red% "Creating Modified Gatherosstate [Failed] [Hash Not Matched] Aborting..." goto :dl_final ) else ( echo Creating Modified Gatherosstate [Successful] ) :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 if %winbuild% LEQ 10240 ( echo Cleaning ClipSVC Licences [Successful] ) else ( if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" ( call :dk_color %Red% "Cleaning ClipSVC Licences [Failed]" ) else ( echo Cleaning ClipSVC Licences [Successful] ) ) ) ::======================================================================================================================================== :: 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 ( reg query "%RegKey%" %nul% && %nul% call :regownstart reg delete "%RegKey%" /f %nul% reg query "%RegKey%" %nul% && ( call :dk_color %Red% "Deleting a Volatile Registry [Failed]" call :dk_color %Blue% "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. echo: set "_noxml=if not exist "%temp_%\GenuineTicket.xml"" "%temp_%/gatherosstatemodified.exe" Pfn=%pfn%;PKeyIID=465145217131314304264339481117862266242033457260311819664735280;DownlevelGenuineState=1 %_noxml% timeout /t 3 %nul% %_noxml% net stop sppsvc /y %nul% %_noxml% call "%temp_%/gatherosstatemodified.exe" Pfn=%pfn%;PKeyIID=465145217131314304264339481117862266242033457260311819664735280;DownlevelGenuineState=1 %_noxml% timeout /t 3 %nul% :: Refresh ClipSVC (required after cleanup) with below command, not related to generating tickets if %_lock%==1 ( for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 10 | Out-Null") 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" %nul1% && ( echo Generating GenuineTicket.xml [Successful] [clientLockboxKey Ticket Created] ) || ( call :dk_color %Red% "Generating GenuineTicket.xml [Failed] [%pfn%]" call :dk_color %Red% "downlevelGTkey Ticket created. Aborting..." goto :dl_final ) ) else ( echo Generating GenuineTicket.xml [Successful] ) ::======================================================================================================================================== :: Change Windows region to USA to avoid activation issues as Windows store license is not available in many countries for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Name %nul6%') do set "name=%%b" for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International\Geo" /v Nation %nul6%') do set "nation=%%b" set regionchange= if not "%name%"=="US" ( set regionchange=1 %psc% "Set-WinHomeLocation -GeoId 244" %nul% if !errorlevel! EQU 0 ( echo Changing Windows Region To USA [Successful] ) else ( call :dk_color %Red% "Changing Windows Region To USA [Failed]" ) ) ::========================================================================================================================================== :: Generate GenuineTicket.xml and apply :: In some cases clipup -v -o method fails and in some cases service restart method fails as well :: To maximize success rate and get better error details, script will install tickets two times (service restart + clipup -v -o) set "tdir=%ProgramData%\Microsoft\Windows\ClipSVC\GenuineTicket" if not exist "%tdir%\" md "%tdir%\" %nul% if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" del /f /q "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*" %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]" ) set "_xmlexist=if exist "%tdir%\GenuineTicket.xml"" %_xmlexist% ( %psc% "Start-Job { Restart-Service ClipSVC } | Wait-Job -Timeout 10 | Out-Null" %_xmlexist% timeout /t 2 %nul% %_xmlexist% timeout /t 2 %nul% %_xmlexist% ( set error=1 if exist "%tdir%\*.xml" del /f /q "%tdir%\*.xml" %nul% call :dk_color %Red% "Installing GenuineTicket.xml [Failed With ClipSVC Service Restart, Wait...]" ) ) clipup -v -o -altto %temp_%\ set rebuildinfo= if not exist %ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat ( set error=1 set rebuildinfo=1 call :dk_color %Red% "Checking ClipSVC tokens.dat [Not Found]" ) if exist %temp_%\GenuineTicket.xml ( set error=1 set rebuildinfo=1 call :dk_color %Red% "Installing GenuineTicket.xml [Failed With clipup -v -o]" ) if exist "%ProgramData%\Microsoft\Windows\ClipSVC\Install\Migration\*.xml" ( set error=1 set rebuildinfo=1 call :dk_color %Red% "Checking Ticket Migration [Failed]" ) if not defined altapplist if not defined showfix if defined rebuildinfo ( set showfix=1 call :dk_color %Blue% "%_fixmsg%" ) ::========================================================================================================================================== call :dk_product echo: echo Activating... call :dk_act call :dk_checkperm if defined _perm ( echo: call :dk_color %Green% "%winos% is permanently activated with a digital license." goto :dl_final ) ::========================================================================================================================================== :: Clear store ID related registry to fix activation if Internet is connected set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL" if defined _int ( reg delete "%_ident%" /f %nul% reg query "%_ident%" %nul% && ( echo: set error=1 call :dk_color %Red% "Deleting an IdentityCRL Registry [Failed] [%_ident%]" ) for %%# in (wlidsvc LicenseManager sppsvc) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 10 | Out-Null") call :dk_refresh call :dk_act call :dk_checkperm ) ::========================================================================================================================================== :: Extended licensing servers tests incase error not found and activation failed if %keyerror% EQU 0 if not defined _perm if defined _int ( set resfail= ipconfig /flushdns %nul% set "tls=[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;" for %%# in ( login.live.com/ppsecure/deviceaddcredential.srf purchase.mp.microsoft.com/v7.0/users/me/orders ) do if not defined resfail ( set "d1=Add-Type -AssemblyName System.Net.Http;" set "d1=!d1! $client = [System.Net.Http.HttpClient]::new();" set "d1=!d1! $response = $client.GetAsync('https://%%#').GetAwaiter().GetResult();" set "d1=!d1! $response.Content.ReadAsStringAsync().GetAwaiter().GetResult()" %psc% "!tls! !d1!" %nul2% | findstr /i "PurchaseFD DeviceAddResponse" %nul1% || set resfail=1 ) if not defined resfail ( %psc% "!tls! irm https://licensing.mp.microsoft.com/v7.0/licenses/content -Method POST" | find /i "traceId" %nul1% || set resfail=1 ) if defined resfail ( set error=1 echo: call :dk_color %Red% "Checking Licensing Servers [Failed To Connect]" set fixes=%fixes% %mas%licensing-servers-issue call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" ) ) ::========================================================================================================================================== if %keyerror% EQU 0 if not defined _perm if defined _int ( reg query "%_ident%" %nul% || ( set error=1 echo: call :dk_color %Red% "Generating New IdentityCRL Registry [Failed] [%_ident%]" ) reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DisableWindowsUpdateAccess %nul2% | find /i "0x1" %nul% && set wublock=1 reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v DoNotConnectToWindowsUpdateInternetLocations %nul2% | find /i "0x1" %nul% && set wublock=1 if defined wublock call :dk_color %Red% "Checking Update Blocker In Registry [Found]" reg query "HKLM\SOFTWARE\Policies\Microsoft\WindowsStore" /v DisableStoreApps %nul2% | find /i "0x1" %nul% && ( set storeblock=1 call :dk_color %Red% "Checking Store Blocker In Registry [Found]" ) for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type ServiceSidType RequiredPrivileges FailureActions) do if not defined wucorrupt ( reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv /v %%G %nul% || set wucorrupt=1 ) for %%G in (Parameters Security TriggerInfo) do if not defined wucorrupt ( reg query HKLM\SYSTEM\CurrentControlSet\Services\wuauserv\%%G %nul% || set wucorrupt=1 ) if defined wucorrupt ( call :dk_color %Red% "Checking Windows Update Registry [Corruption Found]" ) else ( %psc% "Start-Job { Start-Service wuauserv } | Wait-Job -Timeout 10 | Out-Null" sc query wuauserv | find /i "RUNNING" %nul% || ( set wuerror=1 sc start wuauserv %nul% call :dk_color %Red% "Starting Windows Update Service [Failed] [!errorlevel!]" ) ) REM Check Internet related error codes if not defined wucorrupt if not defined wublock if not defined wuerror if not defined storeblock ( echo "%error_code%" | findstr /i "0x80072e 0x80072f 0x800704cf 0x87e10bcf 0x800705b4" %nul% && ( call :dk_color %Red% "Checking Internet Issues [Found] %error_code%" set fixes=%fixes% %mas%licensing-servers-issue call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%licensing-servers-issue" ) ) ) ::========================================================================================================================================== echo: if defined _perm ( call :dk_color %Green% "%winos% is permanently activated with a digital license." ) else ( call :dk_color %Red% "Activation Failed %error_code%" if defined notworking ( call :dk_color %Blue% "At the time of writing this, HWID Activation was not supported for this product." call :dk_color %Blue% "Use KMS38 Activation option." ) else ( if not defined error call :dk_color %Blue% "%_fixmsg%" set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) ) ::======================================================================================================================================== :dl_final echo: if exist "%temp_%\.*" rmdir /s /q "%temp_%\" %nul% if exist "%temp_%\" ( call :dk_color %Red% "Cleaning Temp Files [Failed]" ) else ( echo Cleaning Temp Files [Successful] ) if defined regionchange ( %psc% "Set-WinHomeLocation -GeoId %nation%" %nul% if !errorlevel! EQU 0 ( echo Restoring Windows Region [Successful] ) else ( call :dk_color %Red% "Restoring Windows Region [Failed] [%name% - %nation%]" ) ) REM if %osSKU%==175 call :dk_color %Red% "%winos% does not support activation on non-azure platforms." :: Trigger reevaluation of SPP's Scheduled Tasks if defined _perm ( call :dk_reeval %nul% ) goto :dk_done ::======================================================================================================================================== :regownstart %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':regown\:.*';iex ($f[1]);" exit /b :: Below code takes ownership of a volatile registry key and deletes it :: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState :regown: $AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1) $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False) $TypeBuilder = $ModuleBuilder.DefineType(0) $TypeBuilder.DefinePInvokeMethod('RtlAdjustPrivilege', 'ntdll.dll', 'Public, Static', 1, [int], @([int], [bool], [bool], [bool].MakeByRefType()), 1, 3) | Out-Null $TypeBuilder.CreateType()::RtlAdjustPrivilege(9, $true, $false, [ref]$false) | Out-Null $SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544') $IDN = ($SID.Translate([System.Security.Principal.NTAccount])).Value $Admin = New-Object System.Security.Principal.NTAccount($IDN) $path = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState' $key = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey($path, 'ReadWriteSubTree', 'takeownership') $acl = $key.GetAccessControl() $acl.SetOwner($Admin) $key.SetAccessControl($acl) $rule = New-Object System.Security.AccessControl.RegistryAccessRule($Admin,"FullControl","Allow") $acl.SetAccessRule($rule) $key.SetAccessControl($acl) :regown: ::======================================================================================================================================== :: Set variables :dk_setvar set psc=powershell.exe set winbuild=1 for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G set _NCS=1 if %winbuild% LSS 10586 set _NCS=0 if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0) if %_NCS% EQU 1 ( for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a" set "Red="41;97m"" set "Gray="100;97m"" set "Green="42;97m"" set "Blue="44;97m"" set "_Red="40;91m"" set "_White="40;37m"" set "_Green="40;92m"" set "_Yellow="40;93m"" ) else ( set "Red="Red" "white"" set "Gray="Darkgray" "white"" set "Green="DarkGreen" "white"" set "Blue="Blue" "white"" set "_Red="Black" "Red"" set "_White="Black" "Gray"" set "_Green="Black" "Green"" set "_Yellow="Black" "Yellow"" ) set "nceline=echo: &echo ==== ERROR ==== &echo:" set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:" if %~z0 GEQ 200000 ( set "_exitmsg=Go back" set "_fixmsg=Go back to Main Menu, select Troubleshoot and run Fix Licensing option." ) else ( set "_exitmsg=Exit" set "_fixmsg=In MAS folder, run Troubleshoot script and select Fix Licensing option." ) exit /b :: Show OS info :dk_showosinfo for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE') do set osarch=%%b for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if not "%%j"=="" ( set fullbuild=%%i.%%j ) else ( for /f "tokens=3" %%G in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR" %nul6%') do if not errorlevel 1 set /a "UBR=%%G" for /f "skip=2 tokens=3,4 delims=. " %%G in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx') do ( if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H") ) ) echo Checking OS Info [%winos% ^| %fullbuild% ^| %osarch%] exit /b :: Check SKU value :dk_checksku call :dk_reflection set osSKU= set slcSKU= set wmiSKU= set regSKU= set winsub= if %winbuild% GEQ 14393 (set info=Kernel-BrandingInfo) else (set info=Kernel-ProductInfo) set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SLGetWindowsInformationDWORD', 'slc.dll', 'Public, Static', 1, [int], @([String], [int].MakeByRefType()), 1, 3); set d1=%d1% $Sku = 0; [void]$TypeBuilder.CreateType()::SLGetWindowsInformationDWORD('%info%', [ref]$Sku); $Sku for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set slcSKU=%%s) set slcSKU=%slcSKU: =% if "%slcSKU%"=="0" set slcSKU= for /f "tokens=* delims=0123456789" %%a in ("%slcSKU%") do (if not "[%%a]"=="[]" set slcSKU=) for /f "tokens=3 delims=." %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v OSProductPfn %nul6%') do set "regSKU=%%a" if %_wmic% EQU 1 for /f "tokens=2 delims==" %%a in ('"wmic Path Win32_OperatingSystem Get OperatingSystemSKU /format:LIST" %nul6%') do if not errorlevel 1 set "wmiSKU=%%a" if %_wmic% EQU 0 for /f "tokens=1" %%a in ('%psc% "([WMI]'Win32_OperatingSystem=@').OperatingSystemSKU" %nul6%') do if not errorlevel 1 set "wmiSKU=%%a" if %winbuild% GEQ 15063 %psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':winsubstatus\:.*';iex ($f[1])" %nul2% | find /i "Subscription_is_activated" %nul% && ( if defined regSKU if defined slcSKU if not "%regSKU%"=="%slcSKU%" ( set winsub=1 set osSKU=%regSKU% ) ) if not defined osSKU set osSKU=%slcSKU% if not defined osSKU set osSKU=%wmiSKU% if not defined osSKU set osSKU=%regSKU% exit /b :: Get Windows Subscription status :winsubstatus: $DM = [AppDomain]::CurrentDomain.DefineDynamicAssembly(6, 1).DefineDynamicModule(4).DefineType(2) [void]$DM.DefinePInvokeMethod('ClipGetSubscriptionStatus', 'Clipc.dll', 22, 1, [Int32], @([IntPtr].MakeByRefType()), 1, 3).SetImplementationFlags(128) $m = [System.Runtime.InteropServices.Marshal] $p = $m::AllocHGlobal(12) $r = $DM.CreateType()::ClipGetSubscriptionStatus([ref]$p) if ($r -eq 0) { $enabled = $m::ReadInt32($p) if ($enabled -ge 1) { $state = $m::ReadInt32($p, 8) if ($state -eq 1) { "Subscription_is_activated." } } } :winsubstatus: :: Get Windows permanent activation status :dk_checkperm if %_wmic% EQU 1 wmic path %spp% where (LicenseStatus='1' and GracePeriodRemaining='0' and PartialProductKey is not NULL AND LicenseDependsOn is NULL) get Name /value %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= if %_wmic% EQU 0 %psc% "(([WMISEARCHER]'SELECT Name FROM %spp% WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).Name | %% {echo ('Name='+$_)}" %nul2% | findstr /i "Windows" %nul1% && set _perm=1||set _perm= exit /b :: Refresh license status :dk_refresh if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call RefreshLicenseStatus %nul% if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'%sps%').GetInstances()).RefreshLicenseStatus()" %nul% exit /b :: Install Key :dk_inskey if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call InstallProductKey ProductKey="%key%" %nul% if %_wmic% EQU 0 %psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul% set keyerror=%errorlevel% cmd /c exit /b %keyerror% if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" if %keyerror% EQU 0 ( if %sps%==SoftwareLicensingService call :dk_refresh echo Installing Generic Product Key %~1 [Successful] ) else ( call :dk_color %Red% "Installing Generic Product Key %~1 [Failed] %keyerror%" if not defined error ( if defined altapplist call :dk_color %Red% "Activation ID not found for this key." call :dk_color %Blue% "%_fixmsg%" set showfix=1 ) set error=1 ) exit /b :: Activation command :dk_act set error_code= if %_wmic% EQU 1 wmic path %spp% where "ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL" call Activate %nul% if %_wmic% EQU 0 %psc% "try {$null=(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).Activate(); exit 0} catch { exit $_.Exception.InnerException.HResult }" %nul% set error_code=%errorlevel% cmd /c exit /b %error_code% if %error_code% NEQ 0 (set "error_code=[Error Code: 0x%=ExitCode%]") else (set error_code=) exit /b :: Get all products Activation IDs :dk_actids set allapps= if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1') get ID /VALUE" %nul6%')" if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" %chkapp% do (if defined allapps (call set "allapps=!allapps! %%a") else (call set "allapps=%%a")) exit /b :: Get installed products Activation IDs :dk_actid set apps= if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1' and PartialProductKey is not null) get ID /VALUE" %nul6%')" if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1'' AND PartialProductKey IS NOT NULL').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')" %chkapp% do (if defined apps (call set "apps=!apps! %%a") else (call set "apps=%%a")) exit /b :: Trigger reevaluation, it helps in updating SPP tasks :dk_reeval :: This key is left by the system in rearm process and sppsvc sometimes fails to delete it, it causes issues in working of the Scheduled Tasks of SPP set "ruleskey=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedSystemState" reg delete "%ruleskey%" /v "State" /f %nul% reg delete "%ruleskey%" /v "SuppressRulesEngine" /f %nul% set r1=$TB = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1).DefineDynamicModule(2, $False).DefineType(0); set r2=%r1% [void]$TB.DefinePInvokeMethod('SLpTriggerServiceWorker', 'sppc.dll', 22, 1, [Int32], @([UInt32], [IntPtr], [String], [UInt32]), 1, 3); set d1=%r2% [void]$TB.CreateType()::SLpTriggerServiceWorker(0, 0, 'reeval', 0) %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; %d1%" exit /b :: Get Activation IDs from licensing files if not found through WMI :getactivationid: $folderPath = "$env:SysPath\spp\tokens\skus" $files = Get-ChildItem -Path $folderPath -Recurse -Filter "*.xrm-ms" $guids = @() foreach ($file in $files) { $content = Get-Content -Path $file.FullName -Raw $matches = [regex]::Matches($content, 'name="productSkuId">\{([0-9a-fA-F\-]+)\}') foreach ($match in $matches) { $guids += $match.Groups[1].Value } } $guids = $guids | Select-Object -Unique $guidsString = $guids -join " " $guidsString :getactivationid: :: Install License files using Powershell/WMI instead of slmgr.vbs :xrm: function InstallLicenseFile($Lsc) { try { $null = $sls.InstallLicense([IO.File]::ReadAllText($Lsc)) } catch { $host.SetShouldExit($_.Exception.HResult) } } function InstallLicenseArr($Str) { $a = $Str -split ';' ForEach ($x in $a) {InstallLicenseFile "$x"} } function InstallLicenseDir($Loc) { dir $Loc *.xrm-ms -af -s | select -expand FullName | % {InstallLicenseFile "$_"} } function ReinstallLicenses() { $Oem = "$env:SysPath\oem" $Spp = "$env:SysPath\spp\tokens" InstallLicenseDir "$Spp" If (Test-Path $Oem) {InstallLicenseDir "$Oem"} } :xrm: :: Check wmic.exe :dk_ckeckwmic set _wmic=0 for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" ( wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% && set _wmic=1 ) exit /b :: Show info for potential script stuck scenario :dk_sppissue sc start sppsvc %nul% set spperror=%errorlevel% if %spperror% NEQ 1056 if %spperror% NEQ 0 ( %eline% echo sc start sppsvc [Error Code: %spperror%] ) echo: %psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 20)) {write-host 'sppsvc is not working correctly. Help - %mas%troubleshoot'}" exit /b :: Get Product name (WMI/REG methods are not reliable in all conditions, hence winbrand.dll method is used) :dk_product set d1=%ref% $meth = $TypeBuilder.DefinePInvokeMethod('BrandingFormatString', 'winbrand.dll', 'Public, Static', 1, [String], @([String]), 1, 3); set d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) echo "%winos%" | find /i "Windows" %nul1% || ( for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName %nul6%') do set "winos=%%b" if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) if not defined winsub exit /b :: Check base edition product name if Windows subscription license is found for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('GetEditionNameFromId', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([int], [IntPtr].MakeByRefType()), 1, 3); set d1=%d1% $out = 0; [void]$TypeBuilder.CreateType()::GetEditionNameFromId(%regSKU%, [ref]$out);$s=[Runtime.InteropServices.Marshal]::PtrToStringUni($out); $s for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 ( if %winbuild% GEQ 22000 ( set winos=Windows 11 %%a ) else ( set winos=Windows 10 %%a ) ) exit /b :: Common lines used in PowerShell reflection code :dk_reflection set ref=$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1); set ref=%ref% $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False); set ref=%ref% $TypeBuilder = $ModuleBuilder.DefineType(0); exit /b ::======================================================================================================================================== :dk_chkmal :: Many users unknowingly download mal-ware by using activators found through Google search. :: This code aims to notify users that their system has been affected by mal-ware. set w= set results= if exist "%ProgramFiles%\KM%w%Spico" set pupfound1= KM%w%Spico if exist "%SysPath%\Tasks\R@1n-KMS" set pupfound2= R@inKMS reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "AutoPico" %nul% && set pupfound1= KM%w%Spico reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\taskcache\tasks" /f Path /s | find /i "R@1n" %nul% && set pupfound2= R@inKMS set pupfound=%pupfound1%%pupfound2% set hcount=0 for %%# in (avira.com kaspersky.com virustotal.com mcafee.com) do ( find /i "%%#" %SysPath%\drivers\etc\hosts %nul% && set /a hcount+=1) if %hcount%==4 set "results=[AV URLs are blocked in hosts]" set wucount=0 for %%# in (wuauserv) do ( set _corrupt= for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt ( reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || (set _corrupt=1 & set /a wucount+=1) ) ) if %wucount% GEQ 1 set "results=%results%[WU registry is corrupt]" sc start sppsvc %nul% echo "%errorlevel%" | findstr "577 225" %nul% && set "results=%results%[Likely File Infector]" if not "%results%%pupfound%"=="" ( if defined pupfound call :dk_color %Gray% "Checking PUP Activators [Found%pupfound%]" if defined results call :dk_color %Red% "Checking Probable Mal%w%ware Infection %results%" set fixes=%fixes% %mas%remove_mal%w%ware call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%remove_mal%w%ware" echo: ) exit /b ::======================================================================================================================================== :dk_errorcheck set showfix= call :dk_chkmal :: Check Sandboxing sc query Null %nul% || ( set error=1 set showfix=1 call :dk_color %Red% "Checking Sandboxing [Found. Script may not work properly.]" call :dk_color %Blue% "If you are using any third-party antivirus, check if it is blocking the script." echo: ) ::======================================================================================================================================== :: Check corrupt services set serv_cor= for %%# in (%_serv%) do ( set _corrupt= sc start %%# %nul% if !errorlevel! EQU 1060 set _corrupt=1 sc query %%# %nul% || set _corrupt=1 for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt ( reg query HKLM\SYSTEM\CurrentControlSet\Services\%%# /v %%G %nul% || set _corrupt=1 ) if defined _corrupt (if defined serv_cor (set "serv_cor=!serv_cor! %%#") else (set "serv_cor=%%#")) ) if defined serv_cor ( set error=1 set showfix=1 call :dk_color %Red% "Checking Corrupt Services [%serv_cor%]" ) ::======================================================================================================================================== :: Check disabled services set serv_ste= for %%# in (%_serv%) do ( sc start %%# %nul% if !errorlevel! EQU 1058 (if defined serv_ste (set "serv_ste=!serv_ste! %%#") else (set "serv_ste=%%#")) ) :: Change disabled services startup type to default set serv_csts= set serv_cste= 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 %%#==KeyIso sc config %%# start= demand %nul% if /i %%#==LicenseManager sc config %%# start= demand %nul% if /i %%#==Winmgmt sc config %%# start= auto %nul% if !errorlevel!==0 ( if defined serv_csts (set "serv_csts=!serv_csts! %%#") else (set "serv_csts=%%#") ) else ( if defined serv_cste (set "serv_cste=!serv_cste! %%#") else (set "serv_cste=%%#") ) ) ) if defined serv_csts call :dk_color %Gray% "Enabling Disabled Services [Successful] [%serv_csts%]" if defined serv_cste ( set error=1 call :dk_color %Red% "Enabling Disabled Services [Failed] [%serv_cste%]" ) ::======================================================================================================================================== :: 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 set serv_e= for %%# in (%_serv%) do ( set errorcode= set checkerror= sc query %%# | find /i "RUNNING" %nul% || ( %psc% "Start-Job { Start-Service %%# } | Wait-Job -Timeout 10 | Out-Null" set errorcode=!errorlevel! sc query %%# | find /i "RUNNING" %nul% || set checkerror=1 ) sc start %%# %nul% if !errorlevel! NEQ 1056 if !errorlevel! NEQ 0 (set errorcode=!errorlevel!&set checkerror=1) if defined checkerror if defined serv_e (set "serv_e=!serv_e!, %%#-!errorcode!") else (set "serv_e=%%#-!errorcode!") ) if defined serv_e ( set error=1 call :dk_color %Red% "Starting Services [Failed] [%serv_e%]" echo %serv_e% | findstr /i "ClipSVC-1058 sppsvc-1058" %nul% && ( call :dk_color %Blue% "Restart the system to fix this error." set showfix=1 ) ) ::======================================================================================================================================== :: Various error checks if defined safeboot_option ( set error=1 set showfix=1 call :dk_color2 %Red% "Checking Boot Mode [%safeboot_option%] " %Blue% "[Safe mode found. Run in normal mode.]" ) for /f "skip=2 tokens=2*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State" /v ImageState') do (set imagestate=%%B) if /i not "%imagestate%"=="IMAGE_STATE_COMPLETE" ( set error=1 call :dk_color %Red% "Checking Windows Setup State [%imagestate%]" echo "%imagestate%" | find /i "RESEAL" %nul% && ( set showfix=1 call :dk_color %Blue% "You need to run it in normal mode in case you are running it in Audit Mode." ) ) reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinPE" /v InstRoot %nul% && ( set error=1 set showfix=1 call :dk_color2 %Red% "Checking WinPE " %Blue% "[WinPE mode found. Run in normal mode.]" ) set wpainfo= set wpaerror= for /f "delims=" %%a in ('%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':wpatest\:.*';iex ($f[1])" %nul6%') do (set wpainfo=%%a) echo "%wpainfo%" | find /i "Error Found" %nul% && ( set error=1 set wpaerror=1 call :dk_color %Red% "Checking WPA Registry Error [%wpainfo%]" ) || ( echo Checking WPA Registry Count [%wpainfo%] ) if not defined officeact if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul2% | find /i "Eval" %nul1% || ( set error=1 call :dk_color %Red% "Checking Eval Packages [Non-Eval Licenses are installed in Eval Windows]" set fixes=%fixes% %mas%evaluation_editions call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%evaluation_editions" ) ) set osedition=0 for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "osedition=%%a" :: Workaround for an issue in builds between 1607 and 1709 where ProfessionalEducation is shown as Professional if not %osedition%==0 ( if "%osSKU%"=="164" set osedition=ProfessionalEducation if "%osSKU%"=="165" set osedition=ProfessionalEducationN ) if not defined officeact ( if %osedition%==0 ( call :dk_color %Red% "Checking Edition Name [Not Found In Registry]" ) else ( if not exist "%SysPath%\spp\tokens\skus\%osedition%\%osedition%*.xrm-ms" if not exist "%SysPath%\spp\tokens\skus\Security-SPP-Component-SKU-%osedition%\*-%osedition%-*.xrm-ms" ( set error=1 set skunotfound=1 call :dk_color %Red% "Checking License Files [Not Found] [%osedition%]" ) if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*-%osedition%-*.mum" ( set error=1 call :dk_color %Red% "Checking Package File [Not Found] [%osedition%]" ) ) ) %psc% "try { $null=([WMISEARCHER]'SELECT * FROM %sps%').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %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 SoftwareLicensingService [Not Working] %error_code%" ) set wmifailed= if %_wmic% EQU 1 wmic path Win32_ComputerSystem get CreationClassName /value %nul2% | find /i "computersystem" %nul1% if %_wmic% EQU 0 %psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %nul2% | find /i "computersystem" %nul1% if %errorlevel% NEQ 0 set wmifailed=1 echo "%error_code%" | findstr /i "0x800410 0x800440" %nul1% && set wmifailed=1& :: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants if defined wmifailed ( set error=1 call :dk_color %Red% "Checking WMI [Not Working]" if not defined showfix call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WMI option." set showfix=1 ) if not defined officeact ( if %winbuild% GEQ 10240 ( %nul% set /a "sum=%slcSKU%+%regSKU%+%wmiSKU%" set /a "sum/=3" if not "!sum!"=="%slcSKU%" ( call :dk_color %Gray% "Checking SLC/WMI/REG SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU% Reg:%regSKU%]" ) ) else ( %nul% set /a "sum=%slcSKU%+%wmiSKU%" set /a "sum/=2" if not "!sum!"=="%slcSKU%" ( call :dk_color %Gray% "Checking SLC/WMI SKU [Difference Found - SLC:%slcSKU% WMI:%wmiSKU%]" ) ) ) reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\PersistedTSReArmed" %nul% && ( set error=1 set showfix=1 call :dk_color2 %Red% "Checking Rearm " %Blue% "[System Restart Is Required]" ) reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState" %nul% && ( set error=1 set showfix=1 call :dk_color2 %Red% "Checking ClipSVC " %Blue% "[System Restart Is Required]" ) :: This "WLMS" service was included in previous Eval editions (which were activable) to automatically shut down the system every hour after the evaluation period expired and prevent SPPSVC from stopping. if exist "%SysPath%\wlms\wlms.exe" ( sc query wlms | find /i "RUNNING" %nul% && ( echo Checking Eval WLMS Service [Found] ) ) reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% || ( set error=1 call :dk_color %Red% "Checking HKU\S-1-5-20 Reg [Not Found]" set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) for %%# in (SppEx%w%tComObj.exe sppsvc.exe) do ( reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (if defined _sppint (set "_sppint=!_sppint!, %%#") else (set "_sppint=%%#")) ) if defined _sppint ( echo Checking SPP Interference In IFEO [%_sppint%] ) for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "SkipRearm" %nul6%') 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]" %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null" set error=1 ) reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Plugins\Objects\msft:rm/algorithm/hwid/4.0" /f ba02fed39662 /d %nul% || ( call :dk_color %Red% "Checking SPP Registry Key [Incorrect ModuleId Found]" set fixes=%fixes% %mas%issues_due_to_gaming_spoofers call :dk_color2 %Blue% "Possibly Caused By Gaming Spoofers. Help - " %_Yellow% " %mas%issues_due_to_gaming_spoofers" set error=1 set showfix=1 ) set tokenstore= for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b" if %winbuild% LSS 9200 set "tokenstore=%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform" if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" ( set toerr=1 set error=1 set showfix=1 call :dk_color %Red% "Checking TokenStore Registry Key [Correct Path Not Found] [%tokenstore%]" set fixes=%fixes% %mas%troubleshoot call :dk_color2 %Blue% "Help - " %_Yellow% " %mas%troubleshoot" ) :: This code creates token folder only if it's missing and sets default permission for it if not defined toerr if not exist "%tokenstore%\" ( mkdir "%tokenstore%" %nul% if %winbuild% LSS 9200 set "d=$sddl = 'O:NSG:NSD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;NS)';" if %winbuild% GEQ 9200 set "d=$sddl = 'O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICIIO;GR;;;BU)(A;;FR;;;BU)(A;OICI;FA;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)';" set "d=!d! $AclObject = New-Object System.Security.AccessControl.DirectorySecurity;" set "d=!d! $AclObject.SetSecurityDescriptorSddlForm($sddl);" set "d=!d! Set-Acl -Path %tokenstore% -AclObject $AclObject;" %psc% "!d!" %nul% if exist "%tokenstore%\" ( call :dk_color %Gray% "Checking SPP Token Folder [Not Found. Created Now] [%tokenstore%\]" ) else ( call :dk_color %Red% "Checking SPP Token Folder [Not Found. Failed To Create] [%tokenstore%\]" set error=1 set showfix=1 ) ) call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( %psc% "Start-Job { Stop-Service sppsvc -force } | Wait-Job -Timeout 10 | Out-Null; $sls = Get-WmiObject SoftwareLicensingService; $f=[io.file]::ReadAllText('!_batp!') -split ':xrm\:.*';iex ($f[1]); ReinstallLicenses" %nul% call :dk_actid 55c92734-d682-4d71-983e-d6ec3f16059f if not defined apps ( set "_notfoundids=Key Not Installed / Act ID Not Found" call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f if not defined allapps ( set "_notfoundids=Not found" ) set error=1 call :dk_color %Red% "Checking Activation IDs [!_notfoundids!]" ) ) if exist "%tokenstore%\" if not exist "%tokenstore%\tokens.dat" ( set error=1 call :dk_color %Red% "Checking SPP tokens.dat [Not Found] [%tokenstore%\]" ) if %winbuild% GEQ 9200 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-*EvalEdition~*.mum" ( for /f "delims=" %%a in ('%psc% "(Get-ScheduledTask -TaskName 'SvcRestartTask' -TaskPath '\Microsoft\Windows\SoftwareProtectionPlatform\').State" %nul6%') do (set taskinfo=%%a) echo !taskinfo! | find /i "Ready" %nul% || ( reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f %nul% reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" %nul% || set taskinfo=Removed call :dk_color %Red% "Checking SvcRestartTask Status [!taskinfo!]" ) ) :: This code checks if SPP has permission access to tokens folder and required registry keys. It's often caused by gaming spoofers. set permerror= if %winbuild% GEQ 9200 ( for %%# in ( "%tokenstore%+FullControl" "HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey" "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform+SetValue" ) do for /f "tokens=1,2 delims=+" %%A in (%%#) do if not defined permerror ( %psc% "$acl = (Get-Acl '%%A' | fl | Out-String); if (-not ($acl -match 'NT SERVICE\\sppsvc Allow %%B') -or ($acl -match 'NT SERVICE\\sppsvc Deny')) {Exit 2}" %nul% if !errorlevel!==2 set permerror=Error_Found ) REM https://learn.microsoft.com/office/troubleshoot/activation/license-issue-when-start-office-application if not defined permerror ( reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% && ( set "pol=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies" reg query "!pol!" %nul% || reg add "!pol!" %nul% %psc% "$netServ = (New-Object Security.Principal.SecurityIdentifier('S-1-5-20')).Translate([Security.Principal.NTAccount]).Value; $aclString = Get-Acl 'Registry::!pol!' | Format-List | Out-String; if (-not ($aclString.Contains($netServ + ' Allow FullControl') -or $aclString.Contains('NT SERVICE\sppsvc Allow FullControl')) -or ($aclString.Contains('Deny'))) {Exit 3}" %nul% if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP" ) ) if defined permerror ( set error=1 call :dk_color %Red% "Checking SPP Permissions [!permerror!]" if not defined showfix call :dk_color %Blue% "%_fixmsg%" set showfix=1 ) ) :: If required services are not disabled or corrupted + if there is any error + SoftwareLicensingService errorlevel is not Zero + no fix was shown before if not defined serv_cor if not defined serv_cste if defined error if /i not %error_code%==0 if not defined showfix ( if not defined permerror if defined wpaerror (call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run Fix WPA Registry option." & set showfix=1) if not defined showfix ( set showfix=1 call :dk_color %Blue% "%_fixmsg%" if not defined permerror call :dk_color %Blue% "If activation still fails then run Fix WPA Registry option." ) ) if not defined showfix if defined wpaerror ( set showfix=1 call :dk_color %Blue% "If activation fails then go back to Main Menu, select Troubleshoot and run Fix WPA Registry option." ) exit /b :: This code checks for invalid registry keys in HKLM\SYSTEM\WPA. This issue may appear even on healthy systems :wpatest: $wpaKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $env:COMPUTERNAME).OpenSubKey("SYSTEM\\WPA") $count = 0 foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { if ($subkeyName -match '.*-.*-.*-.*-.*-') { $count++ } } $osVersion = [System.Environment]::OSVersion.Version $minBuildNumber = 14393 if ($osVersion.Build -ge $minBuildNumber) { $subkeyHashTable = @{} foreach ($subkeyName in $wpaKey.GetSubKeyNames()) { if ($subkeyName -match '.*-.*-.*-.*-.*-') { $keyNumber = $subkeyName -replace '.*-', '' $subkeyHashTable[$keyNumber] = $true } } for ($i=1; $i -le $count; $i++) { if (-not $subkeyHashTable.ContainsKey("$i")) { Write-Output "Total Keys $count. Error Found- $i key does not exist" $wpaKey.Close() exit } } } $wpaKey.GetSubKeyNames() | ForEach-Object { if ($_ -match '.*-.*-.*-.*-.*-') { if ($PSVersionTable.PSVersion.Major -lt 3) { cmd /c "reg query "HKLM\SYSTEM\WPA\$_" /ve /t REG_BINARY >nul 2>&1" if ($LASTEXITCODE -ne 0) { Write-Host "Total Keys $count. Error Found- Binary Data is corrupt" $wpaKey.Close() exit } } else { $subkey = $wpaKey.OpenSubKey($_) $p = $subkey.GetValueNames() if (($p | Where-Object { $subkey.GetValueKind($_) -eq [Microsoft.Win32.RegistryValueKind]::Binary }).Count -eq 0) { Write-Host "Total Keys $count. Error Found- Binary Data is corrupt" $wpaKey.Close() exit } } } } $count $wpaKey.Close() :wpatest: ::======================================================================================================================================== :dk_color if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[0m ) else ( %psc% write-host -back '%1' -fore '%2' '%3' ) exit /b :dk_color2 if %_NCS% EQU 1 ( echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m ) else ( %psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6' ) exit /b ::======================================================================================================================================== :dk_done echo: if %_unattended%==1 timeout /t 2 & exit /b if defined fixes ( call :dk_color2 %Blue% "Press [1] To Open Troubleshoot Page " %Gray% " Press [0] To Ignore" choice /C:10 /N if !errorlevel!==1 (for %%# in (%fixes%) do (start %%#)) ) if defined terminal ( call :dk_color %_Yellow% "Press 0 key to %_exitmsg%..." choice /c 0 /n ) else ( call :dk_color %_Yellow% "Press any key to %_exitmsg%..." pause %nul1% ) exit /b ::======================================================================================================================================== :: 1st column = Activation ID :: 2nd column = Generic Retail/OEM/MAK Key :: 3rd column = SKU ID :: 4th column = Key part number :: 5th column = 1 = activation is not working (at the time of writing this), 0 = activation is working :: 6th column = Key Type :: 7th column = WMI Edition ID (For reference only) :: 8th column = Version name incase same Edition ID is used in different OS versions with different key :: Separator = _ :hwiddata set f= for %%# in ( 8b351c9c-f398-4515-9900-09df49427262_XGVPP-NMH47-7TTHJ-W3FW7-8HV2C___4_X19-99683_0_OEM:NONSLP_Enterprise c83cef07-6b72-4bbc-a28f-a00386872839_3V6Q6-NQXCX-V8YXR-9QCYV-QPFCT__27_X19-98746_0_Volume:MAK_EnterpriseN 4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T__48_X19-98841_0_____Retail_Professional 9fbaf5d6-4d83-4422-870d-fdda6e5858aa_2B87N-8KFHP-DKV6R-Y2C8J-PKCKT__49_X19-98859_0_____Retail_ProfessionalN f742e4ff-909d-4fe9-aacb-3231d24a0c58_4CPRK-NM3K3-X6XXQ-RXX86-WXCHW__98_X19-98877_0_____Retail_CoreN 1d1bac85-7365-4fea-949a-96978ec91ae0_N2434-X9D7W-8PF6X-8DV9T-8TYMD__99_X19-99652_0_____Retail_CoreCountrySpecific 3ae2cc14-ab2d-41f4-972f-5e20142771dc_BT79Q-G7N6G-PGBYW-4YWX6-6F4BT_100_X19-99661_0_____Retail_CoreSingleLanguage 2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8_YTMG3-N6DKC-DKB77-7M9GH-8HVX7_101_X19-98868_0_____Retail_Core 2a6137f3-75c0-4f26-8e3e-d83d802865a4_XKCNC-J26Q9-KFHD2-FKTHY-KD72Y_119_X19-99606_0_OEM:NONSLP_PPIPro e558417a-5123-4f6f-91e7-385c1c7ca9d4_YNMGQ-8RYV3-4PGQ3-C8XTP-7CFBY_121_X19-98886_0_____Retail_Education c5198a66-e435-4432-89cf-ec777c9d0352_84NGF-MHBT6-FXBX8-QWJK7-DRR8H_122_X19-98892_0_____Retail_EducationN f6e29426-a256-4316-88bf-cc5b0f95ec0c_PJB47-8PN2T-MCGDY-JTY3D-CBCPV_125_X23-50331_1_Volume:MAK_EnterpriseS_Ge cce9d2de-98ee-4ce2-8113-222620c64a27_KCNVH-YKWX8-GJJB9-H9FDT-6F7W2_125_X22-66075_1_Volume:MAK_EnterpriseS_VB d06934ee-5448-4fd1-964a-cd077618aa06_43TBQ-NH92J-XKTM7-KT3KK-P39PB_125_X21-83233_0_OEM:NONSLP_EnterpriseS_RS5 706e0cfd-23f4-43bb-a9af-1a492b9f1302_NK96Y-D9CD8-W44CQ-R8YTK-DYJWX_125_X21-05035_0_OEM:NONSLP_EnterpriseS_RS1 faa57748-75c8-40a2-b851-71ce92aa8b45_FWN7H-PF93Q-4GGP8-M8RF3-MDWWW_125_X19-99617_0_OEM:NONSLP_EnterpriseS_TH 3d1022d8-969f-4222-b54b-327f5a5af4c9_2DBW3-N2PJG-MVHW3-G7TDK-9HKR4_126_X21-04921_0_Volume:MAK_EnterpriseSN_RS1 60c243e1-f90b-4a1b-ba89-387294948fb6_NTX6B-BRYC2-K6786-F6MVQ-M7V2X_126_X19-98770_0_Volume:MAK_EnterpriseSN_TH 01eb852c-424d-4060-94b8-c10d799d7364_3XP6D-CRND4-DRYM2-GM84D-4GG8Y_139_X23-37869_1_____Retail_ProfessionalCountrySpecific_Zn eb6d346f-1c60-4643-b960-40ec31596c45_DXG7C-N36C4-C4HTG-X4T3X-2YV77_161_X21-43626_0_____Retail_ProfessionalWorkstation 89e87510-ba92-45f6-8329-3afa905e3e83_WYPNQ-8C467-V2W6J-TX4WX-WT2RQ_162_X21-43644_0_____Retail_ProfessionalWorkstationN 62f0c100-9c53-4e02-b886-a3528ddfe7f6_8PTT6-RNW4C-6V7J2-C2D3X-MHBPB_164_X21-04955_0_____Retail_ProfessionalEducation 13a38698-4a49-4b9e-8e83-98fe51110953_GJTYN-HDMQY-FRR76-HVGC7-QPF8P_165_X21-04956_0_____Retail_ProfessionalEducationN df96023b-dcd9-4be2-afa0-c6c871159ebe_NJCF7-PW8QT-3324D-688JX-2YV66_175_X21-41295_0_____Retail_ServerRdsh d4ef7282-3d2c-4cf0-9976-8854e64a8d1e_V3WVW-N2PV2-CGWC3-34QGF-VMJ2C_178_X21-32983_0_____Retail_Cloud af5c9381-9240-417d-8d35-eb40cd03e484_NH9J3-68WK7-6FB93-4K3DF-DJ4F6_179_X21-32987_0_____Retail_CloudN 8ab9bdd1-1f67-4997-82d9-8878520837d9_XQQYW-NFFMW-XJPBH-K8732-CKFFD_188_X21-99378_0_____OEM:DM_IoTEnterprise ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_191_X21-99682_0_OEM:NONSLP_IoTEnterpriseS_VB 6c4de1b8-24bb-4c17-9a77-7b939414c298_CGK42-GYN6Y-VD22B-BX98W-J8JXD_191_X23-12617_0_OEM:NONSLP_IoTEnterpriseS_Ge d4bdc678-0a4b-4a32-a5b3-aaa24c3b0f24_K9VKN-3BGWV-Y624W-MCRMQ-BHDCD_202_X22-53884_0_____Retail_CloudEditionN 92fb8726-92a8-4ffc-94ce-f82e07444653_KY7PN-VR6RX-83W6Y-6DDYQ-T6R4W_203_X22-53847_0_____Retail_CloudEdition 5a85300a-bfce-474f-ac07-a30983e3fb90_N979K-XWD77-YW3GB-HBGH6-D32MH_205_X23-15042_0_____OEM:DM_IoTEnterpriseSK 80083eae-7031-4394-9e88-4901973d56fe_P8Q7T-WNK7X-PMFXY-VXHBG-RRK69_206_X23-62084_0_____OEM:DM_IoTEnterpriseK ) do ( for /f "tokens=1-8 delims=_" %%A in ("%%#") do ( REM Detect key if %1==key if %osSKU%==%%C if not defined key ( echo "!allapps! !altapplist!" | find /i "%%A" %nul1% && ( if %%E==1 set notworking=1 set key=%%B ) ) if %1==pfn if "%key%"=="%%B" set pfn=Microsoft.Windows.%%C.%%D_8wekyb3d8bbwe ) ) exit /b ::======================================================================================================================================== :: Below code is used to get alternate edition name and key if current edition doesn't support HWID activation :: 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 = _ :hwidfallback set notfoundaltactID= if %_NoEditionChange%==1 exit /b for %%# in ( 125_EnterpriseS-2021_______________cce9d2de-98ee-4ce2-8113-222620c64a27_ed655016-a9e8-4434-95d9-4345352c2552_QPM6N-7J2WJ-P88HH-P3YRH-YY74H_IoTEnterpriseS-2021 125_EnterpriseS-2024_______________f6e29426-a256-4316-88bf-cc5b0f95ec0c_6c4de1b8-24bb-4c17-9a77-7b939414c298_CGK42-GYN6Y-VD22B-BX98W-J8JXD_IoTEnterpriseS-2024 138_ProfessionalSingleLanguage_____a48938aa-62fa-4966-9d44-9f04da3f72f2_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T_Professional 139_ProfessionalCountrySpecific____f7af7d09-40e4-419c-a49b-eae366689ebd_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T_Professional 139_ProfessionalCountrySpecific-Zn_01eb852c-424d-4060-94b8-c10d799d7364_4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c_VK7JG-NPHTM-C97JM-9MPGT-3V66T_Professional ) do ( for /f "tokens=1-6 delims=_" %%A in ("%%#") do if %osSKU%==%%A ( echo "!allapps! !altapplist!" | find /i "%%C" %nul1% && ( echo "!allapps!" | find /i "%%D" %nul1% && ( set altkey=%%E 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 :: github.com/Gamers-Against-Weed/GamersOsState :hex:[ $bytes = [System.IO.File]::ReadAllBytes("gatherosstate.exe") $bytes[320] = 0xf8 $bytes[321] = 0xfb $bytes[322] = 0x05 $bytes[324] = 0x03 $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[33978] = 0xc3 $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:] ::======================================================================================================================================== :: Leave empty line below