LummaC2 is a commodity stealer malware that gained notoriety in underground cybercrime forums. It's primarily advertised as a "premium" infostealer, targeting browsers, cryptocurrency wallets, and authentication data. Despite the marketing hype, a deep dive into the provided code snippets reveals a series of significant weaknesses, hardcoded configurations, and questionable coding practices – all red flags pointing to a rushed, low-quality malware product. The "advanced" label is highly misleading; this is a project likely built by skiddies with a shaky grasp of secure coding principles.
While we can't definitively confirm the developers' identities based on the code, the advertised origins point to typical locations for this kind of malware:
-
Distribution: Sold on underground forums (XSS, Exploit.in, RAMP) and promoted via Telegram hacking groups and darknet marketplaces.
-
Targeting: Primarily aimed at less-skilled attackers looking for quick financial gains through a "Malware-as-a-Service" (MaaS) model, providing easy deployment for various types of targets.
-
Subscription Model: The use of subscriptions indicates an attempt to provide continuous updates and a revenue stream, though the quality of the product remains a serious question.
The provided C code snippets expose the inner workings, or lack thereof, of this supposedly "premium" stealer. Let's strip away the marketing and focus on the reality:
The code snippet attempts some anti-analysis techniques, but they're laughably inadequate:
- API Hashing: The use of
ResolveTheHash
to resolve Windows API functions is a standard, albeit easily defeated, tactic. It's a basic hurdle, easily surpassed by anyone using tools like Binja - String Obfuscation: The repeated use of the
"edx765"
marker for string encoding is a textbook example of weak obfuscation. This is a major giveaway. It's trivial to write a script to automatically remove this marker and expose the actual strings. - Memory Management "Tricks": The custom memory allocation functions,
allocateMemory
,requestMemoryAllocation
, are likely designed to make the code more opaque. They add unnecessary layers of complexity and likely contribute to poor performance. - Dynamic API Resolution: Attempts to obfuscate API calls, but the method used is simplistic.
- Hardcoded Paths & Extensions: This is where the stealer really falls apart. Instead of dynamically identifying targets, LummaC2 relies on hardcoded file paths for browsers, crypto wallets, and authentication data. This predictability is a huge weakness.
We have identified the targets and file locations. The inclusion of the wallets and 2FA extension is a key factor of the stealer.
Browser Data:
- Chrome/Chromium/Edge/Brave/Opera:
- Data Location (Hardcoded):
- Chrome, Chromium, Edge:
%LOCALAPPDATA%\Google\Chrome\User Data
%LOCALAPPDATA%\Chromium\User Data
%LOCALAPPDATA%\Microsoft\Edge\User Data
- Brave:
%LOCALAPPDATA%\BraveSoftware\Brave-Browser\User Data
- Opera:
%APPDATA%\Opera Software\Opera Stable
%APPDATA%\Opera Software\Opera GX Stable
%APPDATA%\Opera Software\Opera Neon\User Data
- Chrome, Chromium, Edge:
- Specific File Targets: The stealer focuses on common files within the "User Data" directories of the Chromium-based browsers. The most likely targets include:
Login Data
(passwords)Cookies
(session cookies)History
(browsing history)Local Storage
(data stored by websites)Network\Cookies
- Data Location (Hardcoded):
- Firefox:
- Data Location (Hardcoded):
%APPDATA%\Mozilla\Firefox\Profiles\
- Specific File Targets:
key4.db
- Encryption key (crucial for decrypting thelogins.json
data)logins.json
- Saved usernames and passwordscookies.sqlite
- Stored session cookiesplaces.sqlite
- Browsing history and bookmarksformhistory.sqlite
- Autofill datacert9.db
- Security certificates
- Data Location (Hardcoded):
Crypto Wallets and Extensions (Hardcoded):
- MetaMask: (Extension ID:
ejbalbakoplchlghecdaalmeeeajnimhm
andnkbihfbeogaeaoehlefedknkodbefgpgknn
) - TronLink: (
ibnejdfjmmkpcnlpebklmnkoeoihofec
) - Ronin Wallet: (
fnjhmkhhmkbedjkkabndcnnogagogbneec
) - Binance Chain Wallet: (
fhbohimaelbohpjbbldcngcnapnedx765dodjp
) - Coinbase Wallet: (
hnfanknocfeedofbddgcijnmedhnfnkdnaad
) - Yoroi: (
ffnbelfdoeiohenkjibnmadjiehjhajb
) - Nifty Wallet: (
jbdaocneiiinmjbjlgalhcelgbejmnid
) - Math Wallet: (
afbcbjpbpfadlkmhmclhkeeodmamcflc
) - Guarda Wallet: (
hpglfhgfnhbgpjdenjgmdgoeiappafln
) - EQUAL Wallet: (
blnieiiffboillknjnepogjhkgnoapac
) - Jaxx Liberty: (
cjelfplplebdjjenllpjcblmjkfcffne
) - BitApp Wallet: (
fihkakfobkmkjojpchpfgcmhfjnmnfpi
) - iWlt Wallet: (
kncchdigobghenbbaddojjnnaogfppfj
) - Wombat Wallet: (
amkmjjmmflddogmhpjloimipbofnfjih
) - MEW CX: (
nlbmnnijcnlegkjjpcfjclmcfggfefdm
) - Guild Wallet: (
nanjmdknhkinifnkgdcggcfnhdaammmj
) - Saturn Wallet: (
nkddgncdjgjfcddamfgcmfnlhccnimig
) - NeoLine Wallet: (
cphhlgmgameodnhkjdmkpanlelnlohao
) - Clover Wallet: (
nhnkbkgjikgcigadomkphalanndcapjk
) - Liquality Wallet: (
kpfopkelmapcoipemfendmdcghnegimn
) - Terra Station: (
aiifbnbfobpmeekipheeijimdpnlpgpp
) - Keplr Wallet: (
dmkamcknogkgcdfhhbddcghachkejeap
) - Sollet: (
fhmfendgdocmcbmfikdcogofphimnkno
) - Auro Wallet: (
cnmamaachppnkjgnildpdmkaakejnhae
) - Polymesh Wallet: (
jojhfeoedkpkglbfimdfabpdfjaoolaf
) - ICONex Wallet: (
flpiciilemghbmfalicajoolhkkenfel
) - Nabox Wallet: (
nknhiehlklippafakaeklbeglecifhad
) - KHC Wallet: (
hcflpincpppdclinealmandijcmnkbgn
) - Temple Wallet: (
ookjlbkiijinhpmnjffcofjonbfbgaoc
) - TezBox Wallet: (
mnfifefkajgofkcjkemidiaecocnkjeh
) - DAppPlay Wallet: (
lodccjjbdhfakaekdiahmedfbieldgik
) - BitClip Wallet: (
ijmpgkjfkbfhoebgogflfebnmejmfbml
) - Steem Keychain: (
lkcjlnjfpbikmcmbachjpdbijejflpcm
) - Nash Extension: (
onofpnbbkehpmmoabgpcpmigafmmnjhl
) - Hycon Lite Client: (
bcopgchhojmggmffilplmbdicgaihlkp
) - ZilPay: (
klnaejjgbibmhlephnhpmaofohgkpgkd
) - Coin98 Wallet: (
aeachknmefphepccionboohckonoeemg
) - Authenticator: (
bhghoamapcdpbohphigoooaddinpkbai
) - Cyano Wallet: (
dkdedlpgdmmkkfjabffeganieamfklkm
) - Byone Wallet: (
nlgbhdfgdhgbiamfdfmbikcdghidoadd
) - OneKey Wallet: (
infeboajgfhgbjpjbeppbkgnabfdkdaf
) - Leaf Wallet: (
cihmoadaighcejopammfbmddcmdekcje
) - Authy: (
gaedmjdfmmahhbjefcbgaolhhanlaolb
)-
EOS Authenticator:
oeljdldpnmdbchonielidgobddffflal
-
Google Authenticator:
ilgcnhelpchnceeipipijaljkblbcobl
-
Trezor Password Manager:
imloifkgjagghnncjkhggdhalmcnfklk
-
and also grabs the History, Login Data, Web Data and Network/Cookies Data
-
Electrum:
- Path:
%APPDATA%\Electrum
- Files (Likely):
wallets/*
and associated configuration/backup files.
- Path:
-
Binance Chain Wallet:
- Path:
%APPDATA%\Binance
- Files (Likely):
*.json
files, potentially including seed phrases or private keys.
- Path:
-
Ethereum Wallets:
- Path:
%APPDATA%\Ethereum
- Files (Likely):
keystore
directory, storing encrypted key files.
- Path:
-
The malware is surprisingly straightforward in its communication:
- C2 Communication: Uses
wininet.dll
to establish an HTTP connection, which means it would use standard HTTP GET/POST methods. - Data Transmission: The stolen data is packed into an HTTP POST request with the
multipart/form-data
content type. This suggests that the data is likely being sent as either a compressed archive or as a file. - IP Address: The code shows a hardcoded IP address:
195.123.226.91
. The code does not have the hardcoded C2 domain, and we will have to find out how they are using it.
-
allocateMemory
:- Analysis Notes: Unnecessary and likely used to avoid detection. Poor error handling makes it unreliable.
-
processPath
:- Analysis Notes: Recursive directory traversal. This is a very basic method. If it's not handled well, it is easy to perform path traversal, also the recursive calls can cause a DOS or stack overflow issues.
-
ExtractUserData
:- Analysis Notes: Targets browsers (Chrome, Chromium-based, and Edge). Decryption techniques, are likely to be weak. The function hardcodes the file paths to the browser profile folders (e.g.,
Login Data
,Cookies
), making it easy to identify the targets.
- Analysis Notes: Targets browsers (Chrome, Chromium-based, and Edge). Decryption techniques, are likely to be weak. The function hardcodes the file paths to the browser profile folders (e.g.,
-
ExtractFirefoxProfileData
:- Analysis Notes: Same as
ExtractUserData
, but for Firefox. Focus on decryption, access tokey4.db
,logins.json
,cookies.sqlite
is a must.
- Analysis Notes: Same as
-
ProcessAndSendData
:- Analysis Notes: Constructs an HTTP POST request. The reliance on
wininet.dll
is a weakness, as it can be readily detected by network monitoring.
- Analysis Notes: Constructs an HTTP POST request. The reliance on
-
TrasStrings
andGetFilePath
:- Analysis Notes: "edx765" obfuscation is trivial to bypass.
-
Files & Registry Keys:
-
C2 Communications:
- IP Address:
195.123.226.91
(probably hosted on a $5 VPS, just kidding lmfao) - HTTP POST requests with
multipart/form-data
content type.
- IP Address:
-
Process Behavior:
- Unusual HTTP POST requests using
wininet.dll
. - Suspicious file access patterns to browser credential files.
- Creation of files matching wallet/browser file patterns (e.g.,
key4.db
,logins.json
).
- Unusual HTTP POST requests using
LummaC2 is a relatively unsophisticated stealer, a low-effort creation targeting common vulnerabilities and assets. Its reliance on hardcoded configurations, weak anti-analysis techniques, and an easily detectable exfiltration mechanism severely limits its threat level. It is more a nuisance for the victims than a serious threat to well-secured systems. However, continued monitoring of the stealer is necessary, as with all malware, to track possible updates, new targets, or changes to its attack methodology.
well well well, so let me say To any so-called "malware devs" reading this: You're embarrassing yourselves. We, as reverse engineers, enjoy a real challenge—but This is just skid tier garbage. If this is the best you can do, even 2010-era antivirus could wipe you off the map without breaking a sweat.