$CRACK_DIR = 'c:\BTRC' $CRACK_NAME = 'keygenpatch' $LICENSE = 'license' $CRACK_PATH = Join-Path -Path "$CRACK_DIR" -ChildPath "$($CRACK_NAME).exe" $LICENSE_PATH = Join-Path -Path "$CRACK_DIR" -ChildPath "$($LICENSE).txt" $VNC_DIR = Join-Path -Path $env:ProgramFiles -ChildPath 'RealVNC\VNC Server' $VNC_SVC_NAME = 'vncserver' $VNC_LICENSE_NAME = 'vnclicense' $VNC_LICENSE_PATH = Join-Path -Path "$VNC_DIR" -ChildPath "$($VNC_LICENSE_NAME).exe" $SEVEN_ZIP_PATHS = @( 'C:\Program Files\7-Zip\7z.exe', 'C:\Program Files (x86)\7-Zip\7z.exe' ) $ARCHIVE_URL = 'https://gper.ru/soft/RemoteAccess/RealVNC/BTRC.7z' $ARCHIVE_PASSWORD = '567507' $SEVENZIP_BASE_URL = 'https://gper.ru/soft/arc/7z' $SEVENZIP_ARCH = if ([Environment]::Is64BitOperatingSystem) { 'x64' } else { 'x86' } function Get-7zPath { foreach ($p in $SEVEN_ZIP_PATHS) { if (Test-Path $p) { return $p } } return $null } function Get-Latest7zUrl { # Парсит autoindex nginx на gper.ru/soft/arc/7z/, ищет последнюю версию под архитектуру try { $html = Invoke-WebRequest -Uri "$SEVENZIP_BASE_URL/" -UseBasicParsing -ErrorAction Stop $pattern = if ($SEVENZIP_ARCH -eq 'x64') { '7z\d{4}-x64\.exe' } else { '7z\d{4}-x86\.exe' } $matchList = [regex]::Matches($html.Content, $pattern) | ForEach-Object { $_.Value } | Sort-Object -Unique if (-not $matchList) { return $null } $latest = $matchList | Sort-Object -Descending | Select-Object -First 1 return "$SEVENZIP_BASE_URL/$latest" } catch { Write-Host "Не удалось прочитать $SEVENZIP_BASE_URL/: $($_.Exception.Message)" -ForegroundColor Yellow return $null } } function Install-7zFromUrl { param([Parameter(Mandatory)][string]$Url) try { $tmp = Join-Path $env:TEMP (Split-Path $Url -Leaf) Write-Host "Скачиваю $Url" -ForegroundColor Cyan Invoke-WebRequest -Uri $Url -OutFile $tmp -UseBasicParsing -ErrorAction Stop Write-Host 'Тихая установка...' -ForegroundColor Cyan Start-Process -FilePath $tmp -ArgumentList '/S' -Wait -ErrorAction Stop Remove-Item $tmp -Force -ErrorAction SilentlyContinue return $true } catch { Write-Host "Ошибка установки 7-Zip: $($_.Exception.Message)" -ForegroundColor Red return $false } } function Ensure-7zip { # уже стоит? $p = Get-7zPath if ($p) { Write-Host "7-Zip найден: $p" -ForegroundColor Green return $p } Write-Host '7-Zip не найден. Устанавливаю...' -ForegroundColor Yellow # 1) Приоритет: свой репозиторий gper.ru/soft/arc/7z (свежие версии, без зависимостей) $url = Get-Latest7zUrl if ($url) { Write-Host "Источник: $url" -ForegroundColor Cyan if (Install-7zFromUrl -Url $url) { $p = Get-7zPath if ($p) { Write-Host "7-Zip установлен: $p" -ForegroundColor Green return $p } } } # 2) Fallback: winget $winget = Get-Command winget -ErrorAction SilentlyContinue if ($winget) { Write-Host 'Пробую winget...' -ForegroundColor Cyan try { & winget install --id 7zip.7zip -e --silent --accept-source-agreements --accept-package-agreements | Out-Null } catch { Write-Host "winget ошибка: $($_.Exception.Message)" -ForegroundColor Red } $p = Get-7zPath if ($p) { Write-Host "7-Zip установлен: $p" -ForegroundColor Green return $p } } Write-Host 'Не удалось установить 7-Zip' -ForegroundColor Red return $null } function Download-Path { # 0. каталог if (-not (Test-Path $CRACK_DIR)) { New-Item -ItemType Directory -Path $CRACK_DIR -Force | Out-Null Write-Host "Директория создана: $CRACK_DIR" -ForegroundColor Green } # 1. идемпотентность - уже распаковано? if (Test-Path $CRACK_PATH) { Write-Host "Патч уже распакован: $CRACK_PATH" -ForegroundColor Green return $true } # 2. 7-Zip - ДО скачивания, иначе нет смысла качать $sevenZip = Ensure-7zip if (-not $sevenZip) { return $false } # 3. архив $archivePath = Join-Path $CRACK_DIR 'BTRC.7z' if (Test-Path $archivePath) { Write-Host "Архив уже существует: $archivePath" -ForegroundColor Yellow } else { Write-Host "Загрузка архива $ARCHIVE_URL ..." -ForegroundColor Cyan try { Invoke-WebRequest -Uri $ARCHIVE_URL -OutFile $archivePath -UseBasicParsing -ErrorAction Stop Write-Host "Архив загружен: $archivePath" -ForegroundColor Green } catch { Write-Host "Ошибка загрузки: $($_.Exception.Message)" -ForegroundColor Red return $false } } # 4. распаковка Write-Host "Распаковка $archivePath ..." -ForegroundColor Cyan $output = & $sevenZip x $archivePath "-o$CRACK_DIR" "-p$ARCHIVE_PASSWORD" -y 2>&1 if ($LASTEXITCODE -ne 0) { Write-Host "Ошибка распаковки (код $LASTEXITCODE): $output" -ForegroundColor Red return $false } Write-Host "Архив распакован в $CRACK_DIR" -ForegroundColor Green return $true } function StopVNCProcess { $VNC_PROCESS = @('vncagent', 'vnclicensewiz', 'vncserver', 'vncserverui') foreach ($PNAME in $VNC_PROCESS) { $P = Get-Process -Name $PNAME -ErrorAction SilentlyContinue if ($P) { $FMSG = "Останавливаю процесс $PNAME" Write-Host "$FMSG" -ForegroundColor Cyan Stop-Process -InputObject $P -Force } } } function StartVNCProcess { param ( [Parameter(Mandatory = $true)] [string]$Path, [Parameter(Mandatory = $true)] [PSCustomObject[]]$Arguments ) $FDIR = Split-Path -Path $Path -Parent $TmpErr = [System.IO.Path]::GetTempFileName() $FARGS = $Arguments | ForEach-Object { $_.Argument } Write-Host "Запуск $Path с параметрами: $($FARGS -join ' ')" -ForegroundColor Cyan $PP = Start-Process -FilePath $Path -ArgumentList $FARGS -WorkingDirectory $FDIR -Wait -PassThru -RedirectStandardError $TmpErr if ($PP.ExitCode -ne 0) { $ErrText = Get-Content $TmpErr -Raw Write-Host "Ошибка ($($PP.ExitCode)): $ErrText" -ForegroundColor Red } else { Write-Host "[Ок] - Запуск $Path с параметрами: $($FARGS -join ' ')" -ForegroundColor Green } if (Test-Path $TmpErr) { Remove-Item $TmpErr -Force } } function ManageVNCService { param ( [Parameter(Mandatory = $true)] [validateset('stop', 'start')] [String]$SetStatus ) $VNC_SVC = Get-Service -Name $VNC_SVC_NAME if (!($VNC_SVC)) { $FMSG = "Не существует служба '$VNC_SVC_NAME'" Write-Host "$FMSG" -ForegroundColor Red return $false } $VNC_STATUS = $($VNC_SVC | Select-Object -Property Status).Status.ToString().ToLower() $FMSG = "Служба '$VNC_SVC_NAME' Status = $VNC_STATUS " Write-Host "$FMSG" -ForegroundColor Cyan if ($SetStatus -eq 'stop') { # if ("$VNC_STATUS" -eq '$running') if ("$VNC_STATUS" -eq 'running') { $FMSG = "Останавливаю службу '$VNC_SVC_NAME'" Write-Host "$FMSG" -ForegroundColor Yellow Stop-Service -InputObject $VNC_SVC $FMSG = 'Ожидание пару сек...' Write-Host "$FMSG" -ForegroundColor Yellow Start-Sleep -Seconds 2 return $true } else { $FMSG = "Служба '$VNC_SVC_NAME' уже остановлена" Write-Host "$FMSG" -ForegroundColor Green return $true } } if ($SetStatus -eq 'start') { if ("$VNC_STATUS" -eq 'running') { $FMSG = "Служба '$VNC_SVC_NAME' уже запущена" Write-Host "$FMSG" -ForegroundColor Green return $true } else { $FMSG = "Запускаем службу '$VNC_SVC_NAME'" Write-Host "$FMSG" -ForegroundColor Yellow Start-Service -InputObject $VNC_SVC $FMSG = 'Ожидание пару сек...' Write-Host "$FMSG" -ForegroundColor Yellow Start-Sleep -Seconds 2 return $true } } } function CheckVars { # Write-Host "CRACK_PATH = $CRACK_PATH" -ForegroundColor Cyan # Write-Host "VNC_DIR = $VNC_DIR" -ForegroundColor Cyan # Write-Host " = $" -ForegroundColor Magenta if (!(Test-Path "$CRACK_PATH")) { Write-Host "Отсутствует $CRACK_PATH" -ForegroundColor Red return $false } if (!(Test-Path "$VNC_DIR")) { Write-Host "Отсутствует $VNC_DIR" -ForegroundColor Red return $false } return $true } function AddExclusions { $WINDEFEND_SVC = Get-Service -Name WinDefend if (!($WINDEFEND_SVC)) { $FMSG = 'Служба WinDefend не установлена' Write-Host "$FMSG" -ForegroundColor Cyan return $true } $WINDEFEND_SVC_STATUS = $($WINDEFEND_SVC | Select-Object -Property Status).Status.ToString().ToLower() Set-Clipboard $WINDEFEND_SVC_STATUS $FMSG = "Служба WinDefend Status = $WINDEFEND_SVC_STATUS " Write-Host "$FMSG" -ForegroundColor Cyan # Read-Host 136 if ($WINDEFEND_SVC_STATUS -eq 'stopped') { return $true } try { $FMSG = "Добавляем в исключения '$CRACK_DIR'" Write-Host "$FMSG" -ForegroundColor Cyan Add-MpPreference -ExclusionPath "$CRACK_DIR" $FMSG = "Добавляем в исключения '$CRACK_PATH'" Write-Host "$FMSG" -ForegroundColor Cyan Add-MpPreference -ExclusionPath "$CRACK_PATH" $FMSG = "Добавляем в исключения '$VNC_DIR'" Write-Host "$FMSG" -ForegroundColor Cyan Add-MpPreference -ExclusionPath "$VNC_DIR" return $true } catch { $FMSG = 'Ошибка добавления исключений в WinDefend' Write-Host "$FMSG" -ForegroundColor Red return $false } } function PatchingVNC { ### 1.Патчим все exe файлы в папке $CRACK_ARGS = @( [PSCustomObject]@{NAME = 'Argument'; Argument = 'patch'; DESCR = '' } [PSCustomObject]@{NAME = 'VNC_DIR'; Argument = "`"$VNC_DIR`""; DESCR = '' } ) StartVNCProcess -Path "$CRACK_PATH" -Arguments $CRACK_ARGS } function GenericLicense { ### 2.Генерим и копируем license.txt $CRACK_ARGS = @() if (Test-Path "$LICENSE_PATH") { Remove-Item -Path "$LICENSE_PATH" -Force -InformationAction SilentlyContinue } $CRACK_ARGS = @( [PSCustomObject]@{NAME = 'Argument'; Argument = 'license'; DESCR = '' } ) if (Test-Path "$LICENSE_PATH") { Copy-Item -Path "$LICENSE_PATH" -Destination "$VNC_DIR" -Force -InformationAction SilentlyContinue } StartVNCProcess -Path "$CRACK_PATH" -Arguments $CRACK_ARGS } function Licensing { ### 3.Запускаем vnclicense.exe # $VNC_LICENSE_PATH $CRACK_ARGS = @() $CRACK_ARGS = @( [PSCustomObject]@{NAME = 'Argument'; Argument = '-add'; DESCR = '' } [PSCustomObject]@{NAME = 'Argument'; Argument = "$($LICENSE).txt"; DESCR = '' } ) if (Test-Path "$LICENSE_PATH") { Copy-Item -Path "$LICENSE_PATH" -Destination "$VNC_DIR" -Force -InformationAction SilentlyContinue } StartVNCProcess -Path "$VNC_LICENSE_PATH" -Arguments $CRACK_ARGS } function Main { Clear-Host & Update-Gper if (Test-Path "$PROFILE") { Write-Host "Загружаю профиль: $PROFILE" -ForegroundColor Green . "$PROFILE" } elseif (Test-Path $(Join-Path -Path $(Split-Path -Path $PROFILE -Parent) -ChildPath 'Profile.ps1' )) { Write-Host "Загружаю профиль: $(Join-Path -Path $(Split-Path -Path $PROFILE -Parent) -ChildPath 'Profile.ps1' )" -ForegroundColor Green . "$(Join-Path -Path $(Split-Path -Path $PROFILE -Parent) -ChildPath 'Profile.ps1' )" } else { Write-Host "Профиль не найден: $PROFILE" -ForegroundColor Yellow } $RES = Download-Path if ($false -eq $RES) { return } $FMSG = 'Проверяю переменные окружения...' Write-Host "$FMSG" -ForegroundColor Cyan $RES = CheckVars if ($false -eq $RES) { return } # Read-Host CheckVars $FMSG = 'Добавляю исключения в WinDefend...' Write-Host "$FMSG" -ForegroundColor Cyan $RES = AddExclusions if ($false -eq $RES) { return } # Read-Host AddExclusions $FMSG = 'Останавлию службу VNC и процессы...' Write-Host "$FMSG" -ForegroundColor Cyan $RES = ManageVNCService -SetStatus stop if ($false -eq $RES) { return } # Read-Host ManageVNCService -SetStatus stop StopVNCProcess # Read-Host StopVNCProcess PatchingVNC # Read-Host ManageVNCService -SetStatus stop GenericLicense # Read-Host GenericLicense Licensing # Read-Host Licensing $RES = ManageVNCService -SetStatus start if ($false -eq $RES) { return } # Read-Host ManageVNCService -SetStatus start } Main