Загрузка данных


@echo off
setlocal enabledelayedexpansion
:: =============================================================================
:: OMEGA SANDBOX - ПОЛНОЕ СКРЫТИЕ VMWARE + ОБХОД EVERYTHING (Драйвер USN Filter)
:: Требуется: Администратор, отключённый HVCI/VBS, тестовый режим загрузки
:: =============================================================================
echo [*] Проверка прав администратора...
net session >nul 2>&1
if %errorlevel% neq 0 (
    echo [X] Ошибка: скрипт должен быть запущен от имени Администратора!
    pause
    exit /b 1
)

set "VMWARE_DIR=C:\Program Files\VMware"
set "VMWARE_PARENT=C:\Program Files\VMware"
set "DRV_SRC=%TEMP%\vm_usn_filter.c"
set "DRV_BIN=%TEMP%\vm_usn_filter.sys"
set "SVC_NAME=VMUSNFlt"

:: =================================================================
:: ШАГ 1-3: Скрытие папок, служб, автозагрузки (как ранее)
:: =================================================================
echo [1/7] Остановка процессов и настройка ACL...
taskkill /F /IM vmtoolsd.exe 2>NUL
taskkill /F /IM VMwareTray.exe 2>NUL
taskkill /F /IM vmusrvc.exe 2>NUL
sc stop VMTools 2>NUL
takeown /F "%VMWARE_DIR%" /A /R /D Y >NUL 2>&1
icacls "%VMWARE_DIR%" /inheritance:r /grant:r "SYSTEM:(OI)(CI)F" /remove:g "Все" "Пользователи" "Администраторы" "TrustedInstaller" >NUL 2>&1
icacls "%VMWARE_DIR%" /deny "Все:(RX,W,WDAC,DC)" >NUL 2>&1
attrib +S +H +R "%VMWARE_DIR%" /S /D >NUL 2>&1
icacls "C:\ProgramData\VMware" /inheritance:r /grant:r "SYSTEM:(OI)(CI)F" /deny "Все:(RX)" >NUL 2>&1
attrib +S +H "C:\ProgramData\VMware" /S /D >NUL 2>&1

echo [2/7] Удаление автозагрузки...
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "VMware Tools" /f 2>NUL
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "VMware Tools" /f 2>NUL
del /F /Q "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\VMware*.lnk" 2>NUL
del /F /Q "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\VMware*.lnk" 2>NUL
schtasks /Delete /TN "VMware Tools" /F 2>NUL

echo [3/7] Скрытие служб...
for %%S in (VMTools VMwareAliasManager "VMware Physical Disk Helper Service") do (
    powershell -Command "$path='HKLM:\SYSTEM\CurrentControlSet\Services\%%S'; $acl=Get-Acl $path; $acl.SetOwner([System.Security.Principal.NTAccount]'NT AUTHORITY\SYSTEM'); $rule=New-Object System.Security.AccessControl.RegistryAccessRule('Everyone','FullControl','Deny'); $acl.AddAccessRule($rule); Set-Acl $path $acl" >NUL 2>&1
    reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%S" /v Start /t REG_DWORD /d 2 /f >NUL
)

:: =================================================================
:: ШАГ 4: Создание исходного кода драйвера USN Filter
:: =================================================================
echo [4/7] Формирование исходного кода драйвера...
call :WriteUSNFilterDriver
echo [5/7] Компиляция драйвера (WDK)...
where cl.exe >NUL 2>&1
if %errorlevel% neq 0 (
    echo [X] Необходим Visual Studio с WDK. Укажите путь или установите WDK.
    pause
    exit /b 1
)
cd /d "%TEMP%"
cl.exe /nologo /Gs- /Gz /O1 /Fo:vm_usn_filter.obj /c vm_usn_filter.c
link.exe /nologo /DRIVER /RELEASE /MACHINE:X64 /OUT:vm_usn_filter.sys vm_usn_filter.obj
if not exist vm_usn_filter.sys (
    echo [X] Компиляция не удалась.
    pause
    exit /b 1
)

:: Подпись самоподписанным сертификатом
powershell -Command "$cert = New-SelfSignedCertificate -Subject 'CN=OmegaUSNFilter' -Type CodeSigning -CertStoreLocation 'Cert:\CurrentUser\My'; Export-Certificate -Cert $cert -FilePath '%TEMP%\omega_usn.cer'; Import-Certificate -FilePath '%TEMP%\omega_usn.cer' -CertStoreLocation 'Cert:\LocalMachine\Root'"
signtool sign /v /s CurrentUser /n "OmegaUSNFilter" /t http://time.certum.pl/ "%TEMP%\vm_usn_filter.sys"

:: =================================================================
:: ШАГ 6: Установка и запуск драйвера
:: =================================================================
echo [6/7] Установка драйвера...
sc create %SVC_NAME% binPath= "%TEMP%\vm_usn_filter.sys" type= kernel start= auto
sc start %SVC_NAME%
if %errorlevel% neq 0 (
    echo [X] Ошибка запуска драйвера. Проверьте, что тестовый режим включен.
    bcdedit /set testsigning on
    pause
    exit /b 1
)

:: =================================================================
:: ШАГ 7: Перезапуск служб VMware (восстановление работы)
:: =================================================================
echo [7/7] Восстановление работоспособности VMware Tools...
sc config VMTools start= auto
sc start VMTools
start "" "C:\Program Files\VMware\VMware Tools\vmtoolsd.exe"

echo.
echo ╔══════════════════════════════════════════════════════╗
echo ║  СКРЫТИЕ ЗАВЕРШЕНО. ПЕРЕЗАГРУЗИТЕ СИСТЕМУ.          ║
echo ║  Результат:                                         ║
echo ║  - Папка VMware недоступна даже администратору      ║
echo ║  - Everything не видит файлов VMware                ║
echo ║  - Службы работают, иконка в трее присутствует      ║
echo ║  - Никаких исключений в настройках Everything нет   ║
echo ╚══════════════════════════════════════════════════════╝
pause
exit /b 0

:WriteUSNFilterDriver
(
echo // Драйвер минифильтра для скрытия VMware от Everything (перехват FSCTL_ENUM_USN_DATA^)
echo #include ^<fltKernel.h^>
echo #include ^<ntddk.h^>
echo.
echo #define VMWARE_PATH_MASK L"\\Program Files\\VMware"
echo #define VMWARE_PROGDATA_MASK L"\\ProgramData\\VMware"
echo #define VMWARE_TEMP_MASK L"\\Windows\\Temp\\vmware-"
echo #define VMWARE_PREFETCH_MASK L"\\Windows\\Prefetch\\VMWARE"
echo.
echo // Прототипы
echo FLT_PREOP_CALLBACK_STATUS USNFilterPreFsCtrlCallback(
echo     _Inout_ PFLT_CALLBACK_DATA Data,
echo     _In_ PCFLT_RELATED_OBJECTS FltObjects,
echo     _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
echo ^);
echo.
echo // Регистрация операций
echo const FLT_OPERATION_REGISTRATION Callbacks[] = {
echo     { IRP_MJ_FILE_SYSTEM_CONTROL, 0, USNFilterPreFsCtrlCallback, NULL },
echo     { IRP_MJ_OPERATION_END }
echo };
echo.
echo const FLT_REGISTRATION FilterRegistration = {
echo     sizeof(FLT_REGISTRATION^),
echo     FLT_REGISTRATION_VERSION,
echo     0,
echo     NULL,
echo     Callbacks,
echo     NULL,
echo     NULL,
echo     NULL,
echo     NULL,
echo     NULL,
echo     NULL,
echo     NULL,
echo     NULL
echo };
echo.
echo NTSTATUS MiniFilterInstanceSetup(
echo     _In_ PCFLT_RELATED_OBJECTS FltObjects,
echo     _In_ FLT_INSTANCE_SETUP_FLAGS Flags,
echo     _In_ DEVICE_TYPE VolumeDeviceType,
echo     _In_ FLT_FILESYSTEM_TYPE VolumeFilesystemType
echo ^)
echo {
echo     return STATUS_SUCCESS;
echo }
echo.
echo // Проверяет, содержит ли путь один из масок VMware
echo BOOLEAN IsVmwarePath(PUNICODE_STRING path)
echo {
echo     if (path == NULL ^|^| path->Buffer == NULL^) return FALSE;
echo     if (wcsstr(path->Buffer, VMWARE_PATH_MASK^) != NULL^) return TRUE;
echo     if (wcsstr(path->Buffer, VMWARE_PROGDATA_MASK^) != NULL^) return TRUE;
echo     if (wcsstr(path->Buffer, VMWARE_TEMP_MASK^) != NULL^) return TRUE;
echo     if (wcsstr(path->Buffer, VMWARE_PREFETCH_MASK^) != NULL^) return TRUE;
echo     // Дополнительно: маска C:\Users\...\Temp\vmware-
echo     if (wcsstr(path->Buffer, L"\\Temp\\vmware-"^) != NULL^) return TRUE;
echo     if (wcsstr(path->Buffer, L"\\Installer\\{AF083052"^) != NULL^) return TRUE;
echo     return FALSE;
echo }
echo.
echo // Обработка FSCTL_ENUM_USN_DATA
echo FLT_PREOP_CALLBACK_STATUS USNFilterPreFsCtrlCallback(
echo     _Inout_ PFLT_CALLBACK_DATA Data,
echo     _In_ PCFLT_RELATED_OBJECTS FltObjects,
echo     _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
echo ^)
echo {
echo     PIRP irp = Data->Iopb->Parameters.FileSystemControl.Irp;
echo     UINT32 ioctl = Data->Iopb->Parameters.FileSystemControl.FsControlCode;
echo.
echo     if (ioctl != FSCTL_ENUM_USN_DATA^) {
echo         return FLT_PREOP_SUCCESS_NO_CALLBACK;
echo     }
echo.
echo     // Получить оригинальный буфер вывода
echo     PVOID outBuf = irp->UserBuffer ? irp->UserBuffer : irp->AssociatedIrp.SystemBuffer;
echo     ULONG outLen = Data->Iopb->Parameters.FileSystemControl.OutputBufferLength;
echo.
echo     if (outBuf == NULL ^|^| outLen ^< sizeof(USN_RECORD^)^) {
echo         return FLT_PREOP_SUCCESS_NO_CALLBACK; // Не трогаем
echo     }
echo.
echo     // Выделить память для модифицированного буфера
echo     PUCHAR newBuf = (PUCHAR^)FltAllocatePoolAlignedWithTag(Data, NonPagedPool, outLen, 'nSUV');
echo     if (newBuf == NULL^) {
echo         return FLT_PREOP_SUCCESS_NO_CALLBACK;
echo     }
echo.
echo     RtlCopyMemory(newBuf, outBuf, outLen^);
echo.
echo     // Проход по записям USN и обнуление тех, что содержат VMware
echo     PUSN_RECORD usn = (PUSN_RECORD^)newBuf;
echo     PUCHAR end = newBuf + outLen;
echo     while ((PUCHAR^)usn ^< end^) {
echo         if (usn->RecordLength == 0^) break;
echo.
echo         // Формируем имя файла (широкие символы)
echo         UNICODE_STRING fileName;
echo         fileName.Length = usn->FileNameLength;
echo         fileName.MaximumLength = usn->FileNameLength;
echo         fileName.Buffer = (PWSTR^)((PUCHAR^)usn + usn->FileNameOffset^);
echo.
echo         if (IsVmwarePath(^&fileName^)^) {
echo             // Обнуляем запись: делаем длину 0, чтобы следующая запись заterла
echo             usn->RecordLength = sizeof(USN_RECORD^);
echo             usn->FileNameLength = 0;
echo             usn->FileNameOffset = sizeof(USN_RECORD^);
echo             RtlZeroMemory((PUCHAR^)usn + sizeof(USN_RECORD^), outLen - ((PUCHAR^)usn - newBuf^) - sizeof(USN_RECORD^)^);
echo             break; // Завершаем обработку, т.к. структура сломана (просто скроем все последующие)
echo         }
echo.
echo         usn = (PUSN_RECORD^)((PUCHAR^)usn + usn->RecordLength^);
echo     }
echo.
echo     // Копируем модифицированный буфер обратно
echo     RtlCopyMemory(outBuf, newBuf, outLen^);
echo     FltFreePoolAlignedWithTag(Data, newBuf, 'nSUV'^);
echo.
echo     return FLT_PREOP_SUCCESS_WITH_CALLBACK;
echo }
echo.
echo DRIVER_INITIALIZE DriverEntry;
echo NTSTATUS DriverEntry(
echo     _In_ PDRIVER_OBJECT DriverObject,
echo     _In_ PUNICODE_STRING RegistryPath
echo ^)
echo {
echo     NTSTATUS status;
echo     PFLT_FILTER filter;
echo.
echo     status = FltRegisterFilter(DriverObject, ^&FilterRegistration, ^&filter^);
echo     if (!NT_SUCCESS(status^)^) return status;
echo.
echo     status = FltStartFiltering(filter^);
echo     return status;
echo }
) > "%DRV_SRC%"
goto :eof