Skip to content

rBot / rxBot Family

The rBot/rxBot lineage is the single largest family in the archived collection, spanning 121 directory entries and an estimated 93 unique specimens. It documents one of the most thorough evolutionary arcs in early malware history - from a monolithic single-file C program to a fully modular, encrypted, directory-organized C++ framework with plug-in exploit support.

Educational context: All analysis below is based on static source-code inspection of historical specimens. No executable binaries are provided. Source references link to the maestron/botnets public archive.


The rBot family descends from sdBot, authored by a developer known as "sd." The lineage is explicitly documented in source-file credits across every major variant.

The earliest specimen, rBot 0.2-MODE-by-akusot.v1.5, retains the original credit block:

Authors:
sdbot: sd
rbot: Nils, D3ADLiN3, Edge, bohika, rewe, racerx91

At this stage the entire bot resides in a single rBot.cpp file exceeding 2,900 lines. Configuration values are hardcoded, and feature-gating uses primitive #define toggles. There is no modularization whatsoever.

View source - rBot 0.2

Phase 2 - The rx_dev Refactoring (March–April 2004)

Section titled “Phase 2 - The rx_dev Refactoring (March–April 2004)”

The rx_dev/rBot_041504 specimen is the most historically significant variant. It is RacerX90's private development tree containing a 682-line changelog spanning March 24 to April 14, 2004.

Key architectural changes introduced:

ChangeDetail
Module separationCode split into ~90 separate .cpp/.h file pairs
Dynamic DLL loadingAll API calls converted from static linking to LoadLibrary/GetProcAddress; calls prefixed with f (e.g., fWSAStartup)
Unified thread managementCentralized THREAD structure array with clearthread()
Exploit statisticsUniversal tracking system for scan/exploit success rates
Exception handlerSEH-based crash recovery to keep bots alive

View source - rx_dev

rxBot 0.6.6d formalized the branch with:

  • GPL licensing (ironically applied to malware source)
  • Further modularization
  • LSA restriction module
  • FTP transfer capability for bot updates

Phase 4 - BlowSXT: Crypto-Enhanced (2004–2005)

Section titled “Phase 4 - BlowSXT: Crypto-Enhanced (2004–2005)”

Introduced Blowfish encryption for all C&C communications. The command prefix was changed to a non-printable character (\xBB) specifically to evade IDS pattern-matching rules that looked for plaintext IRC bot commands.

Phase 5 - NZM: Refactored Fork (April 2005)

Section titled “Phase 5 - NZM: Refactored Fork (April 2005)”

Complete reorganization into a proper directory hierarchy:

cpp/core/ cpp/exploits/ cpp/modules/
cpp/ddos/ cpp/scan/ cpp/xfer/
headers/ config/ doc/

NZM added PnP (MS05-039), WKSSVC, ASN.1, WINS, and RealCast exploits. This phase also introduced MD5-protected commands, preventing command replay attacks.

Phase 6 - 120-Series: Operational Branch (2007)

Section titled “Phase 6 - 120-Series: Operational Branch (2007)”

Optimized for real-world botnet operations with:

  • Full string encryption (no plaintext indicators in binary)
  • Abbreviated filenames to reduce forensic footprint
  • Bot-killer module with whitelist of 300+ legitimate Windows executables
  • SP2 patcher to re-enable security-weakening XP settings
  • Modular scanner subdirectory architecture

View source - 120-series variants


EraPatternSpecimenLines of Code
Early (2003)Monolithic single-filerBot 0.2~2,900
Refactoring (Q1 2004)Modular with shared headersrx_dev~90 files
Mature (Q2 2004)MVC-like separationrxBot 0.6.6dStructured
Fork (2005)Directory-based modulesNZM6 subdirs
Operational (2007)Encrypted + stripped120-ModBotProduction-ready

The startup sequence is consistent across all major variants:

WinMain()
└─> LoadDLLs() // Dynamic API resolution
└─> Mutex Check // Single-instance enforcement
└─> Self-Copy() // Copy to %SYSTEM% with hidden attributes
└─> Registry Persist() // Write Run keys
└─> IRC Connect Loop // Dual-server failover
└─> Auth + Join
└─> Command Dispatch

The mature variants use a standardized EXPLOIT structure array in advscan.cpp. This allowed plug-in-style exploit development - adding a new exploit required only a single new entry in the structure array plus the corresponding exploit function:

// Pseudocode - educational representation of the exploit array pattern
typedef struct {
char *name; // Human-readable name
int port; // Target port
int protocol; // TCP or UDP
void (*exploit_func); // Pointer to exploit function
BOOL enabled; // Feature toggle
} EXPLOIT;
EXPLOIT exploits[] = {
{"dcom", 135, TCP, &exploit_dcom, TRUE},
{"lsass", 445, TCP, &exploit_lsass, TRUE},
{"webdav", 80, TCP, &exploit_webdav, FALSE},
// ... additional entries
};

This pattern made it trivial for community contributors to add new exploits without understanding the full codebase.


Exploit Integration Timeline (CVE Mapping)

Section titled “Exploit Integration Timeline (CVE Mapping)”

One of the most educationally valuable aspects of this family is the documented timeline of exploit integration. Lag times between public vulnerability disclosure and weaponized integration were measured in days to weeks.

Exploit ModuleCVEMS BulletinIntegration DateTarget Description
DCOMCVE-2003-0352MS03-026Pre-Q1 2004RPC DCOM buffer overflow
DCOM2CVE-2003-0715MS03-039March 30, 2004Second DCOM wave
WebDAVCVE-2003-0109MS03-007March 30, 2004IIS 5.0 WebDAV overflow
LSASSCVE-2003-0533MS04-011April 2004LSASS buffer overflow via SMB
UPnPCVE-2001-0876MS01-059March 2004UPnP buffer overflow
DameWareCVE-2003-1030N/AApril 14, 2004DameWare Mini Remote Control overflow
MSSQLCVE-2002-1123MS02-056March 25, 2004SQL Server brute-force
IIS5 SSLCVE-2003-0719MS04-011April 2004IIS SSL PCT overflow
Workstation SvcCVE-2003-0812MS03-0492005 (NZM)Workstation Service overflow
PnPCVE-2005-1983MS05-039August 2005+Plug-and-Play overflow
NetAPICVE-2006-3439MS06-0402006–2007Server Service overflow
SymantecCVE-2006-2630N/A2006–2007Symantec Client Security overflow
ASN.1CVE-2003-0818MS04-0072005 (NZM)ASN.1 vulnerability

All rBot/rxBot variants use IRC as the C&C transport. The protocol evolved significantly across versions:

Authentication System - Multi-layer security:

  1. Password check against hardcoded credential
  2. Host mask matching (IRC user@host verification)
  3. Multi-login support with session tracking
  4. Login attempt logging

The command set grew from ~20 commands in rBot 0.2 to 100+ commands in NZM/120-series variants. Commands were organized into namespaces:

NamespacePurposeExample Commands
irc.*IRC operationsirc.join, irc.part, irc.nick, irc.quit
root.*Exploitationroot.scan, root.exploit, root.stats
ddos.*DDoS attacksddos.syn, ddos.udp, ddos.icmp, ddos.ack
daemon.*Servicesdaemon.socks, daemon.httpd, daemon.tftp
com.*Data theftcom.harvest, com.keylog, com.capture, com.findpass

In a particularly clever design, the bot accepted commands embedded in the IRC channel topic. Changing the channel topic instantly issued a command to every bot in that channel - enabling mass control with a single action.

Bots responded to IRC CTCP VERSION queries with fake client strings to blend in with legitimate IRC traffic:

// Pseudocode - CTCP response rotation
responses[] = {
"mIRC v6.16 Khaled Mardam-Bey",
"BitchX-1.1-final",
"xchat 2.4.5 Linux",
"irssi v0.8.10",
"eggdrop v1.6.17"
}
reply = responses[random() % count]

The rBot/rxBot family implemented a layered defense-evasion strategy that evolved across versions. Each technique maps to modern MITRE ATT&CK categories:

  • Self-copy to %SYSTEM% directory with hidden + system + read-only file attributes
  • Timestamp modification (timestomping) - copies the timestamp of a legitimate system file onto the bot binary
  • ATT&CK: T1564.001 (Hidden Files and Directories), T1070.006 (Timestomp)
  • Multiple redundant Run keys for resilience (if one is cleaned, others survive)
  • Service installation in later variants
  • ATT&CK: T1547.001 (Registry Run Keys)
  • All Windows API calls routed through LoadLibrary/GetProcAddress at runtime
  • Prevents static import table analysis - disassemblers cannot determine capabilities from the PE import directory
  • ATT&CK: T1106 (Native API), T1027.007 (Dynamic API Resolution)

The encryption of configuration strings evolved across versions:

VersionTechnique
rBot 0.2Plaintext strings
rx_devSimple XOR encoding
BlowSXTBlowfish encryption
120-seriesFull hex-encoded Blowfish with runtime decryption
  • Process killing - Enumerates running processes and kills known AV product processes
  • Hosts file modification - Adds entries redirecting AV update servers (e.g., windowsupdate.com, symantec.com) to 127.0.0.1
  • ATT&CK: T1562.001 (Disable or Modify Tools)

The 120-series introduced an innovative whitelist-based process killer. Instead of maintaining a blacklist of AV products (easily outdated), it maintained a whitelist of 300+ legitimate Windows executable names. Anything running that was not on the whitelist was terminated - killing competing bots, unauthorized tools, and unknown AV products.

Described in source comments as a "scaled down Carnivore," the sniffer captured IRC traffic on the local network. Its primary purpose was to steal control of competing botnets by extracting their C&C credentials from intercepted IRC authentication exchanges.

  • Disable DCOM service
  • Remove default network shares (C$, D$, ADMIN$, IPC$)
  • Purpose: prevent re-infection by other bots or worms using the same vulnerabilities

The "melt" routine launches a copy of the bot from the installation directory, then the original process deletes itself - leaving no trace at the initial infection point.

Bot IRC nicknames encoded the system uptime, allowing operators to quickly identify high-value long-lived bots (servers, always-on machines) versus transient desktop infections.


The bot scraped registry keys and known file locations for software license keys:

Target SoftwareRegistry/File Location
Half-Life / Counter-StrikeHKLM\Software\Valve
Unreal Tournament 2003HKLM\Software\Unreal Technology
Battlefield 1942HKLM\Software\EA GAMES
Neverwinter NightsHKLM\Software\BioWare
Call of DutyHKLM\Software\Activision
Need for SpeedHKLM\Software\EA GAMES
FIFA seriesHKLM\Software\EA SPORTS
Command & Conquer GeneralsHKLM\Software\EA GAMES

These keys had direct monetary value on underground forums - a single valid multiplayer key could sell for $2–$10.

The NetBIOS spreading module included a hardcoded dictionary of ~80+ common passwords for brute-forcing Windows shares. Sample entries:

// Pseudocode - partial password dictionary
passwords[] = {
"", "password", "admin", "123456", "1234",
"test", "guest", "master", "qwerty", "letmein",
"server", "root", "changeme", "pass", "login",
// ... ~65 more entries
}
ModuleCapability
KeyloggerReal-time keystroke capture, output to dedicated IRC channel
Screen CapturePeriodic screenshots sent to operator
Protected StorageDump IE/Outlook saved passwords from Windows credential store
Firefox ExtractionParse Firefox profile SQLite databases for saved credentials
FTP Client TheftExtract saved credentials from ServU, WS_FTP, GS-FTP, NetTerm

MethodDescriptionFirst Appeared
SYN FloodRaw socket SYN packets with spoofed source IPsrBot 0.2
UDP FloodHigh-volume UDP packets to arbitrary portsrBot 0.2
ICMP FloodPing flood with oversized packetsrx_dev
TCP ConnectFull TCP connection flood (works behind NAT)rxBot 0.6
ACK FloodTCP ACK packets to exhaust stateful firewall tablesNZM
SuperSYNOptimized SYN flood with minimal per-packet overhead120-series
HTTP GETApplication-layer flood against web servers120-series

VectorMethod
NetBIOSBrute-force Windows shares with password dictionary
TFTP ServerBuilt-in TFTP server serves bot binary post-exploitation
FTP ServerBuilt-in FTP server for binary transfer
HTTP ServerBuilt-in HTTP server for payload delivery
MSN MessengerSend lure messages with bot download link to contact list
AIMSend bot via AOL Instant Messenger
Yahoo MessengerSend bot via Yahoo IM
EmailMass-mail bot as attachment
USBDrop bot + auto-execution config to removable drives

Sub-GroupCountKey Characteristics
Original rBot base (v0.2–0.3)13Earliest versions, basic scanning + DDoS
rxBot core releases (v0.6.5–0.7.7)11RacerX90's evolution, modular architecture
rxBot named mods12EcLiPsE, Xerion, Undertow, Temptation variants
rXSass / LSASS variants2LSASS exploit focused
Urxbot / URX variants7Major fork with Symantec + ASN exploits
RX-120 series (by BuZ)22Modular rebuild, MySQL/VNC/MSSQL focus
NZM mods9Restructured with organized subdirectories
Other named derivatives45Various community mods and forks

The rBot/rxBot family is educationally significant for several reasons:

  1. Open-source development model applied to malware - GPL licensing, detailed changelogs, code reviews, and collaborative development mirroring legitimate open-source projects.

  2. Cross-pollination between families - Shared exploits, shellcode, and modules flowed freely between rBot, Agobot, sdBot, and other families. The DCOM exploit alone appears in at least four distinct bot families.

  3. Professionalization arc - The progression from single-file chaos to organized directory structures with documentation demonstrates the same software engineering maturation seen in legitimate projects.

  4. Arms race dynamics - The lockdown module, bot-killer, and packet sniffer demonstrate that bot operators competed aggressively, building features specifically to steal or destroy rival botnets.

  5. Exploit lag times - Source changelogs document new exploits being integrated within days to weeks of public vulnerability disclosure, providing concrete evidence of the patch-race problem.

  6. Commodity malware economics - 121 variants from a single family, analogous to Linux distributions - many operators running slightly customized versions of the same core platform.


All specimens referenced in this analysis are available in the archived collection: