Auslieferung
Der Bericht beginnt bei der dokumentierten Bereitstellung des Browser-Wallet-Drainers.
Dateiherkunft, Signatur und Browserbezug erfassen.
Im Prüfbestand belegtMalware Analysis / Artefakt: web3-provider.js · SHA-256 b8dae0cab6e9…
Obfuskierter Provider, aufgelöste Stringtabelle, Empfängeradressen und Telemetrie. Was der Code belegt — und warum die vorliegende Kopie kein vollständiges Backend enthält.
Kein vollständiges Deployment oder Backend; keine dynamische Prüfung
Der Rohcode erzählt hier mehr als der Projektname. Wir trennen sichtbare Oberfläche, Provider-Aufruf und mögliche Wirkung, damit aus verdächtigem Code kein vorschnelles Urteil wird.
b8dae0cab6e95db8de1d3bb1baef189d9e4956c3ad5f83680c5b0597e255f2f4Der Analysepfad dieses Berichts. Jeder Knoten zeigt, was belegt ist, wo Detection ansetzen kann und wo die Aussage endet.
Der Bericht beginnt bei der dokumentierten Bereitstellung des Browser-Wallet-Drainers.
Dateiherkunft, Signatur und Browserbezug erfassen.
Im Prüfbestand belegtStatische Konfiguration verbindet Oberfläche, Zielrollen und Laufzeitoptionen.
Konfigurationsmarker statt einzelner Strings korrelieren.
Im Prüfbestand belegtDie Logik sucht den für Wallet-Interaktionen relevanten Browserkontext.
Prozessbaum, Erweiterungen und Profilzugriffe zusammenführen.
Im Prüfbestand belegtTäuschende Darstellung und technische Wallet-Anfrage bleiben getrennte Belegschichten.
UI-Text, Provider-Aufruf und Transaktionsinhalt vergleichen.
Begrenzt oder offenEine konfigurierte Empfängerrolle belegt weder Eigentümer noch einen erfolgreichen Transfer.
Bestätigte Chain-Ereignisse nur mit Zeit- und Transaktionsbezug.
Begrenzt oder offenAnalyseachsen aus dem Bericht – keine Live-Konfiguration und kein universeller Familienindikator.
Quelle, Validierung und Grenze gehören zu jeder Regel.
rules:
- id: value-ranked-wallet-transfer-review
languages: [javascript, typescript]
severity: WARNING
message: Review value-ranked assets passed to a wallet transfer operation
patterns:
- pattern-inside: |
$A.sort(($X, $Y) => $Y.amount_usd - $X.amount_usd);
...
- pattern-either:
- pattern: $W.sendTransaction(...)
- pattern: |
$W.request({method: "eth_sendTransaction", ...})
Untersucht wurde ein fixierter JavaScript-Snapshot des GitLab-Projekts cryptodrainexe/cryptowalletdrainer. Der Quellstand stammt vom 23. Februar 2025, das manuelle Audit vom 12. Oktober 2026. Für diese Darstellung wurden die vorhandenen Dateien am 13. Oktober rein statisch verglichen.
Die Frage lautet: Was zeigt diese konkrete Kopie über Wallet-Verhalten, Datenübermittlung und die Vollständigkeit des Systems? Es wurde keine Windows-EXE untersucht, kein Sample ausgeführt und kein Endpunkt kontaktiert.
Referenz: ARTIFACT-MANIFEST.md, Commit 233cd4e62536170ef67ac12e3ac8f218f1d10517; Verhaltensbewertung in AUDIT-DE.md. Die Hashliste unten unterscheidet Original und Ableitungen.
b8dae0cab6e95db8de1d3bb1baef189d9e4956c3ad5f83680c5b0597e255f2f4Originalsample
02818c11a03deb783b45f89bfbc44409ae39ad7db7bbdc16edb251e30d27f42eAnalysefassung / Werkzeug
d3fa51775c324cbb750dbc3e27cb3e834a44dcd2cd23a2b64e5775a65699d230Analysefassung / Werkzeug
89abae5ced4c67258d7ef4d14f53c05efa44e09ccd0a7889a183b5e917c0bcf1Analysefassung / Werkzeug
Die erste Ansicht zeigt ausgewählte Referenzen des erhaltenen HTML-Pakets. Die zweite trennt Rohdatei, unser Werkzeug, vorhandene Ableitungen und Bericht. Linien bedeuten dokumentierte Dateibeziehungen, keine ausgeführte Wallet- oder C2-Kette.
Dateireferenzen und Aufbereitung sind zwei verschiedene Zusammenhänge.
Eine Dateireferenz belegt kein Laufzeitverhalten. Dokumentierte Aufbereitung ist keine erneute Ausführung.
Ausgewählte HTML-Referenzen, vorhandene Dateien und fehlende Abhängigkeiten.
Original-HTML mit Scriptreferenzen.
index.html, Zeile87: statische src-Referenz; keine Browserausführung.
index.html, Zeile88: statische src-Referenz; keine Browserausführung.
index.html, Zeile94: statische src-Referenz; keine Browserausführung.
index.html, Zeile97: statische src-Referenz; keine Browserausführung.
index.html, Zeile86: statische src-Referenz; keine Browserausführung.
index.html, Zeile93: statische src-Referenz; keine Browserausführung.
Lokale Datei vorhanden; HTML referenziert sie in Zeile87.
index.html, Zeile87: statische src-Referenz; keine Browserausführung.
Lokale Datei vorhanden; HTML referenziert sie in Zeile88.
index.html, Zeile88: statische src-Referenz; keine Browserausführung.
Lokale Datei vorhanden; HTML referenziert sie in Zeile94.
index.html, Zeile94: statische src-Referenz; keine Browserausführung.
Fixierter Rohcode, HTML-Referenz in Zeile97.
index.html, Zeile97: statische src-Referenz; keine Browserausführung.
HTML-Zeile86 referenziert eine Datei außerhalb des erhaltenen Pakets.
index.html, Zeile86: statische src-Referenz; keine Browserausführung.
HTML-Zeile93 referenziert eine im Paket fehlende Datei.
index.html, Zeile93: statische src-Referenz; keine Browserausführung.
Historisch dokumentierte Aufbereitung; Hashes jetzt lesend geprüft.
Originalbytes separat erhalten.
Werkzeug Zeile12 liest eine Textdatei; der historische Lauf wird nur dokumentiert.
Lokaler Textparser, hier nur gelesen.
Werkzeug Zeile12 liest eine Textdatei; der historische Lauf wird nur dokumentiert.
ARTIFACT-MANIFEST.md, Derived artifacts: Decoderaufrufe statisch ersetzt.
Manifest führt string-table-map.json mit eigenem Hash auf; Mapdaten nicht veröffentlicht.
Vorhandene Ableitung; Inhalt nicht veröffentlicht.
Manifest führt string-table-map.json mit eigenem Hash auf; Mapdaten nicht veröffentlicht.
Bestehendes Artefakt nach statischer Ersetzung.
ARTIFACT-MANIFEST.md, Derived artifacts: Decoderaufrufe statisch ersetzt.
Manifest: Terser5.44.0-Faltung und Formatierung.
SHA-256 lokal neu berechnet und mit Manifest verglichen.
Bestehende Terser-Aufbereitung; eigener Hash.
Manifest: Terser5.44.0-Faltung und Formatierung.
AUDIT-DE.md verweist auf Zeilen der normalisierten Fassung.
SHA-256 lokal neu berechnet und mit Manifest verglichen.
Historische Zählwerte und Hashes, keine erneute Ausführung.
SHA-256 lokal neu berechnet und mit Manifest verglichen.
SHA-256 lokal neu berechnet und mit Manifest verglichen.
Interpretation und Grenzen, getrennt von Quellcode.
AUDIT-DE.md verweist auf Zeilen der normalisierten Fassung.
Grenze: Script-src ist eine HTML-Referenz, kein Beleg für erfolgreiche Laufzeitinitialisierung. Das vollständige ursprüngliche Backend liegt nicht vor. Die historische Transformation wurde nicht erneut ausgeführt.
Der HTML-Snapshot trägt den Projektnamen im title-Element. Die Browserdatei bezeichnet sich damit selbst als Drainer; der Name allein ist trotzdem kein Verhaltensnachweis. Hier werden nur Metadaten gezeigt, nicht das ausführende Script-Setup.
SHA-256 fcf7097d63a47ea9b6bf14b613a34cf1199225792d75da4f647c1dd03f1b2e4c<html lang="en"><head></head><body>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CryptoDrainEXE Multi-chain Crypto Wallet Drainer</title>
Originalzeilen der Quelldatei. Erklärung wählen, um den Bereich zu markieren.
Das damalige Manifest dokumentiert 3.295 Stringeinträge, 403 Tabellenrotationen, 107 Decoder-Aliase und 7.922 statisch ersetzte Aufrufe. Anschließend wurden 1.722 Stringkonkatenationen gefaltet und die normalisierte Fassung mit Terser 5.44.0 syntaktisch geprüft. Diese Arbeit wurde hier nicht erneut ausgeführt.
Original, Decoderersetzung und Normalisierung haben unterschiedliche Hashes. Teilweise kryptische Variablennamen bleiben erhalten. Die Fassung ist lesbar, aber kein ausgeführtes Programm und kein nachgewiesenes Deployment.
Der kurze Originalauszug wird nur als Text angezeigt. Er wurde in der Rohdatei und der vorhandenen normalisierten Fassung exakt gefunden. Der Seitentitel wird als Name in den Wallet-Verbindungsmetadaten verwendet. Diese Stelle erklärt die Transformation, nicht die schädliche Funktion des gesamten Samples.
Quellartefakt · Hash der vollständigen Datei, nicht des Ausschnitts
'name':document[_0x24d3e8(0x483)]name: document.title,Textansicht · keine Ausführung · Original bleibt unverändert
Der hexadezimale Aufruf verdeckt hier einen Eigenschafts- oder Stringnamen. Der kurze Ausschnitt bleibt mit seiner Originaldatei und Fundstelle verknüpft.
Die damalige Decoderersetzung und Normalisierung ergeben document.title. Die Fundstelle in der erzeugten Analysefassung ist separat angegeben.
Der Seitentitel dient als Name in Wallet-Verbindungsmetadaten. Er ist weder Empfängeradresse noch C2-Ziel.
Grenze: Kein vollständiger Decoder, keine Aussage zu Laufzeit oder Zahlung.
Die normalisierte Fassung zeigt die tatsächlich verwendeten DOM-Bezeichner: style, div, web3-overlay und web3-modal. Der obere Vergleich belegt eine einzelne Stringauflösung; der längere Originalauszug darunter zeigt ihren unmittelbaren UI-Kontext.
Es ist ein Ausschnitt aus der bestehenden Analysefassung, keine nachgebaute Modell-UI. SHA-256: 02818c11a03deb783b45f89bfbc44409ae39ad7db7bbdc16edb251e30d27f42e.
Quellartefakt · Hash der vollständigen Datei, nicht des Ausschnitts
'FxZSQ':_0x844b4c(0x579)FxZSQ: "style",Textansicht · keine Ausführung · Original bleibt unverändert
Der hexadezimale Aufruf verdeckt hier einen Eigenschafts- oder Stringnamen. Der kurze Ausschnitt bleibt mit seiner Originaldatei und Fundstelle verknüpft.
Die damalige Decoderersetzung und Normalisierung ergeben "style". Die Fundstelle in der erzeugten Analysefassung ist separat angegeben.
style bezeichnet ein DOM-Element. Die daneben stehenden Namen web3-overlay und web3-modal ordnen den String der Oberfläche zu.
Grenze: Kein vollständiger Decoder, keine Aussage zu Laufzeit oder Zahlung.
SHA-256 02818c11a03deb783b45f89bfbc44409ae39ad7db7bbdc16edb251e30d27f42e FxZSQ: "style",
OujMT: "web3-style",
iviYd: "div",
kKYbd: "web3-overlay",
wqNjF: "none",
XEQTG: ".web3-overlay",
uoEut: "click",
luxzn: "web3-modal"
Originalzeilen der Quelldatei. Erklärung wählen, um den Bereich zu markieren.
Dieser Ausschnitt stammt aus unserem Analysewerkzeug, nicht aus dem Drainer. Er prüft einzelne Escape-Sequenzen, gibt ein Zeichen zurück und verschiebt die Leseposition. Kein eval, kein Browser und kein Netzwerkaufruf.
Der Ausschnitt ist kein vollständiger JavaScript-Parser. Er belegt die Arbeitsweise eines Hilfsschritts, nicht eine Ausführung des Samples.
function decodeEscape(text, index) {
const ch = text[index];
const simple = { n: "\n", r: "\r", t: "\t", b: "\b", f: "\f", v: "\v", "0": "\0" };
if (Object.hasOwn(simple, ch)) return [simple[ch], index + 1];
if (ch === "x") {
const hex = text.slice(index + 1, index + 3);
if (!/^[0-9a-f]{2}$/i.test(hex)) throw new Error(`invalid hex escape at ${index}`);
return [String.fromCharCode(Number.parseInt(hex, 16)), index + 3];
}
if (ch === "u") {
const hex = text.slice(index + 1, index + 5);
if (!/^[0-9a-f]{4}$/i.test(hex)) throw new Error(`invalid unicode escape at ${index}`);
return [String.fromCharCode(Number.parseInt(hex, 16)), index + 5];
}
if (ch === "\n") return ["", index + 1];
if (ch === "\r" && text[index + 1] === "\n") return ["", index + 2];
return [ch, index + 1];
}
Zeilennummern gelten für diesen Ausschnitt. Erklärung wählen, um den Bereich zu markieren.
Der echte Auszug aus unserem Werkzeug liest Zeichen zwischen bekannten Anführungszeichen. Escape-Sequenzen werden an den separaten Helfer übergeben. Die Funktion wertet kein JavaScript aus; Tabellenmarker und sample-spezifische Decoderzuordnungen sind nicht Teil dieses Auszugs.
SHA-256 89abae5ced4c67258d7ef4d14f53c05efa44e09ccd0a7889a183b5e917c0bcf1 const quote = text[i];
if (quote !== "\"" && quote !== "'") throw new Error(`unexpected token in string table at ${i}`);
i += 1;
let value = "";
while (i < text.length && text[i] !== quote) {
if (text[i] === "\\") {
const decoded = decodeEscape(text, i + 1);
value += decoded[0];
i = decoded[1];
} else {
value += text[i];
i += 1;
}
}
if (text[i] !== quote) throw new Error("unterminated string table item");
Originalzeilen der Quelldatei. Erklärung wählen, um den Bereich zu markieren.
Dieser zweite Werkzeugauszug verbindet erkannte JSON-Stringliterale. Die Schleife stoppt, sobald keine Ersetzung mehr erfolgt. Das ist der echte lokale Verarbeitungsschritt, kein nachgebautes Drainer-Modell. Der historische Lauf und seine Zählwerte stehen im Manifest; er wurde für diese Ergänzung nicht erneut ausgeführt.
SHA-256 89abae5ced4c67258d7ef4d14f53c05efa44e09ccd0a7889a183b5e917c0bcf1const jsonString = '"(?:\\\\.|[^"\\\\])*"';
const concatPattern = new RegExp(`(${jsonString})\\s*\\+\\s*(${jsonString})`, "g");
let foldedConcats = 0;
while (true) {
let round = 0;
output = output.replace(concatPattern, (_full, left, right) => {
round += 1;
foldedConcats += 1;
return JSON.stringify(JSON.parse(left) + JSON.parse(right));
});
if (round === 0) break;
}
Originalzeilen der Quelldatei. Erklärung wählen, um den Bereich zu markieren.
Die statische Analyse dokumentiert eine Wertsortierung über amount_usd (Zeile 4445) und Wallet-/Gerätetelemetrie mit IP-/Standortdaten und Assetinventar (1938–2258). Damit priorisiert der Code Assets nach Wert und übermittelt Informationen über Wallet und Umgebung.
Der manuelle Befund CR-01 beschreibt die schädliche Diskrepanz: Die Seite rahmt den Vorgang als Verifikation oder Claim, während der Code hohe Berechtigungen oder direkte Vermögensübertragungen verlangt. Die zugrunde liegenden Wallet-Zweige sind in 4678–5875 dokumentiert; erlaubnisbezogene Befunde liegen in 3525–3832 und 4529–4677. „Verification Error“ erscheint in Zeile 4816 als UI-Text. Die Bewertung stützt sich auf die Pfade und ihren Kontext, nicht allein auf dieses Wort.
Telegram ist dabei Telemetriesenke, nicht der Nachweis eines vollständig vorhandenen ausführenden C2-Servers.
Die zwei konfigurierten Zieladressen stehen unten getrennt von Protokolladressen und Diensten. Address und Receiver benennen denselben Wert; die Chains-Konfiguration führt zusätzlich ein Ausführungsvertragsziel. Der manuelle Audit verfolgt die Empfänger-/Spenderrolle statisch bis zu werttragenden Pfaden.
Weitere Wallet-Deep-Links, Chain-Explorer, Preis- und Metadatendienste sind im Sample referenziert. Sie sind keine eigenständigen Schadindikatoren. Die öffentliche IP-Abfrage referenziert api[.]ipify[.]org in der normalisierten Fassung, Zeile 1950; unten sind repräsentative Dienste statt einer vollständigen Domainliste aufgeführt.
Die zwei konfigurierten Zieladressen stehen unten getrennt von Protokolladressen und Diensten. Address und Receiver benennen denselben Wert; die Chains-Konfiguration führt zusätzlich ein Ausführungsvertragsziel. Der manuelle Audit verfolgt die Empfänger-/Spenderrolle statisch bis zu werttragenden Pfaden. Weitere Wallet-Deep-Links, Chain-Explorer, Preis- und Metadatendienste sind im Sample referenziert. Sie sind keine eigenständigen Schadindikatoren. Die öffentliche IP-Abfrage referenziert api[.]ipify[.]org in der normalisierten Fassung, Zeile 1950; unten sind repräsentative Dienste statt einer vollständigen Domainliste aufgeführt.
0x3362B269946B8B244FF50cF07cc73f133279A21E0x55775D0D339D5B4146699a04fF49feEf8bc1Cff2api[.]telegram[.]orgavatars[.]githubusercontent[.]comipapi[.]corpc[.]ankr[.]comtoys2025[.]netlify[.]app0x000000000022d473030f116ddee9f6b43ac78ba3Keine Indikatoren in dieser Kategorie.
In dieser Kopie ist send_request ein lokaler Dispatcher (Zeilen 1795–1858), kein vollständiger HTTP-C2-Client. Die Weitergabe bestimmter Signaturdaten an einen ausführenden Server ist deshalb nicht vollständig vorhanden. Der ursprüngliche Servercode fehlt.
Telegram ist als Telemetriedienst dokumentiert; Bot-Token und Chat-/Nutzerkennungen bleiben redigiert. RPC-Endpunkte und die deklarierte Metadaten-Domain sind keine Ersatzbelege für ein vollständiges Betreiber-Backend.
Stringtabellen und kryptische Namen sind gewöhnliche Obfuskation. Aussagekräftiger ist die Kombination aus Wallet-orientiertem Verhalten, Wertsortierung und Telemetrie bei gleichzeitig unvollständigen Abhängigkeiten und fehlendem Servercode.
Das erklärt, warum eine lesbare Codekopie und ein vollständig beobachtetes System nicht dasselbe sind. Es erlaubt keine Aussage zur Marktposition oder zu tatsächlichen Opferverlusten.
Der Evidence Anchor am Anfang nennt den tatsächlich verwendeten Binär-, Datei- oder Revisionsbezug. Diese Links liefern Einordnung und berichtete Beobachtungen; sie ersetzen keine lokale Sample-Analyse.
Der fixierte Code trägt die Einordnung als Browser-Wallet-Drainer. Die Original-/Analysepaare machen ausgewählte Transformationen überprüfbar. Empfängerrollen und Telemetrie sind statisch dokumentiert; Zahlungen, Kontotypen und heutiger Betrieb wurden nicht geprüft. Fehlende Abhängigkeiten und der lokale Dispatcher begrenzen die Rekonstruktion des Gesamtsystems.
Gespräch starten