From 5872b7df53cb1d0e4316860897a0725695dc4864 Mon Sep 17 00:00:00 2001 From: WindowsAddict Date: Tue, 29 Apr 2025 22:40:56 +0530 Subject: 3.1 Added Ohook support for OSPP based Office on Vista and later --- .../Activators/Ohook_Activation_AIO.cmd | 480 ++++++++++++++++++--- 1 file changed, 415 insertions(+), 65 deletions(-) (limited to 'MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd') diff --git a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd index 5be9615..ca9a308 100644 --- a/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd +++ b/MAS/Separate-Files-Version/Activators/Ohook_Activation_AIO.cmd @@ -1,4 +1,4 @@ -@set masver=3.0 +@set masver=3.1 @echo off @@ -171,12 +171,27 @@ call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%trouble goto dk_done ) -if %winbuild% LSS 9200 ( -%eline% +if %winbuild% LSS 6001 ( +%nceline% echo Unsupported OS version detected [%winbuild%]. -echo Ohook Activation is supported only on Windows 8/10/11 and their server equivalents. +echo MAS only supports Windows Vista/7/8/8.1/10/11 and their Server equivalents. +if %winbuild% EQU 6000 ( +echo: +echo Windows Vista RTM is not supported because Powershell cannot be installed. +echo Upgrade to Windows Vista SP1 or SP2. +) +goto dk_done +) + +if not exist %ps% ( +%nceline% +echo PowerShell is not installed in your system. +if %winbuild% LSS 7600 ( +echo Install PowerShell using the following URL. echo: -call :dk_color %Blue% "Use Online KMS activation option instead." +echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930 +) goto dk_done ) @@ -398,8 +413,8 @@ goto :oh_menu cls if not defined terminal ( -mode 130, 32 -if exist "%SysPath%\spp\store_test\" mode 134, 32 +mode 140, 32 +if exist "%SysPath%\spp\store_test\" mode 140, 32 %psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=32;$B.Height=300;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul% ) title Ohook Activation %masver% @@ -408,9 +423,9 @@ echo: echo Initializing... call :dk_chkmal -if not exist %SysPath%\sppsvc.exe ( +if not exist %SysPath%\%_slexe% ( %eline% -echo [%SysPath%\sppsvc.exe] file is missing, aborting... +echo [%SysPath%\%_slexe%] file is missing, aborting... echo: call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options." call :dk_color %Blue% "After that, restart system and try activation again." @@ -442,7 +457,7 @@ call :dk_showosinfo echo Initiating Diagnostic Tests... -set "_serv=sppsvc Winmgmt" +set "_serv=%_slser% Winmgmt" :: Software Protection :: Windows Management Instrumentation @@ -451,16 +466,15 @@ set notwinact=1 set ohookact=1 call :dk_errorcheck +call :oh_setspp + :: Check unsupported office versions -set o14msi= set o14c2r= set o16uwp= set _68=HKLM\SOFTWARE\Microsoft\Office set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office -for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) -for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=Office 2010 MSI ) %nul% reg query %_68%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R %nul% reg query %_86%\14.0\CVH /f Click2run /k && set o14c2r=Office 2010 C2R @@ -468,10 +482,10 @@ if %winbuild% GEQ 10240 ( for /f "delims=" %%a in ('%psc% "(Get-AppxPackage -name 'Microsoft.Office.Desktop' | Select-Object -ExpandProperty InstallLocation)" %nul6%') do (if exist "%%a\Integration\Integrator.exe" set o16uwp=Office UWP ) ) -if not "%o14msi%%o14c2r%%o16uwp%"=="" ( +if not "%o14c2r%%o16uwp%"=="" ( echo: -call :dk_color %Red% "Checking Unsupported Office Install [ %o14msi%%o14c2r%%o16uwp%]" -if not "%o14msi%%o16uwp%"=="" call :dk_color %Blue% "Use Online KMS option to activate it." +call :dk_color %Red% "Checking Unsupported Office Install [ %o14c2r%%o16uwp%]" +if not "%o16uwp%"=="" call :dk_color %Blue% "Use TSforge option to activate it." ) if %winbuild% GEQ 10240 %psc% "Get-AppxPackage -name "Microsoft.MicrosoftOfficeHub"" | find /i "Office" %nul1% && ( @@ -502,10 +516,10 @@ set o15c2r= set error=1 ) -if "%o16c2r%%o15c2r%%o16msi%%o15msi%"=="" ( +if "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="" ( set error=1 echo: -if not "%o14msi%%o14c2r%%o16uwp%"=="" ( +if not "%o14c2r%%o16uwp%"=="" ( call :dk_color %Red% "Checking Supported Office Install [Not Found]" ) else ( call :dk_color %Red% "Checking Installed Office [Not Found]" @@ -524,8 +538,8 @@ goto dk_done ) set multioffice= -if not "%o16c2r%%o15c2r%%o16msi%%o15msi%"=="1" set multioffice=1 -if not "%o14msi%%o14c2r%%o16uwp%"=="" set multioffice=1 +if not "%o16c2r%%o15c2r%%o16msi%%o15msi%%o14msi%"=="1" set multioffice=1 +if not "%o14c2r%%o16uwp%"=="" set multioffice=1 if defined multioffice ( call :dk_color %Gray% "Checking Multiple Office Install [Found, its recommended to install only one version]" @@ -569,12 +583,8 @@ set "_oIntegrator=%_oRoot%\integration\integrator.exe" if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") -if not "%osarch%"=="x86" ( -if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" -) else ( -set "_sppcPath=%SystemRoot%\System32\sppc.dll" -) + +call :oh_ppcpath echo: echo Activating Office... [C2R ^| %_version% ^| %_oArch%] @@ -585,9 +595,20 @@ set error=1 goto :starto16c2r ) +if defined noOsppc ( +call :dk_color %Red% "Checking OSPPC.DLL [Not found. Aborting activation...]" +call :dk_color %Blue% "%_fixmsg%" +set error=1 +goto :starto16c2r +) + call :oh_fixprids call :oh_process +if defined isOspp ( +call :oh_hookinstall_ospp +) else ( call :oh_hookinstall +) ::======================================================================================================================================== @@ -619,12 +640,8 @@ set "_oIntegrator=%_oRoot%\integration\integrator.exe" if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%\vfs\System" & set "_hook=sppc64.dll") if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%\vfs\SystemX86" & set "_hook=sppc32.dll") -if not "%osarch%"=="x86" ( -if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" -) else ( -set "_sppcPath=%SystemRoot%\System32\sppc.dll" -) + +call :oh_ppcpath echo: echo Activating Office... [C2R ^| %_version% %_AudienceData%^| %_oArch%] @@ -635,9 +652,20 @@ set error=1 goto :startmsi ) +if defined noOsppc ( +call :dk_color %Red% "Checking OSPPC.DLL [Not found. Aborting activation...]" +call :dk_color %Blue% "%_fixmsg%" +set error=1 +goto :startmsi +) + call :oh_fixprids call :oh_process +if defined isOspp ( +call :oh_hookinstall_ospp +) else ( call :oh_hookinstall +) ::======================================================================================================================================== @@ -674,6 +702,9 @@ echo Adding a Registry to Prevent Banner [Successful] :startmsi +if defined o14msi call :oh_setspp 14 +if defined o14msi call :oh_processmsi 14 %o14msi_reg% +call :oh_setspp if defined o15msi call :oh_processmsi 15 %o15msi_reg% if defined o16msi call :oh_processmsi 16 %o16msi_reg% @@ -705,7 +736,7 @@ goto :dk_done :oh_uninstall cls -if not defined terminal mode 99, 32 +if not defined terminal mode 145, 32 title Uninstall Ohook Activation %masver% set _present= @@ -721,6 +752,7 @@ if defined o16c2r_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg if defined o15c2r_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o15c2r_reg% /v InstallPath" %nul6%') do (set "_15CHook=%%b\root\vfs")) if defined o16msi_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o16msi_reg%\Common\InstallRoot /v Path" %nul6%') do (set "_16MHook=%%b")) if defined o15msi_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o15msi_reg%\Common\InstallRoot /v Path" %nul6%') do (set "_15MHook=%%b")) +if defined o14msi_reg (for /f "skip=2 tokens=2*" %%a in ('"reg query %o14msi_reg%\Common\InstallRoot /v Path" %nul6%') do (set "_14MHook=%%b")) if defined _16CHook (if exist "%_16CHook%\System\sppc*dll" (set _present=1& del /s /f /q "%_16CHook%\System\sppc*dll" & if exist "%_16CHook%\System\sppc*dll" set _unerror=1)) if defined _16CHook (if exist "%_16CHook%\SystemX86\sppc*dll" (set _present=1& del /s /f /q "%_16CHook%\SystemX86\sppc*dll" & if exist "%_16CHook%\SystemX86\sppc*dll" set _unerror=1)) @@ -728,8 +760,9 @@ if defined _15CHook (if exist "%_15CHook%\System\sppc*dll" (set _present=1& d if defined _15CHook (if exist "%_15CHook%\SystemX86\sppc*dll" (set _present=1& del /s /f /q "%_15CHook%\SystemX86\sppc*dll" & if exist "%_15CHook%\SystemX86\sppc*dll" set _unerror=1)) if defined _16MHook (if exist "%_16MHook%sppc*dll" (set _present=1& del /s /f /q "%_16MHook%sppc*dll" & if exist "%_16MHook%sppc*dll" set _unerror=1)) if defined _15MHook (if exist "%_15MHook%sppc*dll" (set _present=1& del /s /f /q "%_15MHook%sppc*dll" & if exist "%_15MHook%sppc*dll" set _unerror=1)) +if defined _14MHook (if exist "%_14MHook%sppc*dll" (set _present=1& del /s /f /q "%_14MHook%sppc*dll" & if exist "%_14MHook%sppc*dll" set _unerror=1)) -for %%# in (15 16) do ( +for %%# in (14 15 16) do ( for %%A in ("%ProgramFiles%" "%ProgramW6432%" "%ProgramFiles(x86)%") do ( if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" (set _present=1& del /s /f /q "%%~A\Microsoft Office\Office%%#\sppc*dll" & if exist "%%~A\Microsoft Office\Office%%#\sppc*dll" set _unerror=1) ) @@ -743,6 +776,31 @@ if exist "%%~A\Microsoft %%~G\root\vfs\%%#\sppc*dll" (set _present=1& del /s /f ) ) +::================================== + +for %%# in (OSPPC.DLL sppcs.dll) do ( +for %%A in ("%CommonProgramFiles%" "%CommonProgramW6432%" "%CommonProgramFiles(x86)%") do ( +for %%G in ("%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\%%#") do ( +set size=0 +set size=%%~zG +if !size! GEQ 1 if !size! LSS 100000 ( +set _present=1 +del /f /q "%%~G" +if exist "%%~G" (move /y "%%~G" "!_ttemp!\needsToBeDeleted%random%" %nul%) +if exist "%%~G" (set _unerror=1) else (echo Deleted file - %%~G) +) +if /i sppcs.dll==%%# if !size! GEQ 100000 ( +move /y "%%~G" "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL" %nul% +if exist "%%~G" (move /y "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL" "!_ttemp!\needsToBeDeleted%random%" %nul%) +move /y "%%~G" "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL" %nul% +if exist "%%~G" (set _unerror=1&echo Failed to rename sppcs.dll back to "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL") else (echo Renamed sppcs.dll back to "%%~A\Microsoft Shared\OfficeSoftwareProtectionPlatform\OSPPC.DLL") +) +) +) +) + +::================================== + reg query HKCU\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency %nul% && ( echo: echo Deleting - Registry keys for skipping license check @@ -772,6 +830,8 @@ reg unload HKU\%%# %nul% ) ) +::================================== + set "kmskey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\0ff1ce15-a989-479d-af46-f275c6370663" reg query "%kmskey%" %nul% && ( echo: @@ -818,6 +878,7 @@ set _oLPath= set _hookPath= set _hook= set _sppcPath= +set _osppPath= set _actid= set _prod= set _lic= @@ -836,6 +897,7 @@ set o16c2r= set o15c2r= set o16msi= set o15msi= +set o14msi= set _68=HKLM\SOFTWARE\Microsoft\Office set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office @@ -849,6 +911,52 @@ for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v P for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o16msi=1&set o16msi_reg=%_68%\16.0) for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_86%\15.0) for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o15msi=1&set o15msi_reg=%_68%\15.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_86%\14.0) +for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\EntityPicker.dll" (set o14msi=1&set o14msi_reg=%_68%\14.0) + +exit /b + +::======================================================================================================================================== + +:oh_ppcpath + +if not defined isOspp ( +if not "%osarch%"=="x86" ( +if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" +if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" +) else ( +set "_sppcPath=%SystemRoot%\System32\sppc.dll" +) +) + +set noOsppc= +set _hook68= +set _hook86= +set _osppPath68= +set _osppPath86= + +if defined isOspp ( +if not "%osarch%"=="x86" ( +if /i "%_oArch%"=="x64" ( +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v Path" %nul6%') do (set "_osppPath68=%%b") +if not exist "!_osppPath68!OSPPC.DLL" set noOsppc=1 +) +if /i "%_oArch%"=="x86" ( +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v Path" %nul6%') do (set "_osppPath68=%%b") +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\OfficeSoftwareProtectionPlatform /v Path" %nul6%') do (set "_osppPath86=%%b") +if not exist "!_osppPath68!OSPPC.DLL" set noOsppc=1 +if not exist "!_osppPath86!OSPPC.DLL" set noOsppc=1 +) +) else ( +for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform /v Path" %nul6%') do (set "_osppPath86=%%b") +if not exist "!_osppPath86!OSPPC.DLL" set noOsppc=1 +) +if "!_osppPath68:~-1!"=="\" set "_osppPath68=!_osppPath68:~0,-1!" +if "!_osppPath86:~-1!"=="\" set "_osppPath86=!_osppPath86:~0,-1!" +) + +if defined _osppPath68 set _hook68=sppc64.dll +if defined _osppPath86 set _hook86=sppc32.dll exit /b @@ -944,15 +1052,24 @@ set hasherror= if %_hook%==sppc32.dll set offset=2564 if %_hook%==sppc64.dll set offset=3076 -del /s /q "%_hookPath%\sppcs.dll" %nul% -del /s /q "%_hookPath%\sppc.dll" %nul% +::====================================== + +:: Remove previous Install + +for %%# in (sppcs.dll sppc.dll) do ( +del /f /q "%_hookPath%\%%#" %nul% +if exist "%_hookPath%\%%#" (move /y "%_hookPath%\%%#" "!_ttemp!\needsToBeDeleted%random%" %nul%) +if exist "%_hookPath%\%%#" (set "ierror=Remove Previous Ohook Install [%%#]") +) + +if defined ierror goto :oh_hookinstall_error -if exist "%_hookPath%\sppcs.dll" set "ierror=Remove Previous Ohook Install" -if exist "%_hookPath%\sppc.dll" set "ierror=Remove Previous Ohook Install" +::====================================== mklink "%_hookPath%\sppcs.dll" "%_sppcPath%" %nul% -if not %errorlevel%==0 ( -if not defined ierror set ierror=mklink +if not exist "%_hookPath%\sppcs.dll" ( +set ierror=mklink sppcs.dll +goto :oh_hookinstall_error ) set exhook= @@ -967,17 +1084,122 @@ popd call :oh_extractdll "%_hookPath%\sppc.dll" "%offset%" ) ) -if not exist "%_hookPath%\sppc.dll" (if not defined ierror set ierror=Copy) +if not exist "%_hookPath%\sppc.dll" ( +set ierror=Copy +goto :oh_hookinstall_error +) echo: -if not defined ierror ( -echo Symlinking System's sppc.dll to ["%_hookPath%\sppcs.dll"] [Successful] +echo Symlinking System's sppc.dll ["%_hookPath%\sppcs.dll"] [Successful] if defined exhook ( echo Copying Custom %_hook% to ["%_hookPath%\sppc.dll"] [Successful] ) else ( echo Extracting Custom %_hook% to ["%_hookPath%\sppc.dll"] [Successful] ) + +goto :oh_hookinstall_error + +::======================================================================================================================================== + +:oh_hookinstall_ospp + +set ierror= +set hasherror= + +if defined _hook86 set offset86=2564 +if defined _hook68 set offset68=3076 + +::====================================== + +:: Remove previous Install + +for %%# in (OSPPC.DLL sppcs.dll) do ( +for %%A in ("%_osppPath68%\%%#" "%_osppPath86%\%%#") do ( +set size=0 +set size=%%~zA +if !size! GEQ 1 if !size! LSS 100000 ( +del /f /q "%%~A" %nul% +if exist "%%~A" (move /y "%%~A" "!_ttemp!\needsToBeDeleted%random%" %nul%) +if exist "%%~A" (set "ierror=Remove Previous Ohook Install [%%#]") +) +) +) + +if defined ierror goto :oh_hookinstall_error + +for %%A in ("%_osppPath68%" "%_osppPath86%") do ( +if exist "%%~A\sppcs.dll" (move /y "%%~A\sppcs.dll" "%%~A\OSPPC.DLL" %nul%) +if exist "%%~A\sppcs.dll" ( +move /y "%%~A\OSPPC.DLL" "!_ttemp!\needsToBeDeleted%random%" %nul% +move /y "%%~A\sppcs.dll" "%%~A\OSPPC.DLL" %nul% +) +if exist "%%~A\sppcs.dll" (set "ierror=Move sppcs.dll back to OSPPC.DLL") +) + +del /f /q "%_hookPath%\sppcs.dll" %nul% +if exist "%_hookPath%\sppcs.dll" (move /y "%_hookPath%\sppcs.dll" "!_ttemp!\needsToBeDeleted%random%" %nul%) +if exist "%_hookPath%\sppcs.dll" (set "ierror=Remove Previous Ohook mklink sppcs.dll") + +if defined ierror goto :oh_hookinstall_error + +::====================================== + +if defined _osppPath68 (move /y "%_osppPath68%\OSPPC.DLL" "%_osppPath68%\sppcs.dll" %nul% & if not exist "%_osppPath68%\sppcs.dll" set ierror=1) +if defined _osppPath86 (move /y "%_osppPath86%\OSPPC.DLL" "%_osppPath86%\sppcs.dll" %nul% & if not exist "%_osppPath86%\sppcs.dll" set ierror=1) + +if defined ierror ( +set "ierror=Rename OSPPC.DLL" +goto :oh_hookinstall_error +) + +if defined _osppPath68 if defined _osppPath86 (mklink "%_hookPath%\sppcs.dll" "%_osppPath86%\sppcs.dll" %nul%) +if defined _osppPath68 if not defined _osppPath86 (mklink "%_hookPath%\sppcs.dll" "%_osppPath68%\sppcs.dll" %nul%) +if defined _osppPath86 if not defined _osppPath68 (mklink "%_hookPath%\sppcs.dll" "%_osppPath86%\sppcs.dll" %nul%) + +if not exist "%_hookPath%\sppcs.dll" ( +set ierror=mklink sppcs.dll +goto :oh_hookinstall_error +) + +set exhook= +if exist "!_work!\BIN\%_hook68%" if exist "!_work!\BIN\%_hook86%" set exhook=1 + +if defined exhook ( +pushd "!_work!\BIN\" +if defined _osppPath68 (copy /y /b "%_hook68%" "%_osppPath68%\OSPPC.DLL" %nul%) +if defined _osppPath86 (copy /y /b "%_hook86%" "%_osppPath86%\OSPPC.DLL" %nul%) +popd ) else ( +if defined _osppPath68 (set _hook=%_hook68%&call :oh_extractdll "%_osppPath68%\OSPPC.DLL" "%offset68%") +if defined _osppPath86 (set _hook=%_hook86%&call :oh_extractdll "%_osppPath86%\OSPPC.DLL" "%offset86%") +) + +if defined _osppPath68 (if not exist "%_osppPath68%\OSPPC.DLL" set ierror=1) +if defined _osppPath86 (if not exist "%_osppPath86%\OSPPC.DLL" set ierror=1) + +if defined ierror ( +set ierror=Copy +goto :oh_hookinstall_error +) + +echo: +if defined _osppPath68 (echo Renaming OSPPC.DLL to sppcs.dll ["%_osppPath68%\sppcs.dll"]) +if defined _osppPath86 (echo Renaming OSPPC.DLL to sppcs.dll ["%_osppPath86%\sppcs.dll"]) +if defined exhook ( +if defined _osppPath68 (echo Copying Custom %_hook68% to ["%_osppPath68%\OSPPC.DLL"]) +if defined _osppPath86 (echo Copying Custom %_hook86% to ["%_osppPath86%\OSPPC.DLL"]) +) else ( +if defined _osppPath68 (echo Extracting Custom %_hook68% to ["%_osppPath68%\OSPPC.DLL"]) +if defined _osppPath86 (echo Extracting Custom %_hook86% to ["%_osppPath86%\OSPPC.DLL"]) +) + +echo Symlinking Renamed sppcs.dll ["%_hookPath%\sppcs.dll"] + +::======================================================================================================================================== + +:oh_hookinstall_error + +if defined ierror ( set error=1 call :dk_color %Red% "Installing Ohook [Failed to %ierror%]" echo: @@ -996,9 +1218,9 @@ if not defined exhook if not defined ierror ( if defined hasherror ( set error=1 set ierror=1 -call :dk_color %Red% "Modifying Hash of Custom %_hook% [Failed]" +call :dk_color %Red% "Modifying Hash of Custom sppcs.dll [Failed]" ) else ( -echo Modifying Hash of Custom %_hook% [Successful] +echo Modifying Hash of Custom sppcs.dll [Successful] ) ) @@ -1006,6 +1228,26 @@ exit /b ::======================================================================================================================================== +:oh_setspp + +set isOspp= +if %winbuild% GEQ 9200 ( +set spp=SoftwareLicensingProduct +set sps=SoftwareLicensingService +) else ( +set isOspp=1 +set spp=OfficeSoftwareProtectionProduct +set sps=OfficeSoftwareProtectionService +) +if "%1"=="14" ( +set isOspp=1 +set spp=OfficeSoftwareProtectionProduct +set sps=OfficeSoftwareProtectionService +) +exit /b + +::======================================================================================================================================== + :oh_process for %%# in (%_oIds%) do ( @@ -1025,10 +1267,11 @@ call :ohookdata getinfo !_prod! if not "!key!"=="" ( echo "!allapps!" | find /i "!_actid!" %nul1% || call :oh_installlic +if not %oVer%==14 set generickey=1 call :dk_inskey "[!key!] [!_prod!] [!_lic!]" ) else ( set error=1 -call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 !_prod! not found in script]" +call :dk_color %Red% "Checking Product In Script [Office %oVer%.0 !_prod! key not found in script]" call :dk_color %Blue% "Make sure you are using the latest version of MAS." set fixes=%fixes% %mas% call :dk_color %_Yellow% "%mas%" @@ -1055,7 +1298,11 @@ exit /b :: Process Office MSI Version call :oh_reset +if "%1"=="14" ( +call :dk_actids 59a52881-a989-479d-af46-f275c6370663 +) else ( call :dk_actids 0ff1ce15-a989-479d-af46-f275c6370663 +) set oVer=%1 for /f "skip=2 tokens=2*" %%a in ('"reg query %2\Common\InstallRoot /v Path" %nul6%') do (set "_oRoot=%%b") @@ -1068,16 +1315,8 @@ if "%osarch%"=="x86" set _oArch=x86 if /i "%_oArch%"=="x64" (set "_hookPath=%_oRoot%" & set "_hook=sppc64.dll") if /i "%_oArch%"=="x86" (set "_hookPath=%_oRoot%" & set "_hook=sppc32.dll") -if not "%osarch%"=="x86" ( -if /i "%_oArch%"=="x64" set "_sppcPath=%SystemRoot%\System32\sppc.dll" -if /i "%_oArch%"=="x86" set "_sppcPath=%SystemRoot%\SysWOW64\sppc.dll" -) else ( -set "_sppcPath=%SystemRoot%\System32\sppc.dll" -) -set "_common=%CommonProgramFiles%" -if defined PROCESSOR_ARCHITEW6432 set "_common=%CommonProgramW6432%" -set "_common2=%CommonProgramFiles(x86)%" +call :oh_ppcpath call :msiofficedata %2 @@ -1090,8 +1329,23 @@ call :dk_color %Red% "Checking Installed Products [Product IDs not f exit /b ) +if defined noOsppc ( +call :dk_color %Red% "Checking OSPPC.DLL [Not found. Aborting activation...]" +call :dk_color %Blue% "%_fixmsg%" +set error=1 +exit /b +) + +if %oVer%==14 if defined SingleImage ( +echo Checking Installed Products [SingleImage product found, Professional Retail key will be used for activation] +) + call :oh_process +if defined isOspp ( +call :oh_hookinstall_ospp +) else ( call :oh_hookinstall +) exit /b @@ -1415,11 +1669,12 @@ set keyerror=%errorlevel% cmd /c exit /b %keyerror% if %keyerror% NEQ 0 set "keyerror=[0x%=ExitCode%]" +if defined generickey (set "keyecho=Installing Generic Product Key ") else (set "keyecho=Installing Product Key ") if %keyerror% EQU 0 ( if %sps%==SoftwareLicensingService call :dk_refresh -echo Installing Generic Product Key %~1 [Successful] +echo %keyecho% %~1 [Successful] ) else ( -call :dk_color %Red% "Installing Generic Product Key %~1 [Failed] %keyerror%" +call :dk_color %Red% "%keyecho% %~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%" @@ -1428,6 +1683,7 @@ set showfix=1 set error=1 ) +set generickey= exit /b :: Get all products Activation IDs @@ -1523,7 +1779,7 @@ exit /b :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 d1=%d1% $meth.SetImplementationFlags(128); $TypeBuilder.CreateType()::BrandingFormatString('%%WINDOWS_LONG%%') -replace [string][char]0xa9, '(C)' -replace [string][char]0xae, '(R)' -replace [string][char]0x2122, '(TM)' set winos= for /f "delims=" %%s in ('"%psc% %d1%"') do if not errorlevel 1 (set winos=%%s) @@ -1533,10 +1789,6 @@ if %winbuild% GEQ 22000 ( set winos=!winos:Windows 10=Windows 11! ) ) -if %winbuild% LSS 7600 ( -set "winos=!winos:VistaT=Vista!" -set "winos=!winos:Serverr=Server!" -) exit /b @@ -2128,15 +2380,69 @@ exit /b :: 1st column = Office version number :: 2nd column = Activation ID -:: 3rd column = Generic key. Preference is given in this order, Retail:TB:Sub > Retail > OEM:NONSLP > Volume:MAK > Volume:GVLK +:: 3rd column = For Office 2013 and later, the generated keys are listed. For Office 2010, the blocked keys sourced from the Internet are listed. +:: For Office 2013 and later, key preference is given in this order, Retail:TB:Sub > Retail > OEM:NONSLP > Volume:MAK > Volume:GVLK +:: For Office 2010, key preference is given in this order, Retail > Volume:MAK :: 4th column = Last part of license description :: 5th column = Edition +:: 6th column = Other Edition IDs if they are part of the same primary product (For reference only) :: Separator = "_" +::=============== + +:: We couldn't find any keys (blocked/generic doesn't matter) for these Office 2010 products. If you have them, please share with us. + +14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_Retail________ExcelR_[HSExcelR] +14_7004b7f0-6407-4f45-8eac-966e5f868bde_Retail________GrooveR +14_fbf4ac36-31c8-4340-8666-79873129cf40_Retail________OutlookR +14_133c8359-4e93-4241-8118-30bb18737ea0_Retail________PowerPointR_[HSPowerPointR] +14_98677603-a668-4fa4-9980-3f1f05f78f69_Retail________PublisherR +14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_Retail________WordR_[HSWordR] +14_dbe3aee0-5183-4ff7-8142-66050173cb01_Retail________SmallBusBasicsR_[SmallBusBasicsMSDNR] + +:: These installers are not publicly available, so it doesn't matter if we don't have their keys. + +14_19316117-30a8-4773-8fd9-7f7231f4e060_SubPrepid_____HomeBusinessSubR +14_4d06f72e-fd50-4bc2-a24b-d448d7f17ef2_SubPrepid_____ProjectProSubR +14_e98ef0c0-71c4-42ce-8305-287d8721e26c_SubPrepid_____ProPlusSubR +14_14f5946a-debc-4716-babc-7e2c240fec08_Retail________MondoR +14_533b656a-4425-480b-8e30-1a2358898350_MAK___________MondoVL + :ohookdata set f= for %%# in ( +:: Office 2010 +14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_7KTYC-XR43P-C3MRW-BJKFD-XB%f%YPG_Retail________AccessR +14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_7XHPQ-BQMYG-YBP49-CY8B2-T8%f%CGQ_ByPass________AccessRuntimeR +14_95ab3ec8-4106-4f9d-b632-03c019d1d23f_89RTQ-MT4GK-6CPTX-WWP7C-J9%f%KXR_MAK___________AccessVL +14_71dc86ff-f056-40d0-8ffb-9592705c9b76_39TRR-C2F37-9WYJ2-MJQXH-B9%f%38K_MAK___________ExcelVL +14_fdad0dfa-417d-4b4f-93e4-64ea8867b7fd_RCGT3-FPQDV-H49CD-PPDBF-TH%f%47G_MAK___________GrooveVL +14_7b7d1f17-fdcb-4820-9789-9bec6e377821_3YR9B-D9W79-BY66R-R8XYP-QY%f%YYY_Retail________HomeBusinessR_[HomeBusinessDemoR] +14_09e2d37e-474b-4121-8626-58ad9be5776f_3X43R-HHHXX-FRHRW-2M2WJ-8V%f%PHD_Retail________HomeStudentR_[HomeStudentDemoR] +14_ef1da464-01c8-43a6-91af-e4e5713744f9_XDGJY-KFHW9-JWX9X-YM4GW-GC%f%8WR_Retail________InfoPathR +14_85e22450-b741-430c-a172-a37962c938af_6GKT2-KMJPK-4RRBF-8VQKB-JB%f%6G6_MAK___________InfoPathVL +14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_2TG3P-9DB76-4YT99-8RXGD-CW%f%XBP_Retail________OneNoteR_[HSOneNoteR] +14_6860b31f-6a67-48b8-84b9-e312b3485c4b_CV64P-F4VRH-BJ33D-PH6MR-X6%f%9RY_MAK___________OneNoteVL +14_a9aeabd8-63b8-4079-a28e-f531807fd6b8_J8C9M-YXMH2-9CX44-2C3YG-V7%f%692_MAK___________OutlookVL +14_acb51361-c0db-4895-9497-1831c41f31a6_GMBWM-WVX26-7WHV4-DB43D-WV%f%DY2_Retail________PersonalR_[PersonalDemoR,PersonalPrepaidR] +14_38252940-718c-4aa6-81a4-135398e53851_HPBQP-RJHDR-Q3472-PT9Q6-PB%f%B72_MAK___________PowerPointVL +14_8b559c37-0117-413e-921b-b853aeb6e210_367X9-9HP9R-TKHY6-DH4QH-K9%f%PY7_Retail________ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR,OEM-SingleImage] +14_725714d7-d58f-4d12-9fa8-35873c6f7215_6JD4G-KRW3J-48MGV-DM6FC-T9%f%WKR_Retail________ProjectProR_[ProjectProMSDNR] +14_1cf57a59-c532-4e56-9a7d-ffa2fe94b474_3XDTH-MMGJ6-F9MKX-THP8D-G9%f%BP7_MAK___________ProjectProVL +14_688f6589-2bd9-424e-a152-b13f36aa6de1_2W96V-RTQ9R-2BPVT-PT8H9-MV%f%68T_Retail________ProjectStdR +14_11b39439-6b93-4642-9570-f2eb81be2238_4DTT4-D4MKX-23KFH-JKR6T-YK%f%G2J_MAK___________ProjectStdVL +14_71af7e84-93e6-4363-9b69-699e04e74071_2J9H6-H4D3G-PCXD2-96XVM-TR%f%R73_Retail________ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R] +14_fdf3ecb9-b56f-43b2-a9b8-1b48b6bae1a7_6CD6C-9R8PB-T2D9Y-8RKKX-W7%f%DFK_MAK___________ProPlusVL_[ProPlusAcadVL] +14_3d014759-b128-4466-9018-e80f6320d9d0_32YG9-3VX77-YXJVV-PRVFW-TT%f%8BV_MAK___________PublisherVL +14_8090771e-d41a-4482-929e-de87f1f47e46_7VKXH-9BWCG-RPTBB-JBRV3-GR%f%HYC_MAK___________SmallBusBasicsVL +14_b78df69e-0966-40b1-ae85-30a5134dedd0_H48K6-FB4Y6-P83GH-9J7XG-HD%f%KKX_ByPass________SPDR +14_b6d2565c-341d-4768-ad7d-addbe00bb5ce_W3BTX-H6BW7-Q6DFW-BXFFY-8R%f%VJP_Retail________StandardR_[StandardMSDNR][KeyisforMSDNR] +14_1f76e346-e0be-49bc-9954-70ec53a4fcfe_2XTQP-GDR7C-GTXPC-6W6PV-4R%f%XGC_MAK___________StandardVL_[StandardAcadVL] +14_2745e581-565a-4670-ae90-6bf7c57ffe43_VXHHB-W7HBD-7M342-RJ7P8-CH%f%BD6_ByPass________StarterR +14_66cad568-c2dc-459d-93ec-2f3cb967ee34_2RDPT-WPYQM-C2WXF-BTPDW-2J%f%2HM_Retail________VisioSIR_Prem[Pro,Std] +14_36756cb8-8e69-4d11-9522-68899507cd6a_7PKFT-X2MKQ-GT6X2-8CB2W-CH%f%C9K_MAK___________VisioSIVL_Prem[Pro,Std] +14_98d4050e-9c98-49bf-9be1-85e12eb3ab13_6J3XK-DFKGK-X373V-QJHYM-V3%f%FC2_MAK___________WordVL :: Office 2013 15_ab4d047b-97cf-4126-a69f-34df08e2f254_B7RFY-7NXPK-Q4342-Y9X2H-3J%f%X4X_Retail________AccessRetail 15_259de5be-492b-44b3-9d78-9645f848f7b0_X3XNB-HJB7K-66THH-8DWQ3-XH%f%GJP_Bypass________AccessRuntimeRetail @@ -2375,6 +2681,49 @@ exit /b :msiofficedata for %%# in ( +14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_0015_AccessR +14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_001C_AccessRuntimeR +14_95ab3ec8-4106-4f9d-b632-03c019d1d23f_0015_AccessVL +14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_0016_ExcelR_[HSExcelR] +14_71dc86ff-f056-40d0-8ffb-9592705c9b76_0016_ExcelVL +14_7004b7f0-6407-4f45-8eac-966e5f868bde_00BA_GrooveR +14_fdad0dfa-417d-4b4f-93e4-64ea8867b7fd_00BA_GrooveVL +14_7b7d1f17-fdcb-4820-9789-9bec6e377821_0013_HomeBusinessR_[HomeBusinessDemoR] +14_19316117-30a8-4773-8fd9-7f7231f4e060_011E_HomeBusinessSubR +14_09e2d37e-474b-4121-8626-58ad9be5776f_002F_HomeStudentR_[HomeStudentDemoR] +14_ef1da464-01c8-43a6-91af-e4e5713744f9_0044_InfoPathR +14_85e22450-b741-430c-a172-a37962c938af_0044_InfoPathVL +14_14f5946a-debc-4716-babc-7e2c240fec08_000F_MondoR +14_533b656a-4425-480b-8e30-1a2358898350_000F_MondoVL +14_c1ceda8b-c578-4d5d-a4aa-23626be4e234_003D_ProfessionalR_[OEM-SingleImage]Exception +14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_00A1_OneNoteR_[HSOneNoteR] +14_6860b31f-6a67-48b8-84b9-e312b3485c4b_00A1_OneNoteVL +14_fbf4ac36-31c8-4340-8666-79873129cf40_001A_OutlookR +14_a9aeabd8-63b8-4079-a28e-f531807fd6b8_001A_OutlookVL +14_acb51361-c0db-4895-9497-1831c41f31a6_0033_PersonalR_[PersonalDemoR,PersonalPrepaidR] +14_133c8359-4e93-4241-8118-30bb18737ea0_0018_PowerPointR_[HSPowerPointR] +14_38252940-718c-4aa6-81a4-135398e53851_0018_PowerPointVL +14_8b559c37-0117-413e-921b-b853aeb6e210_0014_ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR] +14_725714d7-d58f-4d12-9fa8-35873c6f7215_003B_ProjectProR_[ProjectProMSDNR] +14_4d06f72e-fd50-4bc2-a24b-d448d7f17ef2_011F_ProjectProSubR +14_1cf57a59-c532-4e56-9a7d-ffa2fe94b474_003B_ProjectProVL +14_688f6589-2bd9-424e-a152-b13f36aa6de1_003A_ProjectStdR +14_11b39439-6b93-4642-9570-f2eb81be2238_003A_ProjectStdVL +14_71af7e84-93e6-4363-9b69-699e04e74071_0011_ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R] +14_e98ef0c0-71c4-42ce-8305-287d8721e26c_011D_ProPlusSubR +14_fdf3ecb9-b56f-43b2-a9b8-1b48b6bae1a7_0011_ProPlusVL_[ProPlusAcadVL] +14_98677603-a668-4fa4-9980-3f1f05f78f69_0019_PublisherR +14_3d014759-b128-4466-9018-e80f6320d9d0_0019_PublisherVL +14_dbe3aee0-5183-4ff7-8142-66050173cb01_008B_SmallBusBasicsR_[SmallBusBasicsMSDNR] +14_8090771e-d41a-4482-929e-de87f1f47e46_008B_SmallBusBasicsVL +14_b78df69e-0966-40b1-ae85-30a5134dedd0_0017_SPDR +14_d3422cfb-8d8b-4ead-99f9-eab0ccd990d7_0012_StandardR +14_1f76e346-e0be-49bc-9954-70ec53a4fcfe_0012_StandardVL_[StandardAcadVL] +14_2745e581-565a-4670-ae90-6bf7c57ffe43_0066_StarterR +14_66cad568-c2dc-459d-93ec-2f3cb967ee34_0057_VisioSIR_Prem[Pro,Std]Exception +14_36756cb8-8e69-4d11-9522-68899507cd6a_0057_VisioSIVL_Prem[Pro,Std]Exception +14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_001B_WordR_[HSWordR] +14_98d4050e-9c98-49bf-9be1-85e12eb3ab13_001B_WordVL :: Office 2013 15_ab4d047b-97cf-4126-a69f-34df08e2f254_0015_AccessRetail 15_259de5be-492b-44b3-9d78-9645f848f7b0_001C_AccessRuntimeRetail @@ -2491,6 +2840,7 @@ if "%oVer%"=="%%A" ( reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && ( reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && ( if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D) +if /i 003D==%%C set SingleImage=1 ) ) ) @@ -2507,7 +2857,7 @@ exit /b :oh_extractdll set b= -%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':%_hook%\:.*';$encoded = ($f[1]) -replace '-', 'A' -replace '_', 'a';$bytes = [Con%b%vert]::FromBas%b%e64String($encoded); $PePath='%1'; $offset='%2'; $m=[io.file]::ReadAllText('!_batp!') -split ':hexedit\:.*';iex ($m[1]);" %nul2% | find /i "Error found" %nul1% && set hasherror=1 +%psc% "$f=[io.file]::ReadAllText('!_batp!') -split ':%_hook%\:.*';$encoded = ($f[1]) -replace '-', 'A' -replace '_', 'a';$bytes = [Con%b%vert]::FromBas%b%e64String($encoded); $PePath='%1'; $offset='%2'; $m=[io.file]::ReadAllText('!_batp!') -split ':hexedit\:.*';iex ($m[1])" %nul2% | find /i "Error found" %nul1% && set hasherror=1 exit /b :hexedit: @@ -2546,7 +2896,7 @@ $Writer.Write($unixTimestamp) $Writer.Flush() # Write the current state of the MemoryStream to a temporary file -$tempFilePath = [System.IO.Path]::Combine($env:windir, "Temp", [System.IO.Path]::GetRandomFileName()) +$tempFilePath = "$env:windir\Temp\$([System.IO.Path]::GetRandomFileName())" [System.IO.File]::WriteAllBytes($tempFilePath, $MemoryStream.ToArray()) # Update hash using the temporary file -- cgit v1.2.3