我想阻止执行任何具有特定完整路径名的程序。
例如,如果D:\foo.exe
在黑名单中,任何重命名并移动到该路径的程序都不会运行。如果重命名或移动到其他位置,则在其他条件允许的情况下(ACL 等),该程序可能会运行。
是否有适用于 Vista(NT 6.0)及以上版本的解决方案?此外,是否有特定于 Windows 10 的解决方案?如果有,那么“最低要求”版本是什么(例如 v1507)?
答案1
您将需要编写自己的反执行程序。
关于在内核中挂钩进程创建的文章有很多,但是它们都需要安装驱动程序,这不太可移植,并且在以后的 Windows 版本中会遇到驱动程序签名问题。
最简单的解决方案是编写一个小型 DLL 注入到所有进程中,该 DLL 将在该进程的上下文中获取其路径,如果来自该路径,则立即终止它。
使用 regedit 并导航到 即可注入 DLL
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
。在更高版本的 Windows 中,AppInit_DLLs
当启用安全启动时,将被禁用。
请参阅 Microsoft 文章 使用 AppInit_DLLs 注册表值。
此类 DLL 的骨架可能如下所示:
BOOL
WINAPI
DllMain ( HINSTANCE hInst, DWORD dwReason, LPVOID) {
TCHAR acModule[MAX_PATH];
switch (dwReason) {
case DLL_PROCESS_ATTACH:
GetModuleFileName(NULL,acModule,MAX_PATH);
to_be_written(acModule);
break;
default:
break;
}
return TRUE;
}