我的注册表有问题。在我的学校里,有些恶棍会创建链接和批处理文件来关闭其他人的计算机,方法是将它们放入共享文件夹并为其赋予类似于我们应该使用的文件的名称(例如,使用“tcp.bat”或“tcp.java(.lnk)”而不是“tcp.java”,后者隐藏在子目录中,因此学生会打开坏文件)。
为了做到这一点,他们都使用shutdown [args]
或shutdown.exe [args]
。我为我的学校编写了一个程序来阻止这种情况,方法是将参数修改-t
为至少一分钟,以便学生可以从老师那里获得一些帮助。但现在我有一个问题:
我以为注册表中有指向shutdown.exe完整路径的条目,但什么也没有。我搜索了shutdown.exe
和shutdown
,但没有找到指向的条目shutdown.exe
。所以现在我的问题是:
我该如何更改使用位置shutodwn
或shutdown.exe
指向我的程序而不是shutdown.exe的位置?
感谢您的任何帮助!
答案1
回答您提出的问题(剧透 - 它不会解决您的问题)......
打开命令提示符并输入:
echo %PATH%
该目录列表是 Windows 查找可执行文件的地方(在当前目录之后),从左到右查找,直到找到匹配项.exe
或失败。如果您在用户的 PATH 变量之前插入一个文件夹,c:\windows\system32;
则会首先找到c:\myscripts;c:\windows\system32;
您的文件夹。c:\myscripts\shutdown.exe
您可能需要更新系统和每个用户的 PATH 变量,以确保找到您的 shutdown.exe,但这很容易被破解。有几种方法可以通过脚本或编译代码甚至关闭计算机rundll32.exe
。此外,这不会阻止到真实文件的绝对或相对路径。Shutdown.exe
只是为了方便,它不是 Windows 关闭的核心。话虽如此,我不会尝试篡改文件本身,虽然您可能会让您的版本“坚持”,但 Windows 用原始版本替换它只是时间问题。
我个人会认真考虑组或本地策略(取决于您的网络),以撤销问题用户的关机权限。无论用户是否运行 exe,如果他们没有关闭机器的权限,操作都会失败。
如果您因任何原因无法锁定系统,那么您的选择就会非常有限。
或许,不需要编写关机替代方案,而是在文件服务器上按计划运行脚本(或编写服务等),扫描任何可疑文件(如 .lnk 或 .bat 文件)并删除它们(或者更好的是,获取所有权并撤销对文件的访问权限,以便您可以检查/记录谁创建了它/哪台计算机等)并采取任何行动。
您可以通过在共享文件夹上使用文件系统观察器(从文件服务器本身!)来进一步利用一些代码,您的应用程序将几乎实时地收到每个新文件名的通知,并且您可以采取任何措施。(比如关闭攻击者的计算机:)
答案2
我同意Doug Deden 的评论这听起来像XY问题更改某些访问权限可能是更好的方法。由于无论如何这仍然可能具有一些价值,因此这里有一个可能的替代方案。
路径shutdown.exe
未在注册表中设置,而是在您的PATH
变量中设置。shutdown.exe
位于C:\Windows\System32
,它列在您的PATH
变量中。为了自己找到它,您可以运行where shutdown
。
一种选择是命名您的程序shutdown.exe
或shutdown.bat
在您喜欢的任何位置,然后将该位置添加到正面的PATH
变量。
然后当你运行的时候where shutdown
,你会看到类似这样的内容:
C:\my\path\shutdown.exe
C:\Windows\System32\shutdown.exe
此列表按优先级排序,因此除非另有规定,否则 Windows 将运行列表中的第一个项目。这可以阻止任何只运行 的人shutdown -s -t 0
,但不能阻止任何运行 的人C:\Windows\system32\shutdown -s -t 0
。