Я хочу заблокировать выполнение любой программы с определенным полным именем.

Например, если D:\foo.exe находится в черном списке, любая программа, переименованная и перемещенная по этому пути, не будет запущена. Если программа переименована или перенесена во что-то или куда-то еще, программа может работать, если это позволяют другие условия (ACL и т.д.).

Есть ли решение, которое будет работать во всех версиях, начиная с Vista (NT 6.0)? Кроме того, есть ли какое-либо решение, специфичное для Windows 10? Если это так, что является "минимально необходимой" версией (например, v1507)?

1 ответ1

0

Вам нужно будет написать собственную анти-exec программу.

Существуют различные статьи по созданию процесса перехвата в ядре, но все они требуют установки драйвера, который не очень переносим и может столкнуться с проблемами подписи драйверов в более поздних версиях Windows.

Самое простое решение - написать небольшую DLL-библиотеку, которая будет внедрена во все процессы, которая в контексте процесса получит его путь и немедленно прекратит его, если он поступит по этому пути.

Инъекция DLL выполняется с помощью regedit и перехода к 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;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .