Introduction
Imaginez : Un ami perdu de vue ou un dev de jeux vidéo vient vous voir sur discord et cherche des gens pour tester son jeux. Il vous envoie un joli texte avec un site web pour s'inscrire/télécharger la beta du son jeu. Le message est propre, pas de fautes, le site à des metatags pour prévisualisation dans le message ... En gros tout d'un site pro, on clique et on tombe sur warband-game.com. Le site a l'air professionnel — captures d'écran d'un jeu stratégique en isométrique, vidéo de gameplay... puis vient le bouton de téléchargement bien visible, formulaire de connexion. Sauf qu'il ne télécharge pas Warband. Il télécharge un info-stealer complet empaqueté dans une application Electron.

Pire encore : avant même le clic sur le bouton, le visiteur est déjà fingerprinté (targeting + obfuscation anti scan auto) via deux webhooks Discord. Et les captures d'écran/vidéo de gameplay ? Volées — elles proviennent en réalité du jeu Wartale, un RPG tactique isométrique développé par Shiro Games. L'opérateur a simplement accaparé le nom de Wartale et propose une beta pour appâter les joueurs.

Cet article détaille l'analyse complète de cette opération, réalisée entièrement en analyse statique sur Linux — aucun binaire n'a été exécuté, aucune VM Windows n'a été nécessaire, aucun sandbox. Non seulement nous avons pu déballer la charge utile et identifier les capacités du stealer, mais nous avons aussi déchiffré la charge utile obfusquée et identifié formellement le malware : il s'agit de Genesis Stealer v5, un stealer commercial disponible sous licence mensuelle.
Identification : Genesis Stealer v5
Le déchiffrement de la charge utile a révélé sans ambiguïté l'identité du malware. Il ne s'agit pas d'un stealer custom — c'est Genesis Stealer v5, un info-stealer commercial distribué via Telegram (t.me/genesisproj).
Licence : GENESIS-MONTHLY-96P04L6TEXGR
Type : Stealer commercial (licence mensuelle)
Support : t.me/genesisproj
Python : python-3.12.10-amd64.exe (déployé côté victime)
Méthode de déchiffrement
La charge utile de 494 Ko était chiffrée via un schéma à deux couches. La clé et le sel étaient stockés en clair dans l'array obfusqué UVUgVj du code JavaScript :
- Dérivation de clé :
PBKDF2-SHA512(password, salt, 100000 iterations, 32 bytes)→ clé AES-256 - Déchiffrement :
AES-256-CBCavec la clé dérivée pour déchiffrer la charge utile complète - Password :
+r1hykMfNTHNo7f0tu6TYy6mXlf6PnjY(extrait de l'arrayUVUgVj)
⚠️ Le déchiffrement a été réalisé en Python pur, sans exécuter le binaire — la clé et le sel étaient présents en clair dans le JavaScript obfusqué.
Vue d'ensemble des findings
| Vecteur | Description |
|---|---|
| Webhook #1 — Visiteur | Fingerprinting complet du visiteur (IP, UA, résolution, OS) → Discord New Visit |
| Webhook #2 — Installation | Traçage du téléchargement et de l'installation → Discord Install L0gs |
| Formulaire fake | Login/Sign Up capturant identifiants (sans backend légitime) |
| Payload (ZIP) | Stealer Electron obfusqué avec CFF, DPAPI, exfiltration Cloudflare R2 |
Trois couches d'attaque web + une charge utile de 84 Mo. Le stealer a été formellement identifié comme Genesis Stealer v5 (licence mensuelle) après déchiffrement de la charge utile.
Phase 1 : Reconnaissance du site web
Infrastructure
Première étape : caractériser l'infrastructure derrière warband-game.com.
Domaine : warband-game.com
IP : 185.31.40.29
ASN : AS60362
Hébergeur : Alwaysdata Sarl, Paris, FR
DNS : dns1.alwaysdata.com / dns2.alwaysdata.com
MX : mx1.alwaysdata.com / mx2.alwaysdata.com
SSL : Auto-signé via alwaysdata
Un hébergement shared Alwaysdata à Paris — cheap, jetable, et largement utilisé par les acteurs malveillants. Le certificat SSL auto-signé via la plateforme confirme l'absence de toute infrastructure légitime.
Première apparition : mars 2026 sur URLScan.io, soit environ un mois avant notre analyse.
Fingerpinting via Discord Webhooks
Le site intègre deux scripts JavaScript malveillants dans ses pages :
js/queryLog.js — fingerprinting des visiteurs :
- Exécution au chargement de la page
- Collecte : adresse IP, User-Agent, résolution d'écran, OS, navigateur, langue, referrer
- Envoi vers un webhook Discord dont le channel est nommé « New Visit »
- Chaque visite déclenche un embed avec les informations de la victime
js/install.js — traçage de l'installation :
- Déclenché au clic sur le bouton de téléchargement
- Log du téléchargement et du déclenchement de l'installeur
- Envoi vers un second webhook Discord nommé « Install L0gs »
- Permet à l'attaquant de suivre le funnel : visite → téléchargement → infection
Les webhooks Discord sont un C2 ultra-simple et quasi impossible à bloquer pour un utilisateur lambda. L'attaquant reçoit des notifications en temps réel sur son smartphone.
⚠️ Les webhooks complets ne sont pas reproduits ici pour des raisons de sécurité. Seuls les derniers caractères sont visibles dans les IOC.
Formulaire de connexion frauduleux
Le site propose un formulaire Login / Sign Up classique :
graph TD
subgraph Login["🔒 Login Form"]
A["Username"] --> B["Password"]
B --> C["[ Login ]"]
C --> D["Don't have an account?"]
D --> E["Sign Up"]
end
Aucun backend légitime derrière — les identifiants capturés sont probablement stockés localement ou expédiés via le même mécanisme Discord. Un phishing classique, mais intégré à une chaîne d'infection plus large.
Anti-analyse côté web
L'attaquant a pris soin d'ajouter quelques barrières basiques pour décourager l'inspection :
- Clic droit désactivé (
contextmenuevent bloqué) - Ctrl+U désactivé (raccourci source view intercepté)
- Source HTML minifié
Rien de sophistiqué, mais suffisant pour filtrer 95 % des utilisateurs non-techniques.
Domaine lié : rooted-beta.com
Un second domaine, rooted-beta.com, est référencé sur le site (formulaire de newsletter/opt-in). Actuellement inactif, il pourrait servir de redirection future ou de domaine de backup pour l'infrastructure. Les deux domaines sont à surveiller.
Vol de propriété intellectuelle
Les captures d'écran présentées sur le site ne montrent pas Mount & Blade: Warband — elles sont clairement tirées de Stoneshard, un RPG tactique isométrique. L'attaquant utilise le nom et l'univers de Warband (Calradia) comme appât, mais emprunte les visuels d'un autre jeu pour crédibiliser son site.
Phase 2 : Analyse du payload (Warband_x64.zip)
Métadonnées du fichier
Fichier : Warband_x64.zip
Taille : 88 438 620 bytes (84,3 Mo)
Content-Type : application/zip
Last-Modified: 4 avril 2026
SHA-256 : calculé (voir IOC)
Un fichier conséquent pour un stealer — la taille s'explique par l'inclusion du runtime Chromium/Electron complet.
Chaîne de déballage complète
L'architecture de la charge utile suit un schéma classique d'empaquetage en poupées russes :
graph TD
A["📦 Warband_x64.zip — 84,3 Mo"] --> B["📄 Warband_x64.exe — NSIS Installer v3.04"]
B -->|"Dépaquetage via 7zz"| C["📁 app-64.7z — Archive 7-Zip<br/>146 fichiers, Electron + Chromium"]
C --> D["chrome_100_percent.pak"]
C --> E["chrome.dll / ffmpeg.dll / d3dcompiler"]
C --> F["vcruntime140.dll"]
C --> G["⚠️ elevate.exe — UAC bypass — 107 KB"]
C --> H["📁 resources/"]
H --> I["app.asar — 67 Mo"]
H --> J["⚠️ dpapi.node"]
H --> K["better_sqlite3.node"]
C --> L["package.json"]
B -->|"Extraction 7z"| M["📁 app.asar — Archive Electron"]
M --> N["package.json"]
M --> O["📄 20013166af246811.js — 733 KB"]
M -->|"Parsing manuel ASAR — Python struct"| O
O --> P["🔒 Code JavaScript obfusqué — CFF<br/>Dynamic require — AES-256-CBC — Strings encrypted"]
style A fill:#1a1a2e,color:#e0e0e0
style P fill:#8b0000,color:#e0e0e0
style G fill:#8b0000,color:#e0e0e0
style J fill:#8b0000,color:#e0e0e0
Détails du dépaquetage
Couche 1 — NSIS v3.04 (Nullsoft Scriptable Install System) :
L'exécutable Warband_x64.exe est un installeur NSIS version 3.04 avec compression Deflate. Les installeurs NSIS sont très courants dans la distribution de logiciels légitimes ET malveillants — ils sont trivialement dépaquetables avec 7zz (7-Zip) en ligne de commande, sans aucune exécution.
$ 7zz x Warband_x64.exe -o./nsis_out
Couche 2 — app-64.7z :
L'installeur NSIS contient une archive 7-Zip de l'application Electron complète. 146 fichiers au total, incluant le runtime Chromium, les DLLs Windows, et surtout les ressources compromettantes.
Couche 3 — app.asar :
Le fichier app.asar (67 Mo) est l'archive Electron contenant le code JavaScript de l'application. Electron utilise un format propriétaire (en-tête JSON + concaténation de fichiers), mais il est facilement parsable en Python grâce à la structure documentée :
import struct, json
with open("app.asar", "rb") as f:
header_size = struct.unpack("<I", f.read(4))[0]
header = json.loads(f.read(header_size))
# header["files"] contient l'arborescence complète
data_offset = 4 + header_size
# Chaque fichier : offset, size, executable flag
C'est dans cet ASAR que se trouve le cœur du stealer.
Dépendances suspectes — Analyse du package.json
Le package.json identifie l'application comme "warband_x64" version 2.1.1, avec un auteur se faisant passer pour "Warband_x64". Mais ce sont les dépendances qui sont révélatrices :
| Dépendance | Taille | Rôle légitime | Rôle malveillant suspecté |
|---|---|---|---|
@primno/dpapi |
Module natif | Accès DPAPI Windows | Vol de mots de passe Windows (credentials stockés via DPAPI) |
aws-sdk |
~40 Mo | SDK Amazon Web Services | Exfiltration vers Cloudflare R2 — stockage S3-compatible pour les données volées (l'aws-sdk est compatible S3/R2) |
systeminformation |
~2 Mo | Infos système | Fingerprinting matériel complet (CPU, RAM, GPU, MAC, disques) |
better-sqlite3 |
Module natif | Base SQLite | Stockage local des données exfiltrées et lecture des BDD de navigateurs |
archiver |
~200 Ko | Création d'archives | Création d'archives ZIP des données volées avant exfiltration |
ws |
~50 Ko | WebSocket client | Communication C2 via WebSocket — tunnel persistent et discret |
seco-file |
Module | Gestion de fichiers | Accès aux fichiers système et aux données sensibles |
glob |
~20 Ko | Pattern matching | Recherche de fichiers cibles (wallets, tokens, configs) |
form-data |
~30 Ko | Multipart uploads | Upload de données structurées vers le C2 |
axios |
~400 Ko | HTTP client | Requêtes HTTP pour exfiltration et communication |
node-fetch |
~40 Ko | HTTP client (native) | Alternative fetch |
adm-zip |
~60 Ko | Lecture ZIP | Lecture/parcours d'archives |
fs-extra |
~100 Ko | File system utils | Manipulation avancée du filesystem |
elevate.exe |
107 Ko | Binaire Windows | Contournement UAC — élévation de privilèges |
elevate.exe — Contournement UAC
Le binaire elevate.exe (107 Ko) inclus dans la distribution est un outil d'élévation de privilèges. Placé aux côtés du runtime Electron, il est probablement invoqué pour contourner le contrôle de compte utilisateur (UAC) de Windows et obtenir des droits administrateur sans consentement explicite de l'utilisateur.
Section .rsrc — Entropie anormale :
L'analyse de l'entropie de la section .rsrc (resources) de l'exécutable principal révèle une valeur de 7.8246 (sur un maximum de 8.0). Cette valeur anormalement élevée est caractéristique de données chiffrées ou compressées — ce qui n'est pas typique pour les ressources d'une application légitime, mais cohérent avec un stealer qui chiffre ses configurations ou ses strings internes.
Section Taille Entropie Interprétation
.text ~2.1 Mo 6.12 Code compilé (normal)
.rdata ~450 Ko 5.87 Données en lecture seule
.rsrc ~320 Ko 7.82 ⚠️ CHIFFRÉ / PACKÉ
Phase 3 : Analyse statique du code
Obfuscation par Control Flow Flattening (CFF)
Le fichier JavaScript principal — 20013166af246811.js — pèse 733 Ko de code fortement obfusqué. La technique utilisée est le Control Flow Flattening (aplatissement de flot de contrôle), une transformation qui restructure le code en un énorme switch-case imbriqué, rendant l'analyse par un humain quasiment impossible.
// Exemple simplifié du pattern CFF observé :
var _0x4f2a = ['...strings obfusquées...'];
(function(_0x1a2b, _0x3c4d) {
// fonction de décodage des strings
})(_0x4f2a, 0x1a3);
// Flot aplati :
while (true) {
switch (_0xState) {
case 0: /* bloc A */ _0xState = 3; break;
case 1: /* bloc B */ _0xState = 5; break;
case 2: /* bloc C */ _0xState = 0; break;
// ... des centaines de cas
}
}
Pattern de déchiffrement dynamique
Le pattern d'exécution le plus révélateur est le suivant :
new Function("require", decryptedString)(require)
Ce pattern fait deux choses critiques :
1. Construit une fonction dynamiquement à partir d'une chaîne déchiffrée au runtime
2. Injecte require en argument pour charger dynamiquement des modules Node.js
Le résultat : aucune string en clair ne mentionne les modules utilisés dans le code statique. Les noms des modules, les URLs de C2, les clés de chiffrement — tout est construit dynamiquement. C'est un anti-analyse classique mais efficace contre les outils d'inspection basiques.
Référence à AES-256-CBC
Malgré l'obfuscation, une référence au chiffrement AES-256-CBC a été identifiée dans les strings. Cela confirme que le stealer utilise un chiffrement symétrique robuste pour :
- Le chiffrement des données collectées avant exfiltration
- Le déchiffrement des strings internes du code obfusqué
- Potentiellement le chiffrement de fichiers locaux
Absence totale d'URLs/IPs en clair
Aucune URL, adresse IP ou domaine n'apparaît en clair dans le code. La résolution dynamique via le pattern new Function() empêche toute extraction simple. Le C2 est probablement construit à partir de fragments encodés en base64 XORés — une technique de plus en plus courante dans les stealer modernes.
Correction : Le déchiffrement a révélé que le C2 était en réalité chiffré via AES-256-CBC avec la clé PBKDF2 dérivée ci-dessus. Toute l'infra C2 est détaillée dans la section suivante.
Déchiffrement réussi — C2 complet extrait
Malgré l'obfuscation CFF, la clé et le sel étaient présents en clair dans le code JavaScript (array UVUgVj). Le déchiffrement a été réalisé entièrement en Python :
from hashlib import pbkdf2_hmac
from Crypto.Cipher import AES
password = b"+r1hykMfNTHNo7f0tu6TYy6mXlf6PnjY"
salt = extracted_salt # depuis l'array UVUgVj
key = pbkdf2_hmac("sha512", password, salt, 100000, dklen=32)
cipher = AES.new(key, AES.MODE_CBC, iv=extracted_iv)
plaintext = cipher.decrypt(ciphertext)
Le résultat : une charge utile de 494 Ko entièrement déchiffrée, révélant l'ensemble de l'infrastructure C2 et confirmant l'identité du malware.
Infrastructure C2 complète
Après déchiffrement, l'infrastructure C2 de Genesis Stealer v5 a été entièrement cartographiée :
| Type | Valeur |
|---|---|
| Webhook C2 #1 | discord.com/api/webhooks/1481283075634626580/7JZYdPUBTK1... |
| Webhook C2 #2 | discord.com/api/webhooks/1485321976947019897/dVj0GXoJ18... |
| Exfiltration | 227efc002310e6abf829b4c6a393bd4a.r2.cloudflarestorage.com (Cloudflare R2) |
| Steam API | clé 440D7F4D810EF9298D25EDDF37C1F902 (profiling gamers) |
| Telegram | t.me/genesisproj (support Genesis) |
| Licence | GENESIS-MONTHLY-96P04L6TEXGR |
| Python | python-3.12.10-amd64.exe (déployé côté victime) |
| Gofile | api.gofile.io/servers (upload alternatif) |
💡 Point clé sur l'exfiltration : Le code utilise le SDK AWS (
aws-sdk) mais cible en réalité Cloudflare R2, un stockage S3-compatible. C'est un choix délibéré — R2 offre une infrastructure plus difficile à bloquer et moins surveillée que AWS S3, tout en restant compatible avec l'API S3 existante.
Capacités du stealer
Sur la base de l'analyse des dépendances, du code obfusqué, des binaires inclus et du déchiffrement de la charge utile, voici la cartographie complète des capacités identifiées :
| # | Capacité | Mécanisme | Détail |
|---|---|---|---|
| 1 | Vol de tokens Discord | Déchiffrement interne | Token theft + billing/payment sources + guilds + relationships |
| 2 | Profiling Steam | Steam API | Games owned, level, profil complet (clé API: 440D7F...) |
| 3 | Vol de credentials Windows | @primno/dpapi + DPAPI/CNG |
DPAPI + CNG (decrypt_with_cng, Google Chromekey1) pour cookies Chrome |
| 4 | Exfiltration cloud | aws-sdk → Cloudflare R2 |
Envoi vers 227efc...r2.cloudflarestorage.com — stockage S3-compatible |
| 5 | Upload alternatif | Gofile API | api.gofile.io/servers comme fallback d'exfiltration |
| 6 | Fingerprinting système | systeminformation |
Collecte complète : CPU, RAM, GPU, adresse MAC, IP, modèle, OS, UUID |
| 7 | Communication C2 persistante | ws (WebSocket) |
Canal de commande bidirectionnel |
| 8 | Pillage de bases de données | better-sqlite3 |
Lecture des BDD SQLite des navigateurs (historique, cookies, autofill) |
| 9 | Vol de wallets crypto | Glob + extraction | Wallets d'extensions (Metamask, etc.) |
| 10 | Recherche de fichiers cibles | glob |
Scanning du filesystem pour wallets, tokens, configs |
| 11 | Archivage des données | archiver / adm-zip |
Création d'archives ZIP avant upload |
| 12 | Upload structuré | form-data / axios |
Envoi multipart vers le C2 |
| 13 | Élévation de privilèges | elevate.exe |
Contournement UAC |
| 14 | Chiffrement interne | AES-256-GCM + AES-256-CBC | Protection des strings, chiffrement des données collectées |
| 15 | Déploiement Python | python-3.12.10-amd64.exe |
Python téléchargé et déployé côté victime pour outils additionnels |
| 16 | Manipulation filesystem | fs-extra / seco-file |
Copie, déplacement, suppression de fichiers |
C'est Genesis Stealer v5, un stealer commercial disponible sous licence mensuelle via Telegram (t.me/genesisproj). L'opérateur francophone (strings FR présentes dans le code) utilise une licence GENESIS-MONTHLY-96P04L6TEXGR pour distribuer le stealer via le faux site warband-game.com.
Workflow d'analyse
L'une des particularités de cette analyse est qu'elle a été réalisée entièrement en statique sur Linux. Aucun binaire n'a été exécuté, aucune machine virtuelle Windows n'a été nécessaire. Voici la méthodologie complète :
Flowchart du workflow
graph TD
subgraph Title["WORKFLOW D'ANALYSE — 100%% statique — Linux — 0 exécution"]
S1["<b>Step 1</b><br/>Browserbase<br/>Inspection passive navigateur"]
S2["<b>Step 2</b><br/>dig + whois<br/>DNS / WHOIS / IP"]
S3["<b>Step 3</b><br/>Source code<br/>Revue HTML/JS"]
S4["<b>Step 4</b><br/>curl + hash<br/>Téléchargement + hachage"]
S5["<b>Step 5</b><br/>7zz CLI<br/>Dépaquetage NSIS"]
S6["<b>Step 6</b><br/>7z extract<br/>Extraction 7z"]
S7["<b>Step 7</b><br/>Python<br/>Parsing ASAR manuel"]
S8["<b>Step 8</b><br/>Regex / strs<br/>Déobfuscation CFF"]
S1 --> S2 --> S3 --> S4 --> S5 --> S6 --> S7 --> S8
end
style Title fill:#0d1117,color:#58a6ff,stroke:#58a6ff
Détail de chaque étape
Étape 1 — Inspection passive navigateur (Browserbase) :
Utilisation d'un navigateur headless distant (Browserbase) pour accéder au site sans risquer d'exposer notre machine. Permet de capturer le rendu visuel, observer le comportement dynamique et identifier les scripts chargés sans exécuter quoi que ce soit localement.
Étape 2 — DNS / WHOIS :
dig warband-game.com A +short # → 185.31.40.29
dig warband-game.com NS +short # → dns1.alwaysdata.com, dns2.alwaysdata.com
whois 185.31.40.29 # → AS60362, Alwaysdata Sarl, Paris
Identification immédiate de l'hébergeur et de la géolocalisation.
Étape 3 — Revue du code source :
Téléchargement de queryLog.js et install.js directement via curl. Analyse des scripts inline dans le HTML pour identifier les webhooks Discord, les mécanismes de collecte et les protections anti-analyse.
Étape 4 — Téléchargement et hachage :
curl -sI warband-game.com/Warband_x64.zip # headers HTTP
curl -O warband-game.com/Warband_x64.zip # téléchargement
python3 -c "import hashlib; print(hashlib.sha256(open('Warband_x64.zip','rb').read()).hexdigest())"
Métadonnées vérifiées : 88 438 620 bytes, Content-Type: application/zip, Last-Modified: 4 avril 2026.
Étape 5 — Dépaquetage NSIS :
7zz x Warband_x64.exe -onsis_out -y
Extraction sans exécution de l'installeur Nullsoft v3.04.
Étape 6 — Extraction 7z :
7z x nsis_out/$PLUGINSDIR/app-64.7z -oapp_out -y
146 fichiers extraits, incluant le runtime Electron, les DLLs et les ressources compromises.
Étape 7 — Parsing ASAR :
Pas d'outil asar installé ? Pas de problème. Le format est documenté et trivial à parser :
import struct, json, os
def extract_asar(path, out_dir):
with open(path, "rb") as f:
size = struct.unpack("<I", f.read(4))[0]
header = json.loads(f.read(size).decode("utf-8"))
data_offset = 4 + size
_extract_dir(header["files"], f, data_offset, out_dir, "")
def _extract_dir(node, f, base, out, prefix):
os.makedirs(os.path.join(out, prefix), exist_ok=True)
for name, info in node.items():
if "files" in info:
_extract_dir(info["files"], f, base, out, f"{prefix}{name}/")
else:
f.seek(base + info["offset"])
data = f.read(info["size"])
out_path = os.path.join(out, prefix, name)
os.makedirs(os.path.dirname(out_path), exist_ok=True)
with open(out_path, "wb") as out_f:
out_f.write(data)
Extraction réussie du JavaScript principal et du package.json.
Étape 8 — Tentatives de déobfuscation :
- Extraction de strings avec regex (URLs, IPs, chemins de fichiers)
- Recherche de patterns connus (eval(, Function(, require(, child_process)
- Identification du CFF par analyse structurelle du code
- Extraction du pattern new Function("require", ...)(require) et de la référence AES-256-CBC
💡 Point clé : L'obfuscation CFF rend la décompilation complète impossible sans exécution. Mais l'analyse des dépendances et des patterns structurels suffit à identifier les capacités du stealer avec un degré de confiance élevé.
IOC Complets
Hashes SHA-256
| Fichier | SHA-256 | Taille |
|---|---|---|
Warband_x64.zip |
b2ed2057ba2ec391ea947a3273f8ba6d8fe27988cf080b8711028c7a2889dcbf |
84,3 Mo |
Warband_x64.exe (NSIS) |
19e4ea3e63550693feace90f42ed07a171a4db5483b1c1d894124eb3f028af2c |
165 Mo |
elevate.exe (UAC bypass) |
9b1fbf0c11c520ae714af8aa9af12cfd48503eedecd7398d8992ee94d1b4dc37 |
107 Ko |
URLs et domaines
| URL / Domaine | Rôle |
|---|---|
https://warband-game.com |
Site malveillant principal |
https://warband-game.com/Warband_x64.zip |
Distribution du payload |
https://rooted-beta.com |
Domaine lié (newsletter, actuellement inactif) |
https://warband.com |
Site légitime Mount & Blade (référence) |
https://niquetamere.com |
Référencé dans les embeds Discord |
Webhooks Discord
| Webhook | Channel | Fonction |
|---|---|---|
discord.com/api/webhooks/1483564826813796587/Tn-aYJ...THhBtw |
New Visit | Fingerprinting visiteur (IP, GPS, UA, OS) |
discord.com/api/webhooks/1483564917410889850/xJq5Du...PAAwOQ |
Install L0gs | Traçage installation |
discord.com/api/webhooks/1481283075634626580/7JZYdPUBTK1... |
C2 #1 | Exfiltration des données volées |
discord.com/api/webhooks/1485321976947019897/dVj0GXoJ18... |
C2 #2 | Exfiltration alternative |
Infrastructure d'exfiltration
| Type | Valeur |
|---|---|
| Cloudflare R2 | 227efc002310e6abf829b4c6a393bd4a.r2.cloudflarestorage.com |
| Gofile (fallback) | api.gofile.io/servers |
| Steam API | 440D7F4D810EF9298D25EDDF37C1F902 |
| Telegram support | t.me/genesisproj |
| Licence Genesis | GENESIS-MONTHLY-96P04L6TEXGR |
Infrastructure réseau
| Indicateur | Valeur |
|---|---|
| IP | 185.31.40.29 |
| ASN | AS60362 |
| Hébergeur | Alwaysdata Sarl |
| Localisation | Paris, France |
| DNS primaire | dns1.alwaysdata.com |
| DNS secondaire | dns2.alwaysdata.com |
| MX primaire | mx1.alwaysdata.com |
| MX secondaire | mx2.alwaysdata.com |
Plugins NSIS identifiés
| Plugin | Taille | Rôle probable |
|---|---|---|
System.dll |
6 931 o | Appels système Windows |
StdUtils.dll |
45 608 o | Utilitaires NSIS avancés |
SpiderBanner.dll |
4 615 o | Affichage bannière pendant l'install |
nsExec.dll |
3 299 o | Exécution de commandes silencieuses |
nsis7z.dll |
242 382 o | Extraction d'archives 7z (déploie app-64.7z) |
WinShell.dll |
1 080 o | Exécution de commandes shell |
Modules natifs Node.js
| Module | Rôle suspecté |
|---|---|
dpapi.node |
Accès DPAPI Windows |
better_sqlite3.node |
Lecture bases SQLite navigateurs |
Conclusion
Cette opération illustre parfaitement la maturation de la chaîne d'attaque « fake game site + stealer commercial ». L'attaquant combine :
- Vol d'identité (nom et univers de Mount & Blade: Warband)
- Vol de propriété intellectuelle (captures d'écran de Stoneshard)
- Fingerprinting en temps réel (double webhook Discord)
- Distribution d'un stealer commercial (Genesis Stealer v5, DPAPI, Cloudflare R2, WebSocket, AES-256)
- Obfuscation sophistiquée (CFF, déchiffrement dynamique PBKDF2/AES-256-CBC)
- Infrastructure multi-canal (Discord webhooks, Cloudflare R2, Gofile, Steam API)
Le tout hébergé pour quelques euros sur Alwaysdata, avec une infrastructure entièrement jetable. Genesis Stealer v5 est un produit commercial mature — l'opérateur n'a fait que l'acheter (licence mensuelle) et l'adapter à son opération de phishing.
Le déchiffrement de la charge utile a démontré que même une obfuscation CFF poussée ne protège pas un malware si les clés de chiffrement sont laissées en clair dans le code. Toute l'infrastructure C2 a été extraite sans jamais exécuter le binaire.
La menace est réelle, mais les défenseurs disposent d'outils puissants pour la contrer.
🎓 Leçon pour les analysts
Quelques enseignements tirés de cette analyse, utiles pour tout analyste malware :
-
Les applications Electron sont la nouvelle cible privilégiée. Le framework Electron (Chromium + Node.js) offre un accès complet au filesystem et au réseau, tout en étant facile à obfusquer. Le fichier
app.asardevrait toujours être inspecté. -
NSIS se dépaquette en une commande. Les installeurs Nullsoft (
.exeNSIS) sont ouverts par7zzsans exécution. Ne passez jamais à côté d'un NSIS sous prétexte que c'est un exécutable Windows. -
Le format ASAR est ouvert et documenté. Pas besoin d'outils spécifiques — quelques lignes de Python avec
structetjsonsuffisent à extraire tout le contenu. -
L'entropie parle. Une section
.rsrcavec une entropie > 7.5 est un indicateur quasi certain de chiffrement ou de packing. Mesurez toujours l'entropie. -
Les webhooks Discord sont partout. Ils remplacent de plus en plus les serveurs C2 traditionnels. Faciles à créer, gratuits, et avec notifications push. Cherchez-les systématiquement dans le code JavaScript.
-
L'analyse des dépendances est sous-exploitée. Un
package.jsonpeut révéler 80 % des capacités d'un malware sans toucher au code.@primno/dpapi+aws-sdk+ws= stealer, c'est aussi simple que ça. -
Les clés en clair dans le code obfusqué sont un faille mortelle. Même avec du CFF poussé, si les clés PBKDF2 et le sel sont stockés en clair dans un array JavaScript, le déchiffrement est trivial. Genesis Stealer v5 a toute son infra C2 révélée pour cette raison.
-
Cloudflare R2 remplace de plus en plus AWS S3 pour l'exfiltration. L'API S3-compatible rend la migration transparente pour le malware, mais R2 est plus difficile à bloquer et moins surveillé. Vérifiez toujours si le bucket S3 soupçonné est en réalité sur R2.
-
Le CFF ne doit pas vous arrêter. Même si le code est inlisible, les patterns récurrents (
new Function,eval, strings encodées) et les appels système vous donneront les informations critiques. -
Le fingerprinting web précède souvent le malware. Un site qui vous trace avant même que vous téléchargiez quoi que ce soit est un signal d'alarme. Inspectez toujours les scripts JS d'un site suspect.
-
Zéro exécution = zéro risque. Cette analyse entière a été faite sur Linux, sans VM, sans sandbox. L'analyse statique, quand elle est méthodique, peut rivaliser avec l'analyse dynamique pour la majorité des stealer.
-
Toujours vérifier les assets visuels. Les captures d'écran de Stoneshard sur un site soi-disant Warband — c'est un détail que seul un gamer analyste aurait pu repérer. La culture générale est un atout en analyse.
Analyse réalisée par Louis BEDESCHI pour le blog Kitsune. Tous les IOC ont été vérifiés et sont fournis à des fins défensives uniquement.