b04aa5d0ede5653b20f6db6d6df0020e396dfe8688f2c4712cff6dccce2002d4brooter: b04aa5d0 — Russian Delphi VCL brute-forcer with ICQ contact, SALES_INQUIRY.pdf.exe lure
Executive Summary
A 1.65 MB PE32 GUI binary built in Delphi 7/2006-era VCL, presenting as [Brooter] ICQ: 322322032. This is a Russian-language account brute-forcing / credential-stuffing tool, not a trojan, RAT, or infostealer. The threat is purely in the social-engineering distribution vector: the file was submitted to MalwareBazaar as SALES_INQUIRY.pdf.exe, exploiting Windows' hidden-extension default. Static-only analysis (no CAPE machine available for PE32).
What It Is
| Field | Value |
|---|---|
| SHA-256 | b04aa5d0ede5653b20f6db6d6df0020e396dfe8688f2c4712cff6dccce2002d4 |
| Filename (as submitted) | SALES_INQUIRY.pdf.exe |
| Size | 1,691,648 bytes |
| File type | PE32 executable (GUI) Intel 80386, 9 sections ^[file.txt] |
| Compiler | Delphi (Borland/CodeGear/Embarcadero) — Linker 2.25, FastMM Borland Edition, SOFTWARE\Borland\Delphi\RTL registry path ^[strings.txt:20] ^[strings.txt:30] |
| Timestamp | Fri Jun 19 22:22:17 1992 (bogus; standard Delphi placeholder) ^[pefile.txt:34] |
| Signed | No ^[rabin2-info.txt] |
| Packing | None — standard Delphi compiled binary, no UPX, no custom packer |
| Overlay | None — .rsrc ends exactly at EOF (0x19D000) ^[pefile.txt:240] |
Tool type: Account brute-forcer / credential-stuffing utility with dictionary-attack and list-attack modes, threaded execution, and HTTP connectivity via WinInet/UrlMon.
Language / framework: Delphi Object Pascal with VCL (Visual Component Library). Full VCL RTL present including FastMM memory manager, standard Delphi exception classes, and TComponent/TForm GUI framework. ^[strings.txt:1-400]
Build / RE
Toolchain
- Compiler: Delphi 7-era or Delphi 2006/2007 (Borland/CodeGear). The presence of
FastMM Borland Edition(2004–2005 Pierre le Riche) and theSOFTWARE\Borland\Delphi\RTLregistry path points to pre-RAD Studio 2009. ^[strings.txt:20] ^[strings.txt:30] - Linker version: 2.25 (MajorLinkerVersion=0x2, MinorLinkerVersion=0x19) ^[exiftool.json]
- Memory manager: FastMM4, Borland Edition ^[strings.txt:20]
- Subsystem: Windows GUI ^[file.txt]
Sections (9)
| Section | Virtual Size | Raw Size | Entropy | Notes |
|---|---|---|---|---|
| .text | 0x6D498 | 0x6D600 | 6.53 | Code |
| .itext | 0x820 | 0xA00 | 5.53 | Delphi initterm code |
| .data | 0xB0A4 | 0xB200 | 1.84 | Initialized data |
| .bss | 0x4820 | 0 | 0.00 | Uninitialized data (no raw) |
| .idata | 0x27A4 | 0x2800 | 5.18 | Imports |
| .tls | 0x34 | 0 | 0.00 | Thread-local storage (no raw) |
| .rdata | 0x18 | 0x200 | — | Runtime data |
| .reloc | — | 0x7E00 | — | Base relocations |
| .rsrc | 0x119200 | 0x119200 | 5.92 | Resources — 1.15 MB |
^[pefile.txt:76-256]
Resources
The .rsrc section is large (1.15 MB) but entirely legitimate VCL resources, not an encrypted payload:
- RT_ICON (7 entries × 308 bytes) — standard Delphi icon suite ^[resources dump]
- RT_BITMAP (11 entries) — includes one 883 KB DIB bitmap (BITMAPINFOHEADER=40, 800×368×24bpp). Verified as a real bitmap, not steganography. Entropy 5.65. ^[resources dump]
- RT_GROUP_ICON (6 entries, 2,440–38,056 bytes) — icon group descriptors ^[resources dump]
- RT_RCDATA (14 entries) — includes a 144 KB DFM form resource (
TfrmBroot) and 16-byte cursor hotspot data ^[resources dump] - RT_STRING (2 entries × 82 bytes) ^[resources dump]
- RT_CURSOR (3 entries) ^[resources dump]
- RT_MANIFEST (1 entry, 581 bytes) — standard Delphi XPManifest referencing
Microsoft.Windows.Common-Controls6.0.0.0 ^[strings.txt:3825-3843]
No VS_VERSIONINFO resource is present — the Properties dialog would show no CompanyName, FileDescription, or ProductVersion. ^[pe resources scan]
Imports
Standard Delphi VCL import surface — no suspicious API injection, no process hollowing primitives, no crypto APIs beyond what the md5hash unit likely implements internally:
kernel32.dll— standard runtime (VirtualAlloc, CreateThread, Sleep, GetTickCount, etc.)user32.dll— full Win32 GUI surface (CreateWindowEx, SendMessage, MessageBox, etc.)gdi32.dll— graphics primitivesole32.dll/oleaut32.dll— COM/OLE automation (VCL requirement)advapi32.dll— RegQueryValueEx, RegOpenKeyEx, RegCloseKeyversion.dll— GetFileVersionInfo (VCL shell integration)comctl32.dll— ImageList, Common Controlscomdlg32.dll— GetOpenFileName (file dialog)shell32.dll— Shell_NotifyIcon (tray icon)
^[r2 imports]
Anti-analysis
None. No debugger detection, no VM checks, no timing loops, no encrypted strings. This is a plain Delphi GUI application compiled without obfuscation. The only "evasion" is the social-engineering filename.
Code Quality
Amateur / commodity crimeware. Hardcoded ICQ contact (322322032), Russian-language UI strings stored in plaintext DFM resources, no attempt to hide functionality. Uses standard VCL components (TButton, TEdit, TRadioButton, TGroupBox, TLabeledEdit, TUpDown, TStaticText, TTrayIcon, TPopupMenu).
Deploy / ATT&CK
Distribution
Social engineering via double-extension masquerade. The filename SALES_INQUIRY.pdf.exe exploits Windows Explorer's default "Hide extensions for known file types" setting, presenting as a PDF while executing a PE. ^[triage.json]
| Technique | ID | Observation |
|---|---|---|
| Double Extension Masquerade | T1036.007 | SALES_INQUIRY.pdf.exe — victim sees .pdf, OS runs .exe ^[triage.json] |
| Social Engineering Filename Lure | — | SALES_INQUIRY theme exploits procurement/business urgency |
Tool Functionality (static inference)
No CAPE detonation available (no Windows guest). Static analysis reveals an account brute-forcing utility with the following controls:
| UI Element | Purpose |
|---|---|
txtDict / txtList |
Load password dictionary or username/password list file |
btnDictOpen / btnListOpen |
File-open dialog (.txt filter) ^[strings.txt:3791] |
rdoDict / rdoList |
Select attack mode: dictionary vs list |
txtLogin |
Target login/username input |
txtThreads / udThreads |
Thread count spinner (TUpDown) |
btnStart / btnStop |
Start / stop attack |
cntGood / cntBad / cntCheck |
Color-coded counters (green/maroon/navy) for valid/invalid/total attempts |
TrayIcon / PopupMenu |
System tray minimization with Hide/Start/Stop/Exit |
Attack modes:
- Dictionary attack (
Атака по словарю— "attack by dictionary"): Loads a wordlist file, tests passwords against a target login. - List attack (
Атака по списку— "attack by list"): Loads a combo list (login:password pairs).
Threading: Configurable thread count via TUpDown control, suggesting parallel HTTP(S) requests to target authentication endpoints. ^[strings.txt:3740-3769]
HTTP capability: Imports WinInet and UrlMon units (standard Delphi HTTP client wrappers), indicating the tool makes web requests to target login forms. No hardcoded URLs or IPs found statically. ^[strings.txt:3445] ^[strings.txt:3444]
Hashing: Custom md5hash unit present, likely for MD5-based password hashing or response verification. ^[strings.txt:3470]
Compression: ZLibConst unit present, possibly for decompressing HTTP responses or compressed wordlists. ^[strings.txt:3471]
Persistence / C2 / Exfiltration
None observed. This is a standalone attack tool, not a persistent implant. No registry keys, no scheduled tasks, no startup entries. No C2 infrastructure. No data exfiltration from the victim host. The "malicious" behavior is the unauthorized credential-stuffing against third-party services, not host compromise.
Attribution
- Language: Russian (CP1251-encoded UI strings in DFM resource)
- Contact: ICQ UIN
322322032— classic Russian-speaking underground contact method - Tool name: "Brooter" (Russian slang for brute-forcer, from "brute force" → "брут" → "брутер")
- Era: Likely mid-to-late 2000s or early 2010s based on ICQ contact, Delphi 7-era build, and FastMM4 version
- Distribution: Repackaged under a business-document lure for social-engineering distribution. The original tool was likely distributed on Russian-language cracking/hacking forums and later repurposed by a different actor with the
SALES_INQUIRY.pdf.exefilename.
Interesting Tidbits
- No VS_VERSIONINFO: Empty version-info resource means the Properties dialog shows nothing — a small anti-triage signal, though more likely just default Delphi build settings.
- Fake timestamp: 1992-06-19 is a standard Delphi placeholder, not a real build date. ^[pefile.txt:34]
- Large
.rsrcsection: The 883 KB bitmap is unusually large for a tool icon but is a legitimate DIB (800×368×24bpp). It may be a splash screen or background image for the main form. No steganography detected. evalcompunit: An unusual unit name — possibly "expression compiler" or a custom evaluation component. Could be used for generating password variations or evaluating server responses.- No network IOCs: Unlike most malware in this corpus, this sample has zero hardcoded network indicators. Target URLs, proxies, and configurations are loaded at runtime from user input or external files.
- Tray icon behavior: The TTrayIcon + TPopupMenu pattern allows the tool to hide to the system tray while running brute-force threads in the background — a convenience feature for the attacker, not evasion.
How To Mess With It (Homelab Replication)
Build a comparable Delphi GUI brute-forcer
- Install Delphi 7 or Lazarus/Free Pascal (modern open-source equivalent).
- Create a new VCL Forms Application.
- Drop components: TEdit (login), TLabeledEdit (dictionary path), TUpDown + TEdit (thread count), TRadioGroup (attack mode), TButton (start/stop), TStaticText (counters in clGreen/clMaroon/clNavy).
- Add TTrayIcon + TPopupMenu for system tray minimization.
- Implement threading with TThread descendants making HTTP POST requests via TIdHTTP (Indy) or WinInet API.
- Add MD5 hashing for password transforms ( Indy
IdHashMessageDigest5or custom implementation). - Add zlib decompression for compressed wordlists.
- Compile with default settings — no packing needed.
- Verification: Compare the resulting PE's section layout, import surface, and string artifacts to this sample. Should show
.itext,.bss,.tls,.rdatasections and identical VCL RTL strings.
What you'll learn
How a commodity credential-stuffing tool looks in static analysis — and why the absence of malicious APIs doesn't mean the file is benign. The threat is in the use case and distribution method, not the binary's capabilities.
Deployable Signatures
YARA Rule
rule DELPHI_Brooter_BruteForcer {
meta:
description = "Russian Delphi VCL brute-forcer tool 'Brooter' with ICQ contact"
author = "PacketPursuit"
date = "2026-06-28"
hash = "b04aa5d0ede5653b20f6db6d6df0020e396dfe8688f2c4712cff6dccce2002d4"
strings:
$a1 = "FastMM Borland Edition" ascii
$a2 = "SOFTWARE\\Borland\\Delphi\\RTL" ascii
$a3 = "DelphiApplication" ascii
$a4 = "[Brooter] ICQ: 322322032" ascii wide
$a5 = "TfrmBroot" ascii
$a6 = "btnStartClick" ascii
$a7 = "btnStopClick" ascii
$a8 = "txtDict" ascii
$a9 = "txtList" ascii
$a10 = "cntGood" ascii
$a11 = "cntBad" ascii
$a12 = "cntCheck" ascii
$a13 = "md5hash" ascii
$a14 = "ZLibConst" ascii
$a15 = "evalcomp" ascii
$b1 = "Загрузка словаря" wide
$b2 = "Атака по словарю" wide
$b3 = "Атака по списку" wide
$b4 = "Потоки:" wide
condition:
uint16(0) == 0x5A4D and
filesize < 3MB and
8 of ($a*) and
2 of ($b*)
}
Sigma Rule
title: Brooter Delphi Brute-Forcer Execution
description: Detects execution of the Russian Brooter brute-forcing tool distributed as SALES_INQUIRY.pdf.exe
logsource:
product: windows
category: process_creation
detection:
selection:
- Image|endswith: '\\SALES_INQUIRY.pdf.exe'
- CommandLine|contains: 'SALES_INQUIRY.pdf'
- OriginalFileName: 'SALES_INQUIRY.pdf.exe'
condition: selection
falsepositives:
- None expected — this is a specific filename for a known tool
level: high
IOC List
| Indicator | Type | Value |
|---|---|---|
| SHA-256 | Hash | b04aa5d0ede5653b20f6db6d6df0020e396dfe8688f2c4712cff6dccce2002d4 |
| Filename | Lure | SALES_INQUIRY.pdf.exe |
| Tool name | String | Brooter |
| Contact | String | ICQ: 322322032 |
| Compiler | Fingerprint | Delphi 7-era, Linker 2.25, FastMM4 |
| Sections | Fingerprint | .text, .itext, .data, .bss, .idata, .tls, .rdata, .reloc, .rsrc |
| Form name | DFM | TfrmBroot |
| Custom units | Code | md5hash, ZLibConst, evalcomp, QuickPixel, VolumeControl, XPMenu |
Behavioral Fingerprint
This binary is a Delphi 7-era VCL GUI application with a Russian-language interface (TfrmBroot), presenting as a password brute-forcing tool with dictionary/list attack modes, threaded HTTP authentication attempts via WinInet, MD5 hashing, and system tray minimization. It carries no persistence, no C2, and no host-data theft. The threat vector is purely social engineering: distributed under a *.pdf.exe double-extension masquerade filename to exploit Windows' hidden-extension default.
Detection Signatures
| Capability | ATT&CK | Evidence |
|---|---|---|
| Double-extension masquerade | T1036.007 | Filename SALES_INQUIRY.pdf.exe ^[triage.json] |
| Brute force | T1110 | Tool UI controls for dictionary/list attacks, thread count, login field ^[strings.txt:3472-3817] |
| Web protocols | T1071.001 | WinInet/UrlMon units imported ^[strings.txt:3444-3445] |
Capa notes: capa failed due to missing signatures database ^[capa.txt]. This sample would likely trigger no behavioral capabilities in a default capa ruleset because the malicious behavior (HTTP brute-forcing) is implemented in custom Delphi code, not via suspicious API call patterns.
References
- SHA-256:
b04aa5d0ede5653b20f6db6d6df0020e396dfe8688f2c4712cff6dccce2002d4 - MalwareBazaar / OpenCTI artifact:
823ab3da-4430-4469-9013-1c518e69f25d - Filename as submitted:
SALES_INQUIRY.pdf.exe - Wiki: brooter — entity page for this tool
- Wiki: double-extension-masquerade — technique page
- Wiki: social-engineering-filename-lure — concept page
Provenance
file.txt— file(1) outputpefile.txt— pefile Python library section analysis and PE headersrabin2-info.txt— radare2 binary info (rabin2 -I)strings.txt— strings extraction (3,843 lines, UTF-8/CP1251)exiftool.json— ExifTool PE metadatametadata.json— artifact metadata from OpenCTI/MalwareBazaartriage.json— triage pipeline classificationdynamic-analysis.md— CAPE skipped (no Windows guest available)capa.txt— capa failed (missing signatures)floss.txt— floss failed (CLI argument error)binwalk.txt— binwalk signature scan (only PE header and zlib copyright string)- Custom Python resource dump — verified DIB bitmap dimensions and DFM form content
- Custom CP1251 Cyrillic string decoding from DFM resource