我有计划每天运行的批处理脚本。 有些脚本中有密码。 我希望保护那些没有被授权打开或阅读的批次被阅读或打开。
我的问题是:什么是保护batch file的好方法? 有免费或开源的工具,编译batch file?
您可以使用NTFS ACL来保护未被授权执行的用户的文件。 根据定义,被授权执行它们的用户可以读取密码(如果您select对其进行混淆,则以混淆的forms)。 访问执行意味着访问读取。 如果脚本可以解密密码,用户也可以解密。
假设你试图保护被允许执行脚本的用户的密码,你所说的是不可能的。 你真的在说:
我们有我们需要给用户的密码,以便他们可以使用一些软件,但我们不希望用户知道密码是什么。
根据定义,用户必须能够恢复密码才能使用它们。 对密码进行任何模糊处理或编码,对确定的用户来说只是一个“减速块”,以查明密码是什么。
只要这个脚本的执行上下文是用户,你必须给他们密码。 无论您是否尝试对密码进行混淆,都是您的业务,但是您仍然在给他们input密码。
我会使用像BATCH2EXE和“编译”batch file,所以他们不能修改它。 🙂
有几个在那里。 一些免费的,一些花费一点点。
做一个谷歌search“batch2exe”或“bat2exe”,你会明白我的意思。
这些年来我一直在使用各种各样的东西。
你可以把密码作为batch file的参数吗? 像C:\ MyBatchFile.bat MyPassword ? 然后在batch file中,使用需要密码的%1。
然后,您将在“任务计划程序”中添encryption码参数作为调用的一部分。 现在所有的蝙蝠文件都可以公开发表,而不会泄露任何秘密。 那么你只需要保护任务计划程序,这可能会也可能不会更容易。
不是我所知道的,“编译”一个batch file不会阻止一个确定的个人从反向工程生成的可执行文件获得密码。
我会考虑在NTFS中使用ACL来处理这个问题。
在大多数情况下,我们不保存批处理或configuration文件中的密码。 如果我们真的需要这样做,我们正在使用一些encryption机制来做到这一点。 使用这些参数的程序负责解密。 如果它是你写的程序,也许你可以使用这种方法。 🙂
假设不想看到密码的用户也没有运行batch file的帐户的login详细信息,并且没有足够的权限访问该帐户的configuration文件,则可以在该configuration文件中创build环境variables,在batch file中使用这些variables而不是密码本身。 这种方法是万无一失的,但它不是智能的。 即具有一定技能的人不会被这个或其他方法阻止。
至于编译batch file,大约十年左右,这有点stream行。 因为完全没有任何意义,所以很less有这样做。 对于每个编译器,你将能够find一个反编译器。 还要注意埃文对混淆的评论。
正如已经提到的那样,在批处理或脚本文件中拥有可读密码永远不是一个好主意,尤其是因为某些脚本语言允许您从网站执行脚本。 最好的办法是将密码作为parameter passing。 这是我用我的双脚本脚本( http://www.biterscripting.com )所做的。
以下是一个示例脚本。
# Script sample.txt # Input argument - login, password var string login, password somecommand $login $password
我使用任务pipe理器中的以下条目来调用此脚本。
"C:\biterScripting\biterScripting.exe" "sample.txt login("mylogin") password("mypassword")
当访问者将脚本作为Web服务器的一部分执行时,您可以使用相同的方法。
帕特里克
在你的batch file中,当有人运行一个文件时,你可以放一个“NET SEND”给自己发送消息。
此外,您可以脚本检查用户是否属于某个组,如果不是,则退出脚本。
混淆batch file的一种快捷方式是在hex代码的开头添加string“FF FE 0D 0A”(使用免费的hex编辑器)。 经常被恶意软件作者使用,这使得文本编辑程序(如记事本或记事本++)打开文件,就好像它是Unicode(当它是事实上的ASCII),导致乱码的垃圾文本。 但是,如果batch file运行,它将由cmd.exe处理,而不是notepad.exe,从而运行混淆代码(Windows cmd将以ASCIIforms读取所有内容)。
这不会阻止任何真正希望看到底下发生的事情的人,但是这将阻止任何不太擅长逆向工程的人。 希望这可以帮助。