防止批处理文件被编辑
Keep batch file from being edited
我可以为批处理锁定或设置密码吗file/script,我已经制作了一个脚本,但我不希望我的工作人员更改它。他们必须能够 运行 但不能编辑它。
这可能吗?如何实现?
我搜索过,但找不到。我找到了所有关于如何锁定 PC 或其他东西但不是我的批处理 file/script 并且 Q 不是如何隐藏我的脚本或其他东西但是如果你想编辑它,它会给出错误或者如果你点击编辑它不起作用。
简答:否
长答案:不,不可能
你可以混淆它,但你不能隐藏来源。
cmd.exe 必须以某种方式执行您的批处理,因此它必须看到命令,但是当 cmd.exe 可以看到您的命令时,其他人也可以看到它们。
如果您只想锁定文件进行编辑,您可以使用上述两种方式:
然后使用 attrib
可以通过添加只读或隐藏属性(如提到的@JanDoggen)来解决它。
或者通过更改安全设置(如提到的@mstth)更安全的方式
但这只会阻止 changes 绝对菜鸟。
这是不可能的,但是您可以使用这个技巧制作一个 c/c++ 程序,该程序只需从 system() 函数中调用这些命令。在这种情况下,您的命令将在某种程度上被隐藏,他们将无法更改它。
如果您的用户不是很熟练,也许您可以隐藏您的批处理文件并从另一个文件调用它:
One.bat
@echo off
two
Two.bat
@echo off
echo this is 2
pause
将 two.bat
的属性设置为 -h
(也许 -r
)。
然后调用one.bat
。刚刚在 Win7 下测试了这个,令我惊讶的是它有效。
但是如果您的同事知道如何更改文件属性,这并不能解决您的问题。
如果您不希望他们能够提交对文件的更改,只需设置文件权限,只允许您(或某些管理员组)修改文件。
此命令将删除继承的 ACL 条目,授予您完全权限,并授予其他所有人读取权限:
icacls your_file.cmd /inheritance:r /grant youruserid:F /grant everyone:RX
关于这个话题多说几句。
无法避免其他人可以访问您的批处理文件;但是,如果你想避免其他人可以 审查 批处理文件内容(这样他们就不能修改它的任何部分)那么有几种方法可以做到这一点,包括将文件转换为.exe 格式,尽管这些方法中没有一种可以针对确定的用户提供完全保护。
这里的要点是使用对您来说足够简单的方法,这样您可以毫无问题地实施它,但对其他人来说又足够复杂,这样可以阻止您的用户尝试破坏它。我提出了一种基于 JScript 源程序的编码过程的解决方案,这不是一种广为人知的方法,因此它甚至可以保护不了解它的适当信息的高级用户。这是:
@if (@CodeSection == @Batch) @then
@echo off
setlocal DisableDelayedExpansion
REM Obfuscate.bat: Obfuscate Batch files
REM Antonio Perez Ayala
if "%~1" equ "" echo Usage: Obfuscate filename.bat & goto :EOF
if not exist "%~1" echo File not found: "%~1" & goto :EOF
set "at=@"
set "pass=%random%"
(
echo %at%if (@Pass == @X%pass%^) @begin
echo @echo off
echo CScript //nologo //E:JScript.Encode "%%~F0" ^> %pass%.bat
echo call %pass%
echo del %pass%.bat
echo exit /B
echo %at%end
echo //**Start Encode**
echo var a = new Array(^);
set "i=0"
for /F "usebackq delims=" %%a in ("%~1") do (
set /A i+=1
set "line=%%a"
setlocal EnableDelayedExpansion
echo a[!i!] = '!line:'=\x27!';
endlocal
)
setlocal EnableDelayedExpansion
echo for ( var i=1; i^<=!i!; ++i ^) WScript.Stdout.WriteLine(a[i]^);
) > "%~N1.tmp"
CScript //nologo //E:JScript "%~F0" "%~N1.tmp"
del "%~N1.tmp"
goto :EOF
@end
// Encode a JScript source file
// Antonio Perez Ayala
var fileToEncode = WScript.Arguments(0);
// Read the source file
var oFSO = WScript.CreateObject("Scripting.FileSystemObject");
var oFile = oFSO.GetFile(fileToEncode);
var oStream = oFile.OpenAsTextStream(1);
var sSourceFile = oStream.ReadAll();
oStream.Close();
// Encode the file
var oEncoder = WScript.CreateObject("Scripting.Encoder");
var sDest = oEncoder.EncodeScriptFile(".js",sSourceFile,0,"")
// Write the encoded version
var sFileOut = fileToEncode.slice(0,-3)+"obf.bat";
var oEncFile = oFSO.CreateTextFile(sFileOut);
oEncFile.Write(sDest);
oEncFile.Close();
将此程序复制为 Obfuscate.bat 并使用它在参数中提供您的批处理文件;之后,将创建一个扩展名为 .obf.bat 的新文件,其工作方式与原始文件相同,但其内容以不可读的方式编码。例如:
C:\> type test.bat
@echo off
echo Hello World
C:\> Obfuscate test.bat
C:\> type test.obf.bat
@if (@Pass == @X20203) @begin
@echo off
CScript //nologo //E:JScript.Encode "%~F0" > 20203.bat
call 20203
del 20203.bat
exit /B
@end
//**Start Encode**#@~^kQAAAA==@#@&\CMPmP',x⌂APzD.lH`bI@#@&l]qT,'PE@$nm4W,WW0vI@#
@&C$yDP{Pvn1tW~u⌂VsW, KDs9Bp@#@&6WM~`,\CD,kxqpPk@!x pP_3r~#,⌂Um.k2Oc?ONK;Yc⌂.r
D+SrU⌂`C$bD*i@#@&kiYAAA==^#~@
C:\> test.obf.bat
Hello World
我在 Windows XP 和 Windows 8 中测试了这个方法。
我试着批量制作这个。我想这个文件可能有点帮助,它使用加密密码方法。您可以将批处理文件包装到一个加密的 exe 文件中,如果您想要混淆代码,甚至可能添加一个字节顺序标记,使其他人更难获得您的密码,只需询问即可,我会为您做到这一点。您也可以通过这样做自动设置文件;创建后转到 "PasswordOptions.bat" 文件,设置密码,取消隐藏密码文件,然后打开密码文件夹,将 "Pswrd.Zask" 和 "Key.Zask" 文件复制并粘贴到不同的文件夹中,然后留着以后用,最后重设密码。
@echo off
title Zask's password encrypted batch file
color 0a
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º Zask's password encrypted batch file º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
if not exist "C:\Pswrd.Zask\" (
mkdir "C:\Pswrd.Zask\"
if "!errorlevel!" EQU "0" (
goto DirectoryExist
) else (
echo Created the folder "C:\Pswrd.Zask" & timeout /t 5 /nobreak
)
) else (
goto DirectoryExist
)
:DirectoryExist
if exist C:\Pswrd.Zask\Key.Zask (
goto UsernameExist
) else (
goto CreatePasswordScreen
)
:UsernameExist
for /f "Delims=" %%A in (C:\Pswrd.Zask\Password.Zask) do (
set CHECKPASSWORD=%%A
)
for /f "Delims=" %%B in (C:\Pswrd.Zask\Key.Zask) do (
set CHECKKEY=%%B
)
goto PasswordScreen
:CreatePasswordScreen
cls
echo Create a password.
echo.
setlocal EnableDelayedExpansion
set /p "CREATEPASSWORD= Enter password : "
set /p "CREATEKEY= Enter a key number (Choose a number 2-200) : "
set CHAR=0123456789bhfcjrwmudaxopvntzlqeisykg
for /l %%C in (10 1 36) do (
for /f %%D in ("!CHAR:~%%C,1!") do (
set /a MATH=%%C*%CREATEKEY%
for /f %%E in ("!MATH!") do (
set "CREATEPASSWORD=!CREATEPASSWORD:%%D=-%%E!"
)
)
)
echo %CREATEPASSWORD% >> C:\Pswrd.Zask\Password.Zask
attrib C:\Pswrd.Zask\Password.Zask +s +h & echo. & echo Password Created!
echo %CREATEKEY% >> C:\Pswrd.Zask\Key.Zask
attrib C:\Pswrd.Zask\Key.Zask +s +h & echo Username Created!
echo.
if exist "%~dp0ResetPassword.bat" (
del "%~dp0ResetPassword.bat" )
:ResetPassword
set /p "RESETOPTION=Would you like to create the password options file in the current directory (Y/N)? : "
if /i %RESETOPTION%==Y goto ResetOptions
if /i %RESETOPTION%==N goto SkipResetOptions
:ResetOptions
echo @echo off >> PasswordOptions.bat
echo title ResetPassword.bat >> PasswordOptions.bat
echo color 0a >> PasswordOptions.bat
echo :start >> PasswordOptions.bat
echo. >> PasswordOptions.bat
echo echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» >> PasswordOptions.bat
echo echo º This file is used to reset your password, hide it for future purposes or delete it º >> PasswordOptions.bat
echo echo º to avoid other users from removing your password. You have 5 options º >> PasswordOptions.bat
echo echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ >> PasswordOptions.bat
echo echo. >> PasswordOptions.bat
echo echo 1 - Reset password. >> PasswordOptions.bat
echo echo 2 - Open password folder. >> PasswordOptions.bat
echo echo 3 - Unhide files in the password folder. >> PasswordOptions.bat
echo echo 4 - Hide files in the password folder. >> PasswordOptions.bat
echo echo 5 - Exit dialog. >> PasswordOptions.bat
echo echo. >> PasswordOptions.bat
echo set /p "OPTIONS=Chose a number to select that option : " >> PasswordOptions.bat
echo if %%OPTIONS%%==1 goto PasswordReset >> PasswordOptions.bat
echo if %%OPTIONS%%==2 start C:\Pswrd.Zask ^& cls ^& goto start >> PasswordOptions.bat
echo if %%OPTIONS%%==3 attrib C:\Pswrd.Zask\Password.Zask -s -h ^& attrib C:\Pswrd.Zask\Key.Zask -s -h ^& cls ^& goto start >> PasswordOptions.bat
echo if %%OPTIONS%%==4 attrib C:\Pswrd.Zask\Password.Zask +s +h ^& attrib C:\Pswrd.Zask\Key.Zask +s +h ^& cls ^& goto start >> PasswordOptions.bat
echo if %%OPTIONS%%==5 exit >> PasswordOptions.bat
echo. >> PasswordOptions.bat
echo :PasswordReset >> PasswordOptions.bat
echo cls >> PasswordOptions.bat
echo set /p "RESET=Are you sure you want to reset your password (Y/N)? : " >> PasswordOptions.bat
echo if /i %%RESET%%==Y goto ResetPassword >> PasswordOptions.bat
echo if /i %%RESET%%==N goto start >> PasswordOptions.bat
echo cls >> PasswordOptions.bat
echo. >> PasswordOptions.bat
echo :ResetPassword >> PasswordOptions.bat
echo rd /s /q "C:\Pswrd.Zask" >> PasswordOptions.bat
echo echo Password was deleted! >> PasswordOptions.bat
echo pause >> PasswordOptions.bat
echo del %%~n0%%~x0 >> PasswordOptions.bat
echo exit >> PasswordOptions.bat
cls
echo. & echo Created file "%~dp0ResetPassword.bat" & timeout /t 5 /nobreak
:SkipResetOptions
start %~n0%~x0
exit
:PasswordScreen
color 0a
cls
echo Existing User Account.
echo.
setlocal EnableDelayedExpansion
set /p "PASSWORD= Enter Password : "
set /p "KEY= Enter the original encryption key : "
set CHAR=0123456789bhfcjrwmudaxopvntzlqeisykg
for /l %%C in (10 1 36) do (
for /f %%D in ("!CHAR:~%%C,1!") do (
set /a MATH=%%C*%CHECKKEY%
for /f %%E in ("!MATH!") do (
set "CHECKPASSWORD=!CHECKPASSWORD:%%E=%%D!"
)
)
)
for /f %%F in ("!CHECKPASSWORD!") do (
set "CHECKPASSWORD=!CHECKPASSWORD:-=!"
)
if %PASSWORD%==%CHECKPASSWORD% (
goto Operation1True
) else (
goto OperationFalse
)
:Operation1True
if %KEY%==%CHECKKEY% (
goto Operation2True
) else (
goto OperationFalse
)
:OperationFalse
color 0c
echo Password Incorrect!
timeout /t 10 /nobreak
goto PasswordScreen
:Operation2True
cls
echo Password Correct!
echo.
pause
REM YOUR CODE GOES HERE.
REM YOU CAN CONVERT THIS IS INTO A EXE FILE IF WANTED.
REM FREE TO MODIFY ANY CONTENT IN THIS FILE FOR BUSINESS OR PERSONAL REASONS.
您可以像这样在文件的开头设置一个属性:
@echo off
attrib +R
我可以为批处理锁定或设置密码吗file/script,我已经制作了一个脚本,但我不希望我的工作人员更改它。他们必须能够 运行 但不能编辑它。
这可能吗?如何实现?
我搜索过,但找不到。我找到了所有关于如何锁定 PC 或其他东西但不是我的批处理 file/script 并且 Q 不是如何隐藏我的脚本或其他东西但是如果你想编辑它,它会给出错误或者如果你点击编辑它不起作用。
简答:否
长答案:不,不可能
你可以混淆它,但你不能隐藏来源。
cmd.exe 必须以某种方式执行您的批处理,因此它必须看到命令,但是当 cmd.exe 可以看到您的命令时,其他人也可以看到它们。
如果您只想锁定文件进行编辑,您可以使用上述两种方式:
然后使用 attrib
可以通过添加只读或隐藏属性(如提到的@JanDoggen)来解决它。
或者通过更改安全设置(如提到的@mstth)更安全的方式
但这只会阻止 changes 绝对菜鸟。
这是不可能的,但是您可以使用这个技巧制作一个 c/c++ 程序,该程序只需从 system() 函数中调用这些命令。在这种情况下,您的命令将在某种程度上被隐藏,他们将无法更改它。
如果您的用户不是很熟练,也许您可以隐藏您的批处理文件并从另一个文件调用它:
One.bat
@echo off
two
Two.bat
@echo off
echo this is 2
pause
将 two.bat
的属性设置为 -h
(也许 -r
)。
然后调用one.bat
。刚刚在 Win7 下测试了这个,令我惊讶的是它有效。
但是如果您的同事知道如何更改文件属性,这并不能解决您的问题。
如果您不希望他们能够提交对文件的更改,只需设置文件权限,只允许您(或某些管理员组)修改文件。
此命令将删除继承的 ACL 条目,授予您完全权限,并授予其他所有人读取权限:
icacls your_file.cmd /inheritance:r /grant youruserid:F /grant everyone:RX
关于这个话题多说几句。
无法避免其他人可以访问您的批处理文件;但是,如果你想避免其他人可以 审查 批处理文件内容(这样他们就不能修改它的任何部分)那么有几种方法可以做到这一点,包括将文件转换为.exe 格式,尽管这些方法中没有一种可以针对确定的用户提供完全保护。
这里的要点是使用对您来说足够简单的方法,这样您可以毫无问题地实施它,但对其他人来说又足够复杂,这样可以阻止您的用户尝试破坏它。我提出了一种基于 JScript 源程序的编码过程的解决方案,这不是一种广为人知的方法,因此它甚至可以保护不了解它的适当信息的高级用户。这是:
@if (@CodeSection == @Batch) @then
@echo off
setlocal DisableDelayedExpansion
REM Obfuscate.bat: Obfuscate Batch files
REM Antonio Perez Ayala
if "%~1" equ "" echo Usage: Obfuscate filename.bat & goto :EOF
if not exist "%~1" echo File not found: "%~1" & goto :EOF
set "at=@"
set "pass=%random%"
(
echo %at%if (@Pass == @X%pass%^) @begin
echo @echo off
echo CScript //nologo //E:JScript.Encode "%%~F0" ^> %pass%.bat
echo call %pass%
echo del %pass%.bat
echo exit /B
echo %at%end
echo //**Start Encode**
echo var a = new Array(^);
set "i=0"
for /F "usebackq delims=" %%a in ("%~1") do (
set /A i+=1
set "line=%%a"
setlocal EnableDelayedExpansion
echo a[!i!] = '!line:'=\x27!';
endlocal
)
setlocal EnableDelayedExpansion
echo for ( var i=1; i^<=!i!; ++i ^) WScript.Stdout.WriteLine(a[i]^);
) > "%~N1.tmp"
CScript //nologo //E:JScript "%~F0" "%~N1.tmp"
del "%~N1.tmp"
goto :EOF
@end
// Encode a JScript source file
// Antonio Perez Ayala
var fileToEncode = WScript.Arguments(0);
// Read the source file
var oFSO = WScript.CreateObject("Scripting.FileSystemObject");
var oFile = oFSO.GetFile(fileToEncode);
var oStream = oFile.OpenAsTextStream(1);
var sSourceFile = oStream.ReadAll();
oStream.Close();
// Encode the file
var oEncoder = WScript.CreateObject("Scripting.Encoder");
var sDest = oEncoder.EncodeScriptFile(".js",sSourceFile,0,"")
// Write the encoded version
var sFileOut = fileToEncode.slice(0,-3)+"obf.bat";
var oEncFile = oFSO.CreateTextFile(sFileOut);
oEncFile.Write(sDest);
oEncFile.Close();
将此程序复制为 Obfuscate.bat 并使用它在参数中提供您的批处理文件;之后,将创建一个扩展名为 .obf.bat 的新文件,其工作方式与原始文件相同,但其内容以不可读的方式编码。例如:
C:\> type test.bat
@echo off
echo Hello World
C:\> Obfuscate test.bat
C:\> type test.obf.bat
@if (@Pass == @X20203) @begin
@echo off
CScript //nologo //E:JScript.Encode "%~F0" > 20203.bat
call 20203
del 20203.bat
exit /B
@end
//**Start Encode**#@~^kQAAAA==@#@&\CMPmP',x⌂APzD.lH`bI@#@&l]qT,'PE@$nm4W,WW0vI@#
@&C$yDP{Pvn1tW~u⌂VsW, KDs9Bp@#@&6WM~`,\CD,kxqpPk@!x pP_3r~#,⌂Um.k2Oc?ONK;Yc⌂.r
D+SrU⌂`C$bD*i@#@&kiYAAA==^#~@
C:\> test.obf.bat
Hello World
我在 Windows XP 和 Windows 8 中测试了这个方法。
我试着批量制作这个。我想这个文件可能有点帮助,它使用加密密码方法。您可以将批处理文件包装到一个加密的 exe 文件中,如果您想要混淆代码,甚至可能添加一个字节顺序标记,使其他人更难获得您的密码,只需询问即可,我会为您做到这一点。您也可以通过这样做自动设置文件;创建后转到 "PasswordOptions.bat" 文件,设置密码,取消隐藏密码文件,然后打开密码文件夹,将 "Pswrd.Zask" 和 "Key.Zask" 文件复制并粘贴到不同的文件夹中,然后留着以后用,最后重设密码。
@echo off
title Zask's password encrypted batch file
color 0a
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo º Zask's password encrypted batch file º
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
if not exist "C:\Pswrd.Zask\" (
mkdir "C:\Pswrd.Zask\"
if "!errorlevel!" EQU "0" (
goto DirectoryExist
) else (
echo Created the folder "C:\Pswrd.Zask" & timeout /t 5 /nobreak
)
) else (
goto DirectoryExist
)
:DirectoryExist
if exist C:\Pswrd.Zask\Key.Zask (
goto UsernameExist
) else (
goto CreatePasswordScreen
)
:UsernameExist
for /f "Delims=" %%A in (C:\Pswrd.Zask\Password.Zask) do (
set CHECKPASSWORD=%%A
)
for /f "Delims=" %%B in (C:\Pswrd.Zask\Key.Zask) do (
set CHECKKEY=%%B
)
goto PasswordScreen
:CreatePasswordScreen
cls
echo Create a password.
echo.
setlocal EnableDelayedExpansion
set /p "CREATEPASSWORD= Enter password : "
set /p "CREATEKEY= Enter a key number (Choose a number 2-200) : "
set CHAR=0123456789bhfcjrwmudaxopvntzlqeisykg
for /l %%C in (10 1 36) do (
for /f %%D in ("!CHAR:~%%C,1!") do (
set /a MATH=%%C*%CREATEKEY%
for /f %%E in ("!MATH!") do (
set "CREATEPASSWORD=!CREATEPASSWORD:%%D=-%%E!"
)
)
)
echo %CREATEPASSWORD% >> C:\Pswrd.Zask\Password.Zask
attrib C:\Pswrd.Zask\Password.Zask +s +h & echo. & echo Password Created!
echo %CREATEKEY% >> C:\Pswrd.Zask\Key.Zask
attrib C:\Pswrd.Zask\Key.Zask +s +h & echo Username Created!
echo.
if exist "%~dp0ResetPassword.bat" (
del "%~dp0ResetPassword.bat" )
:ResetPassword
set /p "RESETOPTION=Would you like to create the password options file in the current directory (Y/N)? : "
if /i %RESETOPTION%==Y goto ResetOptions
if /i %RESETOPTION%==N goto SkipResetOptions
:ResetOptions
echo @echo off >> PasswordOptions.bat
echo title ResetPassword.bat >> PasswordOptions.bat
echo color 0a >> PasswordOptions.bat
echo :start >> PasswordOptions.bat
echo. >> PasswordOptions.bat
echo echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» >> PasswordOptions.bat
echo echo º This file is used to reset your password, hide it for future purposes or delete it º >> PasswordOptions.bat
echo echo º to avoid other users from removing your password. You have 5 options º >> PasswordOptions.bat
echo echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ >> PasswordOptions.bat
echo echo. >> PasswordOptions.bat
echo echo 1 - Reset password. >> PasswordOptions.bat
echo echo 2 - Open password folder. >> PasswordOptions.bat
echo echo 3 - Unhide files in the password folder. >> PasswordOptions.bat
echo echo 4 - Hide files in the password folder. >> PasswordOptions.bat
echo echo 5 - Exit dialog. >> PasswordOptions.bat
echo echo. >> PasswordOptions.bat
echo set /p "OPTIONS=Chose a number to select that option : " >> PasswordOptions.bat
echo if %%OPTIONS%%==1 goto PasswordReset >> PasswordOptions.bat
echo if %%OPTIONS%%==2 start C:\Pswrd.Zask ^& cls ^& goto start >> PasswordOptions.bat
echo if %%OPTIONS%%==3 attrib C:\Pswrd.Zask\Password.Zask -s -h ^& attrib C:\Pswrd.Zask\Key.Zask -s -h ^& cls ^& goto start >> PasswordOptions.bat
echo if %%OPTIONS%%==4 attrib C:\Pswrd.Zask\Password.Zask +s +h ^& attrib C:\Pswrd.Zask\Key.Zask +s +h ^& cls ^& goto start >> PasswordOptions.bat
echo if %%OPTIONS%%==5 exit >> PasswordOptions.bat
echo. >> PasswordOptions.bat
echo :PasswordReset >> PasswordOptions.bat
echo cls >> PasswordOptions.bat
echo set /p "RESET=Are you sure you want to reset your password (Y/N)? : " >> PasswordOptions.bat
echo if /i %%RESET%%==Y goto ResetPassword >> PasswordOptions.bat
echo if /i %%RESET%%==N goto start >> PasswordOptions.bat
echo cls >> PasswordOptions.bat
echo. >> PasswordOptions.bat
echo :ResetPassword >> PasswordOptions.bat
echo rd /s /q "C:\Pswrd.Zask" >> PasswordOptions.bat
echo echo Password was deleted! >> PasswordOptions.bat
echo pause >> PasswordOptions.bat
echo del %%~n0%%~x0 >> PasswordOptions.bat
echo exit >> PasswordOptions.bat
cls
echo. & echo Created file "%~dp0ResetPassword.bat" & timeout /t 5 /nobreak
:SkipResetOptions
start %~n0%~x0
exit
:PasswordScreen
color 0a
cls
echo Existing User Account.
echo.
setlocal EnableDelayedExpansion
set /p "PASSWORD= Enter Password : "
set /p "KEY= Enter the original encryption key : "
set CHAR=0123456789bhfcjrwmudaxopvntzlqeisykg
for /l %%C in (10 1 36) do (
for /f %%D in ("!CHAR:~%%C,1!") do (
set /a MATH=%%C*%CHECKKEY%
for /f %%E in ("!MATH!") do (
set "CHECKPASSWORD=!CHECKPASSWORD:%%E=%%D!"
)
)
)
for /f %%F in ("!CHECKPASSWORD!") do (
set "CHECKPASSWORD=!CHECKPASSWORD:-=!"
)
if %PASSWORD%==%CHECKPASSWORD% (
goto Operation1True
) else (
goto OperationFalse
)
:Operation1True
if %KEY%==%CHECKKEY% (
goto Operation2True
) else (
goto OperationFalse
)
:OperationFalse
color 0c
echo Password Incorrect!
timeout /t 10 /nobreak
goto PasswordScreen
:Operation2True
cls
echo Password Correct!
echo.
pause
REM YOUR CODE GOES HERE.
REM YOU CAN CONVERT THIS IS INTO A EXE FILE IF WANTED.
REM FREE TO MODIFY ANY CONTENT IN THIS FILE FOR BUSINESS OR PERSONAL REASONS.
您可以像这样在文件的开头设置一个属性:
@echo off
attrib +R