我是否可以锁定或设置批处理文件/脚本的密码,我已制作了一个脚本,但我不希望我的工作人员更改它。他们必须能够运行它但不能编辑它。
这可能吗?如何?
我已经搜索过但我无法找到它。我发现所有关于如何锁定PC或其他东西,但不是我的批处理文件/脚本和Q不是如何隐藏我的脚本或东西,但如果你想编辑它,它会出错,或者如果你点击编辑它不#39; t work。
答案 0 :(得分:4)
如果您不希望他们能够提交对文件的更改,只需设置文件权限,只允许您(或某个管理员组)修改文件。
此命令将删除继承的ACL条目,授予您完全权限,并授予其他所有人读取权限:
icacls your_file.cmd /inheritance:r /grant youruserid:F /grant everyone:RX
答案 1 :(得分:0)
不可能但是你可以使用这个技巧制作一个简单地从system()函数调用这些cmd的c / c ++程序。在这种情况下,您的命令将在某种程度上被隐藏,并且他们无法更改它。
答案 2 :(得分:0)
如果您的用户不是很复杂,也许您可以隐藏批处理文件并从另一个文件中调用它:
One.bat
@echo off
two
Two.bat
@echo off
echo this is 2
pause
将two.bat
的属性设置为-h
(也许-r
)
然后拨打one.bat
。刚刚在Win7下对此进行了测试,令我惊讶的是它有效。
但如果您工作的人知道如何更改文件属性,则无法解决您的问题。
答案 3 :(得分:0)
关于这个主题的一个词。
无法避免其他人访问到您的批处理文件;但是,如果你想避免其他人可以审查批处理文件内容(因此他们无法修改它的任何部分),那么有几种方法可以做到这一点,包括将文件转换为.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中测试了这种方法。
答案 4 :(得分:0)
我试图批量制作。我想这个文件可能有点帮助,它使用加密的密码方法。您可以将批处理文件包装到加密的exe文件中,如果您希望代码被混淆,甚至可能添加字节顺序标记,以使其他人更难以获取您的密码,我将为您执行此操作。您也可以通过这样做自动设置文件;创建后转到“PasswordOptions.bat”文件,设置密码,取消隐藏密码文件,打开密码文件夹,复制并粘贴“Pswrd.Zask”&amp; “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.
答案 5 :(得分:0)
您可以在文件开头设置一个属性,如下所示:
@echo off
attrib +R
答案 6 :(得分:-1)
简答:否
答案很长:不,这是不可能的
您可以对其进行模糊处理,但无法隐藏来源 不知何故,cmd.exe必须执行您的批处理,因此必须查看命令,但是当cmd.exe可以看到您的命令时,一个人也可以看到它们。
由于您只想锁定文件进行编辑,您可以使用上述两种方式:
然后使用attrib
可以通过添加只读或隐藏属性来解决它(如提到的@JanDoggen)。
或者通过更改安全设置(如@mstth提到的)
但这只会阻止绝对新手的更改。
答案 7 :(得分:-1)
下载Dr.Batcher,有可能将.bat文件更改为.exe文件,但警告,Dr.Batcher有时需要自己的命令!