Files
vpn-proxy/discord-windows-hack.ps1

419 lines
20 KiB
PowerShell
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ==========================================
# <20> PROXIFYRE INSTALLER ДЛЯ DISCORD/VESKTOP
# ==========================================
param(
[switch]$Force, # Принудительная переустановка
[string]$Proxy = "", # Адрес прокси (для неинтерактивного режима), например "127.0.0.1:8080"
[string[]]$Apps = @(), # Приложения (для неинтерактивного режима), например @("Discord", "Vesktop")
[switch]$Silent # Тихий режим (без лишнего вывода, для вызова из других скриптов)
)
# ==========================================
# 🛠️ ПРЯМЫЕ ССЫЛКИ (Hardcoded)
# ==========================================
$InstallPath = "C:\Tools\ProxiFyre"
$DriverUrl = "https://github.com/wiresock/ndisapi/releases/download/v3.6.2/Windows.Packet.Filter.3.6.2.1.x64.msi"
$AppUrl = "https://github.com/wiresock/proxifyre/releases/download/v2.1.4/ProxiFyre-v2.1.4-x64-signed.zip"
# ==========================================
# 0. Проверка прав
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Host "⛔ Запусти от имени АДМИНИСТРАТОРА!" -ForegroundColor Red
Start-Sleep -s 3; Exit
}
Clear-Host
Write-Host "==========================================" -ForegroundColor Cyan
Write-Host " 🚀 PROXIFYRE SERVICE INSTALLER " -ForegroundColor Cyan
Write-Host "==========================================" -ForegroundColor Cyan
# ==========================================
# ПРОВЕРКА СУЩЕСТВУЮЩЕЙ УСТАНОВКИ
# ==========================================
$proxifyreExists = Test-Path "$InstallPath\ProxiFyre.exe"
$proxifyreService = Get-Service -Name "ProxiFyreService" -ErrorAction SilentlyContinue
if ($proxifyreExists -and -not $Force) {
Write-Host ""
Write-Host "==========================================" -ForegroundColor Green
Write-Host " ✅ PROXIFYRE УЖЕ УСТАНОВЛЕН! " -ForegroundColor Green
Write-Host "==========================================" -ForegroundColor Green
Write-Host ""
# Статус службы
Write-Host "📊 Статус службы: " -NoNewline -ForegroundColor Yellow
if ($proxifyreService -and $proxifyreService.Status -eq 'Running') {
Write-Host "РАБОТАЕТ" -ForegroundColor Green
}
elseif ($proxifyreService) {
Write-Host "$($proxifyreService.Status)" -ForegroundColor Red
}
else {
Write-Host "НЕ ЗАРЕГИСТРИРОВАНА" -ForegroundColor Red
}
Write-Host ""
Write-Host "📁 Расположение:" -ForegroundColor Yellow
Write-Host " Путь: $InstallPath" -ForegroundColor White
Write-Host " Конфиг: $InstallPath\app-config.json" -ForegroundColor White
Write-Host " Логи: $InstallPath\logs\" -ForegroundColor White
Write-Host ""
# Показываем текущий конфиг
$configPath = "$InstallPath\app-config.json"
if (Test-Path $configPath) {
try {
$config = Get-Content $configPath -Raw | ConvertFrom-Json
$apps = $config.proxies[0].appNames -join ", "
$proxy = $config.proxies[0].socks5ProxyEndpoint
Write-Host "⚙️ Текущие настройки:" -ForegroundColor Yellow
Write-Host " Прокси: $proxy" -ForegroundColor White
Write-Host " Приложения: $apps" -ForegroundColor White
Write-Host ""
}
catch {
Write-Host " ⚠️ Не удалось прочитать конфиг" -ForegroundColor Yellow
}
}
Write-Host "==========================================" -ForegroundColor Cyan
Write-Host ""
Write-Host "Что вы хотите сделать?" -ForegroundColor Yellow
Write-Host " [1] Запустить службу" -ForegroundColor White
Write-Host " [2] Остановить службу" -ForegroundColor White
Write-Host " [3] Перезапустить службу" -ForegroundColor White
Write-Host " [4] Изменить настройки (прокси/приложения)" -ForegroundColor White
Write-Host " [5] Показать логи" -ForegroundColor White
Write-Host " [6] Показать конфиг" -ForegroundColor White
Write-Host " [7] Переустановить (полная переустановка)" -ForegroundColor White
Write-Host " [q] Выход" -ForegroundColor White
Write-Host ""
$choice = Read-Host "👉 Выбор (1-7/q)"
switch ($choice) {
"1" {
Write-Host "`n🚀 Запуск службы..." -ForegroundColor Cyan
Start-Process -FilePath "$InstallPath\ProxiFyre.exe" -ArgumentList "start" -Wait -NoNewWindow
Start-Sleep -s 2
$svc = Get-Service -Name "ProxiFyreService" -ErrorAction SilentlyContinue
Write-Host " Статус: $($svc.Status)" -ForegroundColor Green
exit 0
}
"2" {
Write-Host "`n⏹️ Остановка службы..." -ForegroundColor Cyan
Start-Process -FilePath "$InstallPath\ProxiFyre.exe" -ArgumentList "stop" -Wait -NoNewWindow
Write-Host " ✅ Служба остановлена" -ForegroundColor Green
exit 0
}
"3" {
Write-Host "`n🔄 Перезапуск службы..." -ForegroundColor Cyan
Start-Process -FilePath "$InstallPath\ProxiFyre.exe" -ArgumentList "stop" -Wait -NoNewWindow
Start-Sleep -s 1
Start-Process -FilePath "$InstallPath\ProxiFyre.exe" -ArgumentList "start" -Wait -NoNewWindow
Start-Sleep -s 2
$svc = Get-Service -Name "ProxiFyreService" -ErrorAction SilentlyContinue
Write-Host " Статус: $($svc.Status)" -ForegroundColor Green
exit 0
}
"4" {
Write-Host "`n⚙️ Изменение настроек..." -ForegroundColor Cyan
# Выбор режима
Write-Host ""
Write-Host "📡 Где работает VPN-прокси?" -ForegroundColor Yellow
Write-Host " [1] Удалённый сервер (Docker на VPS/другом ПК)" -ForegroundColor White
Write-Host " [2] Локальный Docker Desktop (на этом ПК)" -ForegroundColor White
$modeChoice = Read-Host "👉 Выбор (1-2)"
if ($modeChoice -eq "2") {
# Локальный Docker — нужен sing-box
$singboxTask = Get-ScheduledTask -TaskName "SingBoxProxy" -ErrorAction SilentlyContinue
if ($singboxTask -and $singboxTask.State -eq "Running") {
Write-Host "`n✅ Нативный sing-box работает!" -ForegroundColor Green
$NewProxy = "127.0.0.1:1080"
}
else {
Write-Host "`n⚠️ Нативный sing-box не запущен!" -ForegroundColor Yellow
Write-Host " Запустите: .\setup-singbox-native.ps1" -ForegroundColor Cyan
$runSetup = Read-Host " Запустить сейчас? (y/n)"
if ($runSetup -eq "y") {
$setupScript = Join-Path $PSScriptRoot "setup-singbox-native.ps1"
if (Test-Path $setupScript) { & $setupScript }
}
$NewProxy = "127.0.0.1:1080"
}
}
else {
# Удалённый прокси
Write-Host "`n🌐 SOCKS5 Прокси (IP:PORT):" -ForegroundColor Yellow
$NewProxy = Read-Host " [Enter] для 127.0.0.1:8080"
if ([string]::IsNullOrWhiteSpace($NewProxy)) { $NewProxy = "127.0.0.1:8080" }
}
# Запрос приложений
Write-Host "`n🎮 Что проксируем?" -ForegroundColor Yellow
Write-Host " [1] Vesktop"
Write-Host " [2] Discord"
Write-Host " [3] Vesktop + Discord"
$AppChoice = Read-Host "👉 Выбор (1-3)"
switch ($AppChoice) {
"2" { $NewApps = @("Discord") }
"3" { $NewApps = @("Vesktop", "Discord") }
Default { $NewApps = @("Vesktop") }
}
# Генерируем новый конфиг
Write-Host "`n📝 Обновляем конфиг..." -ForegroundColor Cyan
$ConfigData = @{
logLevel = "Info"
proxies = @(
@{
appNames = $NewApps
socks5ProxyEndpoint = $NewProxy
username = ""
password = ""
supportedProtocols = @("TCP", "UDP")
}
)
excludes = @()
} | ConvertTo-Json -Depth 4
Set-Content -Path $configPath -Value $ConfigData -Encoding UTF8
Write-Host " ✅ Конфиг обновлён:" -ForegroundColor Green
Write-Host " Прокси: $NewProxy" -ForegroundColor White
Write-Host " Приложения: $($NewApps -join ', ')" -ForegroundColor White
# Перезапуск службы
Write-Host "`n🔄 Перезапуск службы для применения..." -ForegroundColor Cyan
Start-Process -FilePath "$InstallPath\ProxiFyre.exe" -ArgumentList "stop" -Wait -NoNewWindow
Start-Sleep -s 1
Start-Process -FilePath "$InstallPath\ProxiFyre.exe" -ArgumentList "start" -Wait -NoNewWindow
Start-Sleep -s 2
$svc = Get-Service -Name "ProxiFyreService" -ErrorAction SilentlyContinue
Write-Host " Статус: $($svc.Status)" -ForegroundColor Green
exit 0
}
"5" {
Write-Host "`n📋 Логи ProxiFyre:" -ForegroundColor Cyan
$logFiles = Get-ChildItem "$InstallPath\logs\*.log" -ErrorAction SilentlyContinue | Sort-Object LastWriteTime -Descending | Select-Object -First 1
if ($logFiles) {
Get-Content $logFiles.FullName -Tail 50
}
else {
Write-Host " Лог-файлы не найдены" -ForegroundColor Yellow
}
exit 0
}
"6" {
Write-Host "`n📄 Конфиг ProxiFyre:" -ForegroundColor Cyan
if (Test-Path $configPath) {
Get-Content $configPath
}
else {
Write-Host " Конфиг не найден" -ForegroundColor Yellow
}
exit 0
}
"7" {
Write-Host "`n🔧 Переустановка..." -ForegroundColor Cyan
$Force = $true
# Продолжаем выполнение скрипта для полной переустановки
}
default {
Write-Host "`n Выход" -ForegroundColor Gray
exit 0
}
}
}
# --- ШАГ 1: КОНФИГУРАЦИЯ ---
# Если параметры переданы — используем их (неинтерактивный режим)
if ($Proxy -and $Apps.Count -gt 0) {
$UserProxy = $Proxy
$TargetApps = $Apps
if (-not $Silent) {
Write-Host "`n⚙️ Неинтерактивный режим:" -ForegroundColor Cyan
Write-Host " Прокси: $UserProxy" -ForegroundColor White
Write-Host " Приложения: $($TargetApps -join ', ')" -ForegroundColor White
}
}
else {
# Интерактивный режим — сначала выбор режима
Write-Host ""
Write-Host "==========================================" -ForegroundColor Cyan
Write-Host " 📡 ГДЕ РАБОТАЕТ ВАШ VPN-ПРОКСИ? " -ForegroundColor Cyan
Write-Host "==========================================" -ForegroundColor Cyan
Write-Host ""
Write-Host " [1] 🌐 УДАЛЁННЫЙ СЕРВЕР" -ForegroundColor White
Write-Host " Docker на VPS или другом ПК в сети" -ForegroundColor Gray
Write-Host " (UDP работает, просто укажите адрес)" -ForegroundColor Gray
Write-Host ""
Write-Host " [2] 💻 ЛОКАЛЬНЫЙ DOCKER НА WINDOWS" -ForegroundColor White
Write-Host " Docker Desktop на этом компьютере" -ForegroundColor Gray
Write-Host " (UDP НЕ работает, нужен нативный sing-box)" -ForegroundColor Gray
Write-Host ""
$modeChoice = Read-Host "👉 Выбор (1-2)"
if ($modeChoice -eq "2") {
# Локальный Docker — нужен нативный sing-box
Write-Host ""
Write-Host "==========================================" -ForegroundColor Yellow
Write-Host " ⚠️ ЛОКАЛЬНЫЙ DOCKER DESKTOP " -ForegroundColor Yellow
Write-Host "==========================================" -ForegroundColor Yellow
Write-Host ""
Write-Host "Docker Desktop на Windows НЕ поддерживает UDP!" -ForegroundColor Red
Write-Host "Для голосовых звонков Discord нужен нативный sing-box." -ForegroundColor Red
Write-Host ""
# Проверяем, установлен ли уже нативный sing-box
$singboxInstalled = Test-Path "C:\Tools\sing-box\sing-box.exe"
$singboxTask = Get-ScheduledTask -TaskName "SingBoxProxy" -ErrorAction SilentlyContinue
if ($singboxInstalled -and $singboxTask -and $singboxTask.State -eq "Running") {
Write-Host "✅ Нативный sing-box уже установлен и работает!" -ForegroundColor Green
Write-Host " Прокси: 127.0.0.1:1080" -ForegroundColor White
$UserProxy = "127.0.0.1:1080"
}
else {
Write-Host "Для установки нативного sing-box запустите:" -ForegroundColor Yellow
Write-Host " .\setup-singbox-native.ps1" -ForegroundColor Cyan
Write-Host ""
$runSetup = Read-Host "Запустить setup-singbox-native.ps1 сейчас? (y/n)"
if ($runSetup -eq "y") {
$setupScript = Join-Path $PSScriptRoot "setup-singbox-native.ps1"
if (Test-Path $setupScript) {
& $setupScript
# После установки используем порт 1080
$UserProxy = "127.0.0.1:1080"
}
else {
Write-Host "❌ Скрипт setup-singbox-native.ps1 не найден!" -ForegroundColor Red
exit 1
}
}
else {
Write-Host ""
Write-Host "Установите sing-box вручную и повторите." -ForegroundColor Yellow
exit 0
}
}
}
else {
# Удалённый прокси — просто спрашиваем адрес
Write-Host "`n🌐 SOCKS5 Прокси (IP:PORT):" -ForegroundColor Yellow
Write-Host " Примеры: 192.168.1.100:8080, myserver.com:8080" -ForegroundColor Gray
$UserProxy = Read-Host " [Enter] для 127.0.0.1:8080"
if ([string]::IsNullOrWhiteSpace($UserProxy)) { $UserProxy = "127.0.0.1:8080" }
}
Write-Host "`n🎮 Что проксируем?" -ForegroundColor Yellow
Write-Host " [1] Vesktop"
Write-Host " [2] Discord"
Write-Host " [3] Vesktop + Discord"
$AppChoice = Read-Host "👉 Выбор (1-3)"
switch ($AppChoice) {
"2" { $TargetApps = @("Discord") }
"3" { $TargetApps = @("Vesktop", "Discord") }
Default { $TargetApps = @("Vesktop") }
}
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# --- ШАГ 2: ПОДГОТОВКА (ОЧИСТКА) ---
Write-Host "`n🧹 [0/3] Очистка процессов..." -ForegroundColor Magenta
# Убиваем любые старые процессы, чтобы они не держали драйвер
Stop-Process -Name "ProxiFyre" -Force -ErrorAction SilentlyContinue
Start-Sleep -s 1
# --- ШАГ 3: ДРАЙВЕР ---
Write-Host "⚙️ [1/3] Ставим драйвер (Packet Filter)..." -ForegroundColor Magenta
$MsiFile = "$env:TEMP\WinpkFilter.msi"
try {
Invoke-WebRequest -Uri $DriverUrl -OutFile $MsiFile -ErrorAction Stop
$Proc = Start-Process -FilePath "msiexec.exe" -ArgumentList "/i `"$MsiFile`" /qn /norestart" -Wait -PassThru
if ($Proc.ExitCode -eq 0) { Write-Host " ✅ Успешно." -ForegroundColor Green }
elseif ($Proc.ExitCode -eq 1603) { Write-Host " ⚠️ Уже установлен." -ForegroundColor Yellow }
}
catch {
Write-Error "❌ Ошибка скачивания драйвера: $_"; Exit
}
# --- ШАГ 4: PROXIFYRE ---
Write-Host "`n⬇️ [2/3] Ставим ProxiFyre..." -ForegroundColor Magenta
# Если папка есть, чистим всё, кроме конфига (если вдруг хотим сохранить), но проще пересоздать
if (Test-Path $InstallPath) { Remove-Item $InstallPath -Recurse -Force -ErrorAction SilentlyContinue }
New-Item -ItemType Directory -Force -Path $InstallPath | Out-Null
try {
$ZipFile = "$env:TEMP\ProxiFyre.zip"
Invoke-WebRequest -Uri $AppUrl -OutFile $ZipFile -ErrorAction Stop
Expand-Archive -Path $ZipFile -DestinationPath $InstallPath -Force
Write-Host " ✅ Распаковано." -ForegroundColor Green
}
catch {
Write-Error "❌ Ошибка скачивания ProxiFyre: $_"; Exit
}
# Вытаскиваем из подпапки если надо
$ExeItem = Get-ChildItem -Path $InstallPath -Filter "ProxiFyre.exe" -Recurse | Select-Object -First 1
if ($ExeItem.DirectoryName -ne $InstallPath) {
Copy-Item -Path "$($ExeItem.DirectoryName)\*" -Destination $InstallPath -Recurse -Force
}
# --- ШАГ 5: КОНФИГ ---
Write-Host "`n📝 [3/3] Генерируем конфиг..." -ForegroundColor Cyan
$ConfigPath = Join-Path -Path $InstallPath -ChildPath "app-config.json"
$ConfigData = @{
logLevel = "Info"
proxies = @(
@{
appNames = $TargetApps
socks5ProxyEndpoint = $UserProxy
username = ""
password = ""
supportedProtocols = @("TCP", "UDP")
}
)
excludes = @()
} | ConvertTo-Json -Depth 4
Set-Content -Path $ConfigPath -Value $ConfigData -Encoding UTF8
# --- ШАГ 6: УСТАНОВКА СЛУЖБЫ ---
Write-Host "`n🛡️ [4/3] Регистрация службы Windows..." -ForegroundColor Cyan
$ExePath = Join-Path -Path $InstallPath -ChildPath "ProxiFyre.exe"
# 1. Удаляем старую службу если была
Start-Process -FilePath $ExePath -ArgumentList "uninstall" -Wait -NoNewWindow
Start-Sleep -s 1
# 2. Инсталлируем службу
Start-Process -FilePath $ExePath -ArgumentList "install" -Wait -NoNewWindow
Start-Sleep -s 1
# 3. Запускаем службу
Write-Host " 🚀 Запускаем службу..." -ForegroundColor Yellow
Start-Process -FilePath $ExePath -ArgumentList "start" -Wait -NoNewWindow
Start-Sleep -s 3
# 4. Проверка
# Важно: имя службы в системе именно "ProxiFyreService" (судя по твоим логам)
$Service = Get-Service -Name "ProxiFyreService" -ErrorAction SilentlyContinue
if ($Service -and $Service.Status -eq 'Running') {
Write-Host "`n==========================================" -ForegroundColor Green
Write-Host "🎉 УСПЕХ! Служба работает в фоне." -ForegroundColor Green
Write-Host "📁 Логи тут: $InstallPath\logs"
Write-Host "=========================================="
}
else {
Write-Host "`n⚠️ Служба установлена, но статус: $($Service.Status). Проверь логи." -ForegroundColor Red
Write-Host "Попробуй вручную: net start ProxiFyreService"
}