我簡化了Enderman的MS-DOS模式!
如果你看過這個視頻(【末影人】Windows 10 的 MS-DOS模式),那么你就可以將電腦重啟進(jìn)命令行模式。
這個模式就是Sysprep階段。
現(xiàn)在,讓我們分析一下Enderman msdos.bat中的代碼。
第4行至第34行是提權(quán)代碼,不管
41行至47行內(nèi)容如下:
我們知道,HKLM\SYSTEM\Setup主要管理系統(tǒng)安裝

其中CmdLine的內(nèi)容是系統(tǒng)準(zhǔn)備階段執(zhí)行的部署程序。
windeploy.exe在C:\windows\system32\oobe中,管理系統(tǒng)部署。
我們把它換成別的,例如cmd.exe,sysprep就會執(zhí)行CMD
SetupPhase表示安裝階段,2表示sysprep階段
SetupType表示安裝類型,4表示全新安裝
OOBEInProgress表示是否在OOBE下,SystemSetupInProgress表示是否在系統(tǒng)部署階段下。
我們先寫一個批處理腳本。
@echo off
title?命令提示符
echo?正在啟動服務(wù)...
net start > nul
timeout /T 3 /NOBREAK > NUL
cls
echo?你現(xiàn)在處于基于sysprep的命令行模式下,輸入help查看幫助。
echo.
exit /B
把它另存為C:\dosexec.bat
然后打開注冊表,備份HKLM\SYSTEM\Setup項。
把CmdLine改成cmd.exe /k C:\dosexec.bat
把OOBEInProgress改成1
把SetupType改成4
把SetupPhase改成2
把SystemSetupInProgress改成1
重啟電腦,是不是進(jìn)入了命令行?
如果想返回Windows,在命令行下打開regedit,把HKLM\SYSTEM\Setup下的CmdLine改成windeploy.exe,再把所有DWORD鍵的值改成0,輸入shutdown /r /t 0重啟即可。
我優(yōu)化了一下Enderman的msdos.bat,把3個批處理整合到1個文件中,代碼如下(直接復(fù)制注意B站的小尾巴)
@echo off
if /i "%USERNAME%"=="SYSTEM" goto init
net.exe session 1>NUL 2>NUL && (goto init) || (goto not_admin)
:init
if "%1"=="" goto help
if "%1"=="/State:Enabled" goto enable
if "%1"=="/State:Disabled" goto disable
if "%1"=="/Reboot" goto reboot
if "%1"=="/Shutdown" goto reboot
if "%1"=="/?" goto help
:enable
echo 正在啟動基于sysprep的命令行模式...
ping localhost -n 3 > nul
echo 正在準(zhǔn)備配置文件...
echo 配置文件路徑:%systemdrive%\dosexec.bat
if not exist "%systemdrive%\dosexec.bat" (
goto addprofile
) else (
goto main
)
:addprofile
echo @echo off > "%systemdrive%\dosexec.bat"
echo title 命令提示符 >> "%systemdrive%\dosexec.bat"
echo echo 正在啟動服務(wù)... >> "%systemdrive%\dosexec.bat"
echo timeout /T 3 /NOBREAK ^> nul >> "%systemdrive%\dosexec.bat"
echo net start ^> NUL >> "%systemdrive%\dosexec.bat"
echo echo 初始化完成! >> "%systemdrive%\dosexec.bat"
echo timeout /T 3 /NOBREAK ^> nul >> "%systemdrive%\dosexec.bat"
echo cls >> "%systemdrive%\dosexec.bat"
echo echo 你現(xiàn)在處于基于sysprep的命令行模式,輸入“dosctl /?”查看幫助。 >> "%systemdrive%\dosexec.bat"
echo echo. >> "%systemdrive%\dosexec.bat"
echo exit /B >> "%systemdrive%\dosexec.bat"
echo ==================== DOSEXEC.BAT ====================
type "%systemdrive%\dosexec.bat"
echo =====================================================
echo.
pause
cls
goto main
:main
echo 正在調(diào)整注冊表...
reg add "HKLM\SYSTEM\Setup" /v CmdLine /t REG_SZ /d "cmd.exe /k %systemdrive%\dosexec.bat" /f > nul
reg add "HKLM\SYSTEM\Setup" /v OOBEInProgress /t REG_DWORD /d 00000001 /f > nul
reg add "HKLM\SYSTEM\Setup" /v SetupPhase /t REG_DWORD /d 00000002 /f > nul
reg add "HKLM\SYSTEM\Setup" /v SetupType /t REG_DWORD /d 00000004 /f > nul
reg add "HKLM\SYSTEM\Setup" /v SystemSetupInProgress /t REG_DWORD /d 00000001 /f > nul
if /i "%2"=="/Mouse" reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableCursorSuppression /t REG_DWORD /d 0 /f > nul
if /i "%2"=="/Mouse" reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f > nul
if /i "%2"=="/Mouse" reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v VerboseStatus /t REG_DWORD /d 1 /f > nul
echo 完成!
echo 計算機(jī)將在15秒內(nèi)重新啟動。
echo 要手動重新啟動,請關(guān)閉此窗口。
echo.
ping localhost -n 15 > nul
shutdown /r /t 0
exit /B
:disable
if /i "%username%"=="SYSTEM" goto system
if /i "%username%"=="" goto warningnotsystem
goto warningnotsystem
:system
echo 正在調(diào)整注冊表...
reg add "HKLM\SYSTEM\Setup" /v CmdLine /t REG_SZ /d "windeploy.exe" /f > nul
reg add "HKLM\SYSTEM\Setup" /v OOBEInProgress /t REG_DWORD /d 00000000 /f > nul
reg add "HKLM\SYSTEM\Setup" /v SetupPhase /t REG_DWORD /d 00000000 /f > nul
reg add "HKLM\SYSTEM\Setup" /v SetupType /t REG_DWORD /d 00000000 /f > nul
reg add "HKLM\SYSTEM\Setup" /v SystemSetupInProgress /t REG_DWORD /d 00000000 /f > nul
reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableCursorSuppression /t REG_DWORD /d 1 /f > nul
reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 1 /f > nul
reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v VerboseStatus /t REG_DWORD /d 0 /f > nul
echo 完成!
echo 正在重新啟動...
shutdown /r /t 0
ping localhost -n 3 > nul
shutdown /r /t 0
ping localhost -n 3 > nul
shutdown /r /t 0
exit /B
:warningnotsystem
echo 當(dāng)前用戶不是 SYSTEM,繼續(xù)嗎?(y/n)
set ask=
set /p ask=Command:
if /i "%ask%"=="y" goto system
if /i "%ask%"=="" exit /B
exit /B
:reboot
echo 正在調(diào)整注冊表...
reg add "HKLM\SYSTEM\Setup" /v CmdLine /t REG_SZ /d "cmd.exe /k %systemdrive%\dosexec.bat" /f > nul
reg add "HKLM\SYSTEM\Setup" /v OOBEInProgress /t REG_DWORD /d 00000001 /f > nul
reg add "HKLM\SYSTEM\Setup" /v SetupPhase /t REG_DWORD /d 00000002 /f > nul
reg add "HKLM\SYSTEM\Setup" /v SetupType /t REG_DWORD /d 00000004 /f > nul
reg add "HKLM\SYSTEM\Setup" /v SystemSetupInProgress /t REG_DWORD /d 00000001 /f > nul
if /i "%2"=="/Mouse" reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableCursorSuppression /t REG_DWORD /d 0 /f > nul
if /i "%2"=="/Mouse" reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f > nul
if /i "%2"=="/Mouse" reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v VerboseStatus /t REG_DWORD /d 1 /f > nul
echo 完成!
if /i "%1"=="/Reboot" (
echo 正在重新啟動...
) else (
echo 正在關(guān)機(jī)...
)
if /i "%1"=="/Reboot" (
shutdown /r /t 0
) else (
shutdown /s /t 0
)
ping localhost -n 3 > nul
if /i "%1"=="/Reboot" (
shutdown /r /t 0
) else (
shutdown /s /t 0
)
ping localhost -n 3 > nul
if /i "%1"=="/Reboot" (
shutdown /r /t 0
) else (
shutdown /s /t 0
)
exit /B
:help
echo 進(jìn)入基于sysprep的命令行模式。
echo 用法:
echo dosctl.exe ^<Options^> [/Mouse]
echo Option: /State:{Enabled ^| Disabled} ^| /Reboot ^| /Shutdown
echo /State用法:
echo Enabled:進(jìn)入環(huán)境
echo Disabled:退出環(huán)境
echo.
echo /Reboot:在環(huán)境中重啟計算機(jī)
echo /Shutdown:在環(huán)境中關(guān)閉計算機(jī)
echo.
echo /Mouse:顯示鼠標(biāo)指針(/State為Disabled時,此命令無效。)
exit /B
:not_admin
echo 錯誤:拒絕訪問。
exit /B
把上面內(nèi)容復(fù)制,去掉小尾巴后保存為C:\Windows\dosctl.bat
在具有管理權(quán)限的命令提示符下輸入 dosctl /State:Enabled /Mouse
重啟后若想退出,輸入 dosctl /State:Disabled
若想在sysprep環(huán)境下重啟,輸入?dosctl /Reboot
若想在sysprep環(huán)境下關(guān)機(jī),輸入 dosctl /Shutdown即可。