欢迎光临散文网 会员登陆 & 注册

我简化了Enderman的MS-DOS模式!

2022-07-29 09:13 作者:SYSTEM-RAMOS-NZY  | 我要投稿

如果你看过这个视频(【末影人】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即可。


我简化了Enderman的MS-DOS模式!的评论 (共 条)

分享到微博请遵守国家法律