Skip to content

Worms & Spreading

Worms are distinguished from other malware categories by their ability to spread autonomously without requiring botnet operator intervention. While IRC bots spread via exploit scanning (server-side propagation), the worms in this collection target client-side vectors - instant messaging contacts, P2P file sharing, email, and removable media.

The collection contains six standalone worm specimens spanning multiple languages and propagation strategies:

SpecimenLanguagePrimary VectorUnique FeatureSource
w32.ogw0rmC++7 IM clients simultaneouslyBroadest IM coverage in collectionw32.ogw0rm
IrcWormC++IRC DCC + custom RAR packerSelf-archiving for distributionIrcWorm
wworm2 (WoodWorm)DelphiBitTorrent seeding + polymorphic engineFirst P2P seeding worm in collectionwworm2
T_WormC++Yahoo IM in 5 languagesMultilingual social engineeringT_Worm
IrcWorm (Delphi)DelphiIRC channelsDelphi-based variantIrcWorm
Sbot-RARSpreaderC++RAR archive injectionInfects existing archivesSbot-RARSpreader

Source: w32.ogw0rm

This specimen represents the most ambitious instant messaging worm in the collection, capable of spreading through seven distinct IM clients simultaneously. In an era when IM was the dominant real-time communication platform, this approach maximized infection potential.

IM ClientProtocolWindow Detection MethodMarket Share (2005)
MSN MessengerMSNPWindow class enumeration~25%
AIM (AOL Instant Messenger)OSCARProcess detection~20%
Yahoo! MessengerYMSGWindow title matching~15%
ICQOSCARShared AIM detection~10%
TrillianMultiWindow class scan~8%
mIRCIRC/DCCWindow handle search~5%
XfireProprietaryProcess enumeration~3%
// w32.ogw0rm - multi-IM spreading logic
function spread_to_all_im_clients():
// Phase 1: Detect which clients are running
for client in [MSN, AIM, Yahoo, ICQ, Trillian, mIRC, Xfire]:
handle = FindWindow(client.window_class, NULL)
if handle != NULL:
client.active = true
// Phase 2: For each active client, inject spread routine
for client in active_clients:
if client == MSN:
// Use OLE Automation to control MSN Messenger
msn = CreateObject("Messenger.UIAutomation")
contacts = msn.GetContactList()
for contact in contacts:
send_file(contact, worm_copy, enticing_filename)
elif client == AIM:
// Send message with download link to buddy list
aim_window = FindWindow("AIM_CONVERSATION", NULL)
send_keys(aim_window, lure_message + download_url)
elif client == Yahoo:
// Similar window automation approach
yahoo_send_to_contacts(worm_url)
// Phase 3: Copy to shared folders (P2P spreading)
copy_to_kazaa_shared()
copy_to_limewire_shared()

The worm used context-aware messages tailored to each platform - enticing filenames disguised as photos, games, or videos that a user's contacts would be likely to click:

// Example lure filenames (reconstructed from source)
lure_files = [
"funny_pic.scr", // .scr = screensaver, executes as .exe
"check_this_out.pif", // .pif = program information file, executable
"naked_pics.exe", // Direct executable with enticing name
"cool_game.com", // .com extension, executable on Windows
]
TechniqueIDImplementation
Replication Through Removable MediaT1091Copies to USB/shared drives
PhishingT1566Social engineering via IM contacts
Application Layer ProtocolT1071.001IM protocols for spreading
MasqueradingT1036.005Executable disguised with misleading filenames
Boot or Logon Autostart ExecutionT1547.001Registry Run key persistence

wworm2 (WoodWorm): Polymorphic Engine + Torrent Seeding

Section titled “wworm2 (WoodWorm): Polymorphic Engine + Torrent Seeding”

Source: wworm2

WoodWorm is the most technically sophisticated worm in the collection. Written in Delphi, it combines a polymorphic string encryption engine with BitTorrent-based distribution - making it unique among the specimens.

The polyengine.pas unit implements a multi-layer string obfuscation engine designed to defeat static analysis:

// WoodWorm polymorphic engine - conceptual reconstruction
function CryptString(input, seed):
// Layer 1: Seeded XOR encryption
key = generate_key_from_seed(seed)
layer1 = xor_cipher(input, key)
// Layer 2: Base64 encoding
layer2 = base64_encode(layer1)
// Layer 3: Second XOR pass with different key
layer3 = xor_cipher(layer2, secondary_key)
return layer3
// At runtime, the DECRYPT procedure reverses all layers
procedure DECRYPT():
for each encrypted_string in config:
// Reverse Layer 3
temp = xor_decrypt(encrypted_string, secondary_key)
// Reverse Layer 2
temp = base64_decode(temp)
// Reverse Layer 1
plaintext = xor_decrypt(temp, primary_key)
store_in_memory(plaintext)

Why this matters for defense:

Analysis MethodEffectiveness Against WoodWorm
Static string extraction (strings)❌ All strings encrypted on disk
Signature-based AV scanning❌ No plaintext indicators to match
Import table analysis⚠️ Partial - Delphi uses some static imports
Behavioral/sandbox analysis✅ Strings decrypted in memory at runtime
Heuristic detection✅ Multi-layer decode routine is suspicious

BitTorrent Seeding Vector (utorrentseeder.pas)

Section titled “BitTorrent Seeding Vector (utorrentseeder.pas)”

WoodWorm's most innovative feature is its ability to spread via the µTorrent BitTorrent client - hijacking the victim's legitimate P2P software to distribute copies of the worm.

// WoodWorm torrent seeding - conceptual flow
function seed_worm_via_torrent():
// Step 1: Locate µTorrent window
utorrent_hwnd = FindWindow("µTorrent", NULL)
if utorrent_hwnd == NULL:
return // µTorrent not installed/running
// Step 2: Receive .torrent file URL from C&C server
torrent_url = get_from_cnc("torrent_seed_url")
// Step 3: Use UI automation to make µTorrent add the torrent
// Simulates keypresses: Ctrl+U (Add URL dialog)
SendKeys(utorrent_hwnd, CTRL + "U")
Sleep(500)
// Step 4: Type the torrent URL into the dialog
SendKeys(dialog_hwnd, torrent_url)
SendKeys(dialog_hwnd, ENTER)
// Result: µTorrent downloads and seeds a .torrent
// that points to a worm copy disguised as pirated content

Propagation chain:

┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ ┌──────────────┐
│ C&C provides │───▶│ Worm injects │───▶│ Victim's µTorrent│───▶│ Other P2P │
│ .torrent URL │ │ URL into │ │ seeds worm copy │ │ users download│
│ │ │ µTorrent UI │ │ to swarm │ │ "pirated file"│
└─────────────┘ └──────────────┘ └─────────────────┘ └──────────────┘
TechniqueIDImplementation
Obfuscated Files or InformationT1027Triple-layer polymorphic string encryption
Ingress Tool TransferT1105Torrent file download from C&C
User Execution: Malicious FileT1204.002Worm disguised as pirated content
Application Layer ProtocolT1071.004BitTorrent P2P for distribution
Software DiscoveryT1518Detects µTorrent installation

Source: T_Worm

T_Worm demonstrates localization as an attack strategy. It targets Yahoo! Messenger users with social engineering lures in five languages, maximizing its geographic reach.

LanguageTarget RegionLure Strategy
EnglishUS, UK, AustraliaPhoto/video sharing links
FrenchFrance, Canada, AfricaSimilar lure patterns
GermanGermany, Austria, SwitzerlandLocalized messages
SpanishSpain, Latin AmericaRegional vocabulary
DutchNetherlands, BelgiumLocalized content
// T_Worm - multilingual Yahoo IM spreading
function spread_yahoo():
// Detect system language from Windows locale
lang = GetUserDefaultLangID()
// Select appropriate lure message
switch(lang):
case LANG_ENGLISH:
msg = "LOL check out this photo of you!! {url}"
case LANG_FRENCH:
msg = "MDR regarde cette photo de toi!! {url}"
case LANG_GERMAN:
msg = "LOL schau dir das Foto von dir an!! {url}"
case LANG_SPANISH:
msg = "JAJA mira esta foto tuya!! {url}"
case LANG_DUTCH:
msg = "LOL kijk deze foto van jou!! {url}"
default:
msg = english_default // Fallback
// Enumerate Yahoo Messenger contacts
contacts = enumerate_yahoo_contacts()
for contact in contacts:
send_yahoo_message(contact, msg)
TechniqueIDImplementation
PhishingT1566Localized social engineering lures
System Language DiscoveryT1614.001Detects Windows locale for message selection
Application Layer ProtocolT1071.001Yahoo Messenger protocol
MasqueradingT1036Link disguised as photo sharing

Source: IrcWorm

IrcWorm includes a custom RAR packing mechanism that archives the worm binary before distribution, providing a layer of obfuscation that bypasses file-type based scanning.

// IrcWorm - archive-based spreading
function spread_via_irc():
// Step 1: Create RAR archive containing the worm
worm_copy = get_self_path()
archive = create_rar_archive(worm_copy,
filename = "cool_pics.rar",
password = NULL) // No password - maximize openability
// Step 2: Connect to IRC channels
for channel in target_channels:
join(channel)
// Step 3: Send archive via DCC
for user in channel.user_list:
dcc_send(user, archive)
  1. Bypasses file-type scanning - Many early AV products didn't scan inside archives
  2. Social engineering - Users expect to receive archives via DCC file transfer
  3. Compression - Smaller file transfers complete faster, reducing detection window

Vectorw32.ogw0rmWoodWormT_WormIrcWormSbot-RAR
MSN Messenger✅❌❌❌❌
AIM✅❌❌❌❌
Yahoo! Messenger✅❌✅❌❌
ICQ✅❌❌❌❌
Trillian✅❌❌❌❌
mIRC / IRC✅❌❌✅❌
Xfire✅❌❌❌❌
BitTorrent (µTorrent)❌✅❌❌❌
RAR archive injection❌❌❌✅✅
Multilingual lures❌❌✅ (5 langs)❌❌
Polymorphic engine❌✅❌❌❌
P2P shared folders✅✅❌❌❌
Techniquew32.ogw0rmWoodWormT_WormIrcWorm
String encryptionBasic XORTriple-layer polymorphicNone evidentNone evident
File masquerading.scr/.pif/.com extensionsPirated content disguiseURL shorteningRAR archive wrapping
Traffic blendingLooks like normal IMIndistinguishable from BitTorrentNormal Yahoo messagesNormal IRC DCC
Anti-AVProcess kill listEncrypted indicatorsMinimalMinimal

  1. Trusted context - Messages came from a victim's real contacts, establishing implicit trust
  2. Protocol diversity - Spreading across 7+ protocols meant no single network filter could stop all vectors
  3. User interaction dependency - Worms exploited human behavior (curiosity, trust) more than software vulnerabilities
  4. Traffic blending - Worm traffic was indistinguishable from legitimate IM/P2P usage
Historical VectorModern EquivalentDefense
IM worms (MSN, AIM)Teams/Slack/Discord messagesURL scanning, file-type restrictions
P2P torrent seedingCompromised software reposSupply chain verification, code signing
Multilingual luresMultilingual phishing campaignsAI-based content analysis
Archive wrappingPassword-protected ZIP phishingSandboxed archive detonation