Order Of Six Angles logo security research Order Of Six Angles
← Все модели

Финальный ответ модели

Qwen3.8-27B-NVFP4

I now have code-confirmed evidence for every major module. I have enough to write the complete report.

---

Статический анализ PE (V5 IDA) — итоговый отчёт

1. Общий вердикт

Файл — 64-битный Windows PE (AMD64), собранный на Rust (MinGW-w64 CRT). Это полнофункциональный инфостилер / RAT с HTTP-C2, beacon-циклом, TLV-протоколом команд и набором модулей: кража cookie браузеров, токенов Discord/Telegram, криптовалютных кошельков, кейлоггер, буфер обмена, скриншоты, веб-камера, микрофон, реестр, сервисы, сеть, перечисление/инъекция процессов, BOF/PE-инъекция, рантайм-рансом (удаление теневых копий), персистентность в реестре, TTS-«развлечение», SOCKS5.

ПараметрЗначение
Image base0x140000000
Точка входа (OEP)start @ 0x140045A50
Функций / строк / сегментов1278 / 806 / 8
.text0x1400010000x14006C000
.idata0x14008E6280x14008EDF8

TLS-колбэки (loader boilerplate, порядок: TlsCallback_0TlsCallback_1TlsCallback_2 → OEP):

2. Поток выполнения (вход → main → beacon)

Цепочка подтверждена по коду:
start @ 0x140045A50__mingw_CRTStartup @ 0x140045830 (вызов user main @ 0x1400459F8) → sub_1400136B0 (Rust main wrapper) → sub_140002040(sub_140002644)sub_140001000 @ 0x140001000 (2223 B) — основной beacon-цикл.

3. C2 и сетевое поведение

C2-конфигурация зашита в коде (подтверждено по .rdata и коду sub_1400122FE):

ЭлементЗначениеАдрес
Хост127.0.0.1 (len 9)0x14007DAF0
Порт8443 (0x20FB)рядом с хостом
Базовый путь/api/rat/0x140080EE0
Команды/commands0x140080EE0
Регистрация/api/rat/register?id=фрагмент 0x140080F8C
User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.360x14007F000
ТаймаутыWinHttpSetTimeouts(10000,10000,30000,30000)sub_1400122FE
ОтладкаRAT starting. C2=в строках

Транспорт — WinHTTP (WinHttpOpen/WinHttpConnect/WinHttpOpenRequest/WinHttpSendRequest/WinHttpReceiveResponse/WinHttpReadData). Инициализация — sub_1400122FE @ 0x1400122FE; POST-хелпер — sub_140012584 @ 0x140012584; UTF-8→UTF-16 — sub_14000223A.

> ⚠️ Хост 127.0.0.1 — loopback. Это либо dev/test-сборка, либо хост переопределяется во время работы (в sub_1400122FE загрузка конфига из файла не найдена). Реальный C2 в боевой сборке будет другим.

4. Beacon-цикл и протокол команд

sub_140001000:

  1. 1. Инициализация транспорта (sub_1400122FE).
  2. 2. Регистрация с ретраями (4 попытки, Sleep(5000<<n), кап 60000 мс).
  3. 3. Основной цикл: GET /commands (ответ ≤ 0x10000 = 64 КБ), разбор TLV-потока: 4B длина + 4B тип + payload, обработка через sub_140003CA0.
  4. 4. Управление: тип 70 (0x46) обновляет интервал (dword_140096004); бит 0 флагаExitProcess(0); сон 1000*dword_140096000 с джиттером ±10% (GetTickCount64).

Диспетчер командsub_140003CA0 @ 0x140003CA0 (35 822 B, конец 0x14000C88E), монолитный (Rust встраивает все обработчики). В прологе подтверждена проверка диапазона ID:

inc  esi            ; esi = a1 = command_id
cmp  esi, 0x6F
ja   default        ; command_id >= 0x6F  → "Unknown command"

т.е. валидные ID команд — 0x00..0x6E (0..110), далее — Unknown command (строка @ 0x14007EEE0, код @ 0x14000729B). Дальше — диспетчеризация по таблице указателей.

5. Регистрация и agent ID

sub_1400128AB @ 0x1400128AB:

6. Модули (возможности) — подтверждено строками и кодом

Структура проекта (из строк-путей в .rdata): src/main.rs, src/transport/beacon.rs, src/engine/{commands,exec,fs,ps}.rs, src/modules/{stealer,ransomware,screenshot,clipboard,registry,services,network,clipper,persist,keylog,postex,socks5,webcam,fun}.rs, src/util/{sysinfo,string,crypto,sqlite}.rs.

МодульДоказательства (адреса)
Stealer / cookiesub_14000F9D1 (вызов из диспетчера @ 0x140003D4C): chrome.exe @ 0x140080116, msedge.exe @ 0x1400801F8, firefox.exe; [Chrome] Not running.\n[Chrome] Decrypting cookies...\n @ 0x140080120, Cannot decrypt master key.\n @ 0x1400801DD, [Firefox] Reading cookies (plaintext)... @ 0x14008029A. Chrome/Edge: Local State → DPAPI → AES; Firefox: FindFirstFileA/FindNextFileA по cookies.sqlite (plaintext).
Крипто cookiesub_140010CBA @ 0x140010CBA: BCryptOpenAlgorithmProvider(L"AES"), BCryptSetProperty(L"ChainingMode","C") (CBC), BCryptGenerateSymmetricKey (16B IV), BCryptDecrypt; версии v10/v20 (константы 0x303176/0x303276); No cookies could be decrypted.\n @ 0x140080480. DPAPI-хелпер sub_140002E2A: CryptUnprotectData (без энтропии).
Discord / Telegramdiscord.exe @ 0x14007FFE3, .ldb.log @ 0x140080080, Discord LevelDB not found.\n @ 0x14008004B, === Discord === @ 0x14007FFEE, telegram.exe @ 0x1400054D9, Telegram tdata not found.\n=== Telegram === @ 0x140080376, No tokens found.\n @ 0x1400800BD.
Кошелькиbitcoin_wallet @ 0x14008060C, No wallets found.\n @ 0x140080677.
КейлоггерПоток StartAddress @ 0x14000D893: SetWindowsHookExA(13 /WH_KEYBOARD_LL/, fn, GetModuleHandleA(NULL), 0) + цикл GetMessageA/TranslateMessage/DispatchMessageA. Колбэк fn @ 0x14000D941: ToUnicodeEx, GetForegroundWindow+GetWindowTextA (заголовок окна), буфер byte_14006DAF0 (64 КБ, инд. qword_14009EAD0), спец-клавиши: 0x08 (Backspace) @ 0x14007F100, 0x09 (Tab) @ 0x14007F101, [ESC] @ 0x14007F102, Enter/Space; GetAsyncKeyState(16) (Shift).
Буфер обменаGetClipboardData @ 0x140006269 (текст) и 0x140006805 (изображение); Error: no text in clipboard @ 0x140080C60, Error: no image in clipboard @ 0x14007F908, Error: cannot open clipboard @ 0x14007F870.
СкриншотGDI+ (GdipCreateBitmapFromHBITMAP, GdipSaveImageToStream → PNG); Error: invalid bitmap @ 0x14007F8C0.
Веб-камераcapCreateCaptureWindowA @ 0x14000679B; Webcam @ 0x14007F7F3, Error: no webcam found @ 0x14007F828, Error: cannot create capture window @ 0x14007F958.
МикрофонWINMM waveInOpen @ 0x14000ABAC (+ waveIn*).
РеестрRegSetValueExA @ 0x140009F66/0x14000BFE2, RegOpenKeyExA ×9, RegDeleteValueA ×4, RegDeleteKeyA ×2; дамп: [Subkeys]\n @ 0x140080788, \n[Values]\n @ 0x1400807B7, (Default) @ 0x1400807E0, BINARY/DWORD/EXPAND_SZ/MULTI_SZ @ 0x1400807F4..; registry @ 0x14007E8E8; Error: need path\valuename @ 0x1400808B8.
СервисыEnumServicesStatusExA @ 0x140006D08/0x140006D88; RunningStoppedOther @ 0x140080B50.
СетьGetExtendedTcpTable @ 0x140005ABE/0x140005B05; заголовок PROTO LOCAL ADDRESS... @ 0x140005B4A.
Процессы / инъекцияCreateProcessA @ 0x14000A19A, 0x14000C82E; OpenProcess ×2; NAME STATE PID DISPLAY @ 0x140006DC8, Error: invalid PID @ 0x140006E2F, system_stop @ 0x14007E780. Инъекция-хелпер sub_14000DD36 @ 0x14000DD36: OpenProcess(0x1F0FFF, 0, pid) (полные права), `VirtualAllocEx(..., MEM_COMMITMEM_RESERVE, PAGE_EXECUTE_READWRITE), WriteProcessMemory, CreateRemoteThread`.
BOF-инъекцияError: only x64 BOF supported @ 0x14007F690, Error: no 'go' entry point in BOF @ 0x14007F548, Error: invalid COFF sections @ 0x14007F5E8, Error: COFF too small @ 0x14007F6E0.
PE-инъекцияError: only x64 PE supported @ 0x14007F358, Error: invalid PE signature @ 0x14007F3A8, Error: invalid PE header @ 0x14007F3F8, Error: not a PE file @ 0x14007F448, Error: PE too small @ 0x14007F490, Error: VirtualAlloc failed @ 0x14007F308.
Рансомvssadmin delete shadows /all /quiet @ 0x14007F7D0 (удаление теневых копий); src/modules/ransomware.rs.
Персистентностьsub_14000F550 @ 0x14000F550: RegCreateKeyExA(HKCU /0x80000001/, "Software\\RATConfig", ..., KEY_WRITE) + RegSetValueExA(hKey, "persist_name", 0, REG_SZ, name, len) (имя ≤ 63 симв.). Плюс Software\Microsoft\Windows\CurrentVersion\Run @ 0x14007FD88 (автозагрузка).
TTS «fun»PowerShell @ 0x14007F016: powershell -Command "Add-Type -AssemblyName System.Speech; $s = New-Object System.Speech.Synthesis.SpeechSynthesizer; $s.Speak(' + msg + ')"; CreateProcessA @ 0x14000C82E.
SOCKS5WS2_32 (socket/bind/listen/accept/connect/send/recv); src/modules/socks5.rs.
Файлы / exec / sysinfoError: need src and dst @ 0x14007E4E0, Error: need path and data @ 0x14007E648; === System Info ===\n @ 0x1400050B0, x64x86ARMARM64Unknown @ 0x1400052B3.

7. Персистентность (точные пути)

8. Криптография

9. IOCs

10. Ограничения анализа

  1. 1. Хост C2 = 127.0.0.1 — loopback; вероятно dev/test-сборка или рантайм-переопределение (загрузка конфига не найдена). Боевой адрес в этой сборке отсутствует.
  2. 2. Диспетчер sub_140003CA0 (35 КБ) — монолитный; полная декомпиляция недоступна (oversized lift). Подтверждены: диапазон ID 0x00..0x6E, Unknown command, и все обработчики по строкам/вызовам API. Точное числовое соответствие каждого ID конкретному модулю не восстановлено полностью.
  3. 3. Строки Rust ссылаются через таблицы (ptr,len) в .rdata (прямых code-xref нет), поэтому связь «строка → код» выстроена через from_addr и api_callsites.

Если нужно, могу: (а) восстановить точную таблицу «ID команды → модуль» по таблице указателей в прологе диспетчера; (б) детализировать конкретный модуль (например, рансом или SOCKS5); (в) выгрузить список всех импортов по DLL.