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


@echo off
setlocal enabledelayedexpansion
:: =============================================================================
:: OMEGA SANDBOX - СКРЫТИЕ VMWARE TOOLS С СОХРАНЕНИЕМ РАБОТОСПОСОБНОСТИ (v4.1)
:: Требует АДМИНИСТРАТОРА и ОТКЛЮЧЕННОГО HVCI/VBS
:: =============================================================================
echo [*] Проверка прав администратора...
net session >nul 2>&1
if %errorlevel% neq 0 (
    echo [X] Ошибка: запустите BAT-файл от имени Администратора!
    pause
    exit /b 1
)

set "VMWARE_DIR=C:\Program Files\VMware\VMware Tools"
set "VMWARE_PARENT=C:\Program Files\VMware"
set "DRV_SRC=%TEMP%\vmhider.c"
set "DRV_BIN=%TEMP%\vmhider.sys"
set "DRV_NAME=VmHider"

echo.
echo ╔══════════════════════════════════════════════════════╗
echo ║   УСТАНОВКА СКРЫТИЯ VMWARE TOOLS (СТЕЛС-РЕЖИМ)      ║
echo ╠══════════════════════════════════════════════════════╣
echo ║ 1. Скрытие папки и файлов                           ║
echo ║ 2. Скрытие процессов                               ║
echo ║ 3. Скрытие служб                                   ║
echo ║ 4. Установка минифильтра                           ║
echo ╚══════════════════════════════════════════════════════╝

:: =================================================================
:: ШАГ 1: МОДИФИКАЦИЯ ФАЙЛОВОЙ СИСТЕМЫ (ТОЛЬКО SYSTEM ДОСТУП)
:: =================================================================
echo [1/6] Настройка безопасности папки VMware Tools...
takeown /F "%VMWARE_DIR%" /A /R /D Y >NUL 2>&1
icacls "%VMWARE_DIR%" /inheritance:r /grant:r "SYSTEM:(OI)(CI)F" /remove:g "Все" "Пользователи" "Администраторы" "Administrators" "TrustedInstaller" >NUL 2>&1
icacls "%VMWARE_DIR%" /deny "Все:(RX,W,WDAC,DC)" >NUL 2>&1
icacls "%VMWARE_PARENT%" /inheritance:r /grant:r "SYSTEM:(OI)(CI)F" /deny "Все:(RX)" >NUL 2>&1
attrib +S +H +R "%VMWARE_DIR%" /S /D >NUL 2>&1
attrib +S +H +R "%VMWARE_PARENT%" /S /D >NUL 2>&1

:: =================================================================
:: ШАГ 2: СКРЫТИЕ В ПРОВОДНИКЕ И АВТОЗАГРУЗКЕ
:: =================================================================
echo [2/6] Удаление из автозагрузки и настройка Проводника...
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
reg delete "HKLM\SOFTWARE\WOW6432Node\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

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Hidden /t REG_DWORD /d 2 /f >NUL
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v ShowSuperHidden /t REG_DWORD /d 0 /f >NUL
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL" /v CheckedValue /t REG_DWORD /d 0 /f >NUL

:: =================================================================
:: ШАГ 3: СКРЫТИЕ СЛУЖБ (ЗАПРЕТ ДОСТУПА К КЛЮЧАМ РЕЕСТРА)
:: =================================================================
echo [3/6] Скрытие служб VMware из оснастки services.msc...
for %%S in (VMTools VMwareAliasManager "VMware Physical Disk Helper Service") do (
    reg add "HKLM\SYSTEM\CurrentControlSet\Services\%%S" /v Start /t REG_DWORD /d 2 /f >NUL 2>&1
    set SVCKEY=HKLM\SYSTEM\CurrentControlSet\Services\%%S
    :: Установка владельца SYSTEM и запрет чтения для всех, кроме SYSTEM
    :: Используем SetACL (встроенный в Windows, либо PowerShell)
    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
)
:: Отключение трея VMware
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" /v NoTrayItemsDisplay /t REG_DWORD /d 1 /f >NUL
:: Скрыть определенные значки (через реестр, маска на исполняемый файл)
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify" /v IconStreams /t REG_BINARY /d 00 /f >NUL

:: =================================================================
:: ШАГ 4: СБОРКА И ЗАГРУЗКА ДРАЙВЕРА-СТЕЛС
:: =================================================================
echo [4/6] Формирование исходного кода драйвера...
:: Исходный код в отдельном файле (см. раздел 2)
call :WriteDriverSource
echo [5/6] Компиляция драйвера (необходим WDK/EWDK)...
where cl.exe >NUL 2>&1
if %errorlevel% neq 0 (
    echo [!] WDK не найден в PATH. Укажите путь к x64 Native Tools Command Prompt для VS 2022/WDK.
    pause
    exit /b 1
)
cd /d "%TEMP%"
cl.exe /nologo /Gs- /Gz /O1 /Fo:vmhider.obj /c vmhider.c
link.exe /nologo /DRIVER /RELEASE /MACHINE:X64 /OUT:vmhider.sys vmhider.obj
if not exist vmhider.sys (
    echo [X] Ошибка компиляции драйвера. Проверьте наличие WDK.
    pause
    exit /b 1
)
echo [*] Драйвер скомпилирован: %TEMP%\vmhider.sys

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

echo [6/6] Установка драйвера...
sc create %DRV_NAME% binPath= "%TEMP%\vmhider.sys" type= kernel start= auto
sc start %DRV_NAME%

:: Включение тестового режима, если ещё не включён
bcdedit /enum | find "testsigning Yes" >NUL
if %errorlevel% neq 0 (
    echo [*] Включение тестового режима загрузки...
    bcdedit /set testsigning on
)

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

:WriteDriverSource
(
echo // OMEGA Sandbox - Драйвер скрытия VMware Tools (Minifilter + ObCallbacks^)
echo #include ^<ntifs.h^>
echo #include ^<fltKernel.h^>
echo #define VMWARE_DIR L"\\Program Files\\VMware"
echo #define PROCESS_NAMES { L"vmtoolsd.exe", L"VMwareTray.exe", L"vmusrvc.exe", NULL }
echo.
echo NTSTATUS MiniFilterInstanceSetupCallback(
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 ^) { return STATUS_SUCCESS; }
echo.
echo FLT_PREOP_CALLBACK_STATUS MiniFilterPreCreateCallback(
echo     _Inout_ PFLT_CALLBACK_DATA Data,
echo     _In_ PCFLT_RELATED_OBJECTS FltObjects,
echo     _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
echo ^) {
echo     PFLT_FILE_NAME_INFORMATION fileNameInfo;
echo     NTSTATUS status = FltGetFileNameInformation(Data, FLT_FILE_NAME_NORMALIZED, ^&fileNameInfo^);
echo     if (NT_SUCCESS(status^)^) {
echo         if (wcsstr(fileNameInfo-^>Name.Buffer, VMWARE_DIR^) != NULL^) {
echo             FltReleaseFileNameInformation(fileNameInfo^);
echo             return FLT_PREOP_COMPLETE; // Прячем, возвращаем STATUS_OBJECT_NAME_NOT_FOUND
echo         }
echo         FltReleaseFileNameInformation(fileNameInfo^);
echo     }
echo     return FLT_PREOP_SUCCESS_NO_CALLBACK;
echo }
echo.
echo OB_PREOP_CALLBACK_STATUS PreOpenProcessCallback(
echo     _In_ PVOID RegistrationContext,
echo     _In_ POB_PRE_OPERATION_INFORMATION OperationInformation
echo ^) {
echo     if (OperationInformation-^>KernelHandle^) return OB_PREOP_SUCCESS; // Не трогаем системные
echo     PEPROCESS process = (PEPROCESS^)OperationInformation-^>Object;
echo     PUNICODE_STRING imageName = NULL;
echo     NTSTATUS st = SeLocateProcessImageName(process, ^&imageName^);
echo     if (NT_SUCCESS(st^) && imageName != NULL^) {
echo         if (wcsstr(imageName-^>Buffer, L"vmtoolsd") != NULL ^|^|
echo             wcsstr(imageName-^>Buffer, L"VMwareTray"^) != NULL ^|^|
echo             wcsstr(imageName-^>Buffer, L"vmusrvc"^) != NULL^) {
echo             DbgPrint("Omega: denying open to process %%wZ\n", imageName^);
echo             ExFreePool(imageName^);
echo             OperationInformation-^>Parameters-^>CreateHandleInformation.DesiredAccess = 0;
echo             return OB_PREOP_CALLBACK_STATUS_DENY;
echo         }
echo         ExFreePool(imageName^);
echo     }
echo     return OB_PREOP_SUCCESS;
echo }
echo.
echo DRIVER_INITIALIZE DriverEntry;
echo NTSTATUS DriverEntry(
echo     _In_ PDRIVER_OBJECT DriverObject,
echo     _In_ PUNICODE_STRING RegistryPath
echo ^) {
echo     NTSTATUS status;
echo     // Регистрация минифильтра
echo     PFLT_FILTER filter;
echo     const FLT_OPERATION_REGISTRATION callbacks[] = {
echo         { IRP_MJ_CREATE, 0, MiniFilterPreCreateCallback, NULL },
echo         { IRP_MJ_OPERATION_END }
echo     };
echo     const FLT_REGISTRATION reg = {
echo         sizeof(FLT_REGISTRATION^),
echo         FLT_REGISTRATION_VERSION,
echo         0, NULL, callbacks,
echo         NULL, NULL,
echo         NULL, NULL,
echo         NULL, NULL,
echo         MiniFilterInstanceSetupCallback,
echo         NULL, NULL, NULL
echo     };
echo     status = FltRegisterFilter(DriverObject, ^&reg, ^&filter^);
echo     if (!NT_SUCCESS(status^)^) return status;
echo     FltStartFiltering(filter^);
echo     // Регистрация ObCallback для процессов
echo     OB_CALLBACK_REGISTRATION obReg;
echo     OB_OPERATION_REGISTRATION opReg[2];
echo     memset(^&opReg, 0, sizeof(opReg^)^);
echo     opReg[0].ObjectType = PsProcessType;
echo     opReg[0].Operations = OB_OPERATION_HANDLE_CREATE;
echo     opReg[0].PreOperation = PreOpenProcessCallback;
echo     opReg[0].PostOperation = NULL;
echo     RtlZeroMemory(^&obReg, sizeof(obReg^)^);
echo     obReg.Version = OB_FLT_REGISTRATION_VERSION;
echo     obReg.OperationRegistrationCount = 1;
echo     obReg.Altitude = RTL_CONSTANT_STRING(L"1000"^);
echo     obReg.Operations = opReg;
echo     ObRegisterCallbacks(^&obReg, NULL^);
echo     return STATUS_SUCCESS;
echo }
) > "%DRV_SRC%"
goto :eof