【问题标题】:BATCH: preventing someone from using CTRL c or CTRL BREAK to bypass my password scriptBATCH:防止某人使用 CTRL c 或 CTRL BREAK 绕过我的密码脚本
【发布时间】:2018-12-19 23:54:03
【问题描述】:
@echo off
:home
cd c:/
IF EXIST "%PROGRAMFILES(X86)%" (set bit=x64) ELSE (set bit=x86)
title Log in to CMD
color f0
cls
echo.
echo              Cmd Accounts
echo ======================================
echo.
echo [1]  Log In  (access existing Account)
echo.
echo [2]  Register (add an account)
echo.
echo [3]  Delete Account (remove an account)
echo.
echo ============Ethans Security===========
echo.
set RegisterVal=0
set DeleteAcc=0
set /p op=
if %op%==1 goto Login
if %op%==2 goto setReg
if %op%==3 goto setDel
goto home
:setReg
set RegisterVal=1
goto Login
:setDel
set DeleteAcc=1
goto Login
:Login
cls
cd c:/
mkdir enxlogin
cd enxlogin
cls
echo              Cmd Login
echo ======================================
echo.
set /p logName="Enter your username:"
EditV64 -m -p 'Enter your Password:' logPass
EditV32 -m -p 'Enter your Password:' logPass
if exist %logName%.txt goto continue
cls
color fc
echo              Cmd Login
echo ======================================
echo.
echo Acces Denied
pause
goto home
:continue
set /p var= <%logName%.txt
set actPass=%var%
call enx actPass actPass
if %logPass%==%actPass% goto logdone
color fc
cls
echo              Cmd Login
echo ======================================
echo.
echo Acces Denied
pause
goto home
:Register
cd c:/
mkdir enxlogin
cd enxlogin
cls
echo              Cmd Register
echo ======================================
echo.
set /p regName="Enter new username:"
set /p regPass="Enter new password:"
set regName=%regName%
set regPass=%regPass%
call enx regPass regPass
echo %regPass%>%regName%.txt
set regName=NUL
set regPass=NUL
cls
echo             Cmd Register
echo ======================================
echo.
echo Acount Successfully Created
echo.
pause
goto home
:DelAccount
cd c:/
mkdir enxlogin
cd enxlogin
cls
echo            Cmd Delete Account
echo ======================================
echo.
echo Account List
echo ------------
for %%a in ("c:\enxlogin\*") do @echo %%~na
echo.
echo Enter the Account you want to delete:
set /p deletingAcc="Account Name:"
if exist %deletingAcc%.txt goto delaccountnow
cls

echo Account not found
pause
goto DelAccount
echo            Cmd Delete Account
echo ======================================
echo.
:delaccountnow
del %deletingAcc%.txt
cls
echo            Cmd Delete Account
echo ======================================
echo.
echo Successfully Deleted Account
pause
goto home
:logdone
if %RegisterVal%==1 goto Register
if %DeleteAcc%==1 goto DelAccount
set Register=0
set actPass=NUL
set logPass=NUL
cls
echo              Cmd Login
echo ======================================
echo.
echo Successfully logged in!
echo.
pause
color 0f
cd "%userprofile%\Desktop"
cls
exit

这是我的批处理密码脚本,它在启动 cmd 或批处理文件时运行,但是当用户按下 ctrl-c 或 ctrl-break 时,它会绕过登录脚本

这是发生了什么我运行 cmd 它启动了所有工作但是当我按下 CTRL-C 时它退出并返回到正常的 CMD 所以你可以再弄乱 cmd 这应该是为了保护人们不要弄乱我的 cmd酷炫的风格

【问题讨论】:

  • break 命令应该这样做,但它不再起作用(参见break /?)。但即使有可能——它也不会阻止任何知道如何拼写“batch”的人来弄乱你的 bat 文件。
  • ...如果您的脚本完全阻止 CMD,有些人会知道如何按 Win+R 并在没有 CMD 的情况下执行相同操作。
  • 它仍然会阻止 PowerShell

标签: batch-file cmd break


【解决方案1】:

下面的批处理文件不能用 Ctrl-C 取消,如果用 Ctrl-Break 取消,cmd.exe 窗口将关闭,因此用户永远无法访问正常的 cmd.exe 命令行会话 通过这个批处理文件。

@echo off
setlocal

if "%~1" equ "NonCancelable" goto NonCancelable
start "" /B cmd /C "%~F0" NonCancelable
exit

:NonCancelable
echo You can NOT cancel me!
echo/
set "var="
set /P "var=Enter password (enter Exit to end): "
if /I "%var%" neq "exit" goto :NonCancelable
echo Terminating non cancelable...
pause
exit

【讨论】:

  • 当我的脚本正在使用中时,CTRL-BREAK 仍然会带您进入命令行即时通讯,使用 cmd 自动运行功能在 cmd 启动时执行我的脚本
  • 请以这种方式无修改测试上述代码。
  • 您还必须在自动运行行中指定如下内容:c:\full\path\to\the\BatchFile.bat &amp; exit
  • 那么当我完成登录时它不会把我带到控制台
  • 这样做是因为如果我运行一个批处理文件,我希望它返回并继续执行 bach 文件
【解决方案2】:

我遇到了同样的问题。

当通过 ctrl+C 终止批处理脚本时,一个 cmd 会话会在 Bathscript 的 %CD% 目录处启动。我通过另一个批处理脚本启动批处理脚本解决了这个问题,如下所示:

::launcher
@ECHO off
CD "directory of the batch script"
batchscript.cmd
EXIT

当 batchscript.cmd 被 ctrl+C 终止时,它会返回到启动器,该启动器会因为 EXIT 语句而立即关闭

(以管理员身份运行时需要CD语句。这是因为批处理脚本的CD变量将等于C:\Windows\System32。但是如果批处理脚本的目录可以省略CD语句包含在 PATH 变量中)

【讨论】:

  • 对我来说这两个都关闭了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-16
  • 1970-01-01
相关资源
最近更新 更多