我简化了Enderman的MS-DOS模式!
如果你看过这个视频(【末影人】Windows 10 的 MS-DOS模式),那么你就可以将电脑重启进命令行模式。
这个模式就是Sysprep阶段。
现在,让我们分析一下Enderman msdos.bat中的代码。
第4行至第34行是提权代码,不管
41行至47行内容如下:
我们知道,HKLM\SYSTEM\Setup主要管理系统安装

其中CmdLine的内容是系统准备阶段执行的部署程序。
windeploy.exe在C:\windows\system32\oobe中,管理系统部署。
我们把它换成别的,例如cmd.exe,sysprep就会执行CMD
SetupPhase表示安装阶段,2表示sysprep阶段
SetupType表示安装类型,4表示全新安装
OOBEInProgress表示是否在OOBE下,SystemSetupInProgress表示是否在系统部署阶段下。
我们先写一个批处理脚本。
@echo off
title 命令提示符
echo 正在启动服务...
net start > nul
timeout /T 3 /NOBREAK > NUL
cls
echo 你现在处于基于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
重启电脑,是不是进入了命令行?
如果想返回Windows,在命令行下打开regedit,把HKLM\SYSTEM\Setup下的CmdLine改成windeploy.exe,再把所有DWORD键的值改成0,输入shutdown /r /t 0重启即可。
我优化了一下Enderman的msdos.bat,把3个批处理整合到1个文件中,代码如下(直接复制注意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 正在准备配置文件...
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 正在启动服务... >> "%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 你现在处于基于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 正在调整注册表...
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 计算机将在15秒内重新启动。
echo 要手动重新启动,请关闭此窗口。
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 正在调整注册表...
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 当前用户不是 SYSTEM,继续吗?(y/n)
set ask=
set /p ask=Command:
if /i "%ask%"=="y" goto system
if /i "%ask%"=="" exit /B
exit /B
:reboot
echo 正在调整注册表...
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 正在关机...
)
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 进入基于sysprep的命令行模式。
echo 用法:
echo dosctl.exe ^<Options^> [/Mouse]
echo Option: /State:{Enabled ^| Disabled} ^| /Reboot ^| /Shutdown
echo /State用法:
echo Enabled:进入环境
echo Disabled:退出环境
echo.
echo /Reboot:在环境中重启计算机
echo /Shutdown:在环境中关闭计算机
echo.
echo /Mouse:显示鼠标指针(/State为Disabled时,此命令无效。)
exit /B
:not_admin
echo 错误:拒绝访问。
exit /B
把上面内容复制,去掉小尾巴后保存为C:\Windows\dosctl.bat
在具有管理权限的命令提示符下输入 dosctl /State:Enabled /Mouse
重启后若想退出,输入 dosctl /State:Disabled
若想在sysprep环境下重启,输入 dosctl /Reboot
若想在sysprep环境下关机,输入 dosctl /Shutdown即可。