TW / Independent
← Research-Audits

Malware Analysis / Artefakt: decrypt_payload.py · SHA-256 d44d008e7203…

2CLoader: Tarnschicht, Payload-Kette und Erkennungspunkte

Technische Quellenanalyse des konfigurierbaren Windows-Loaders: Resource-Format, mehrstufige Entschlüsselung, Anti-Analyse, Ausführungswege, Persistenz und belastbare defensive Signale.

EVIDENCEPrimärquellen + CodeFORMAT0xDC footerCHAINXOR → AES-GCMSTATUSQuellengebunden
Prüfumfang
Öffentlicher ThreatLabz-Bericht zu 2CLoader und das am selben Stand veröffentlichte Payload-Entschlüsselungswerkzeug.
Vorgehen
Statische Quellenanalyse des Berichts und des auf Commit aa8b55c6 fixierten Python-Werkzeugs. Kein Malware-Sample wurde beschafft, ausgeführt oder entschlüsselt.
Material
Offizieller Extractor, lokal auf Datei-Hash und Revision fixiert.
Befund

Resource-Footer, Schlüsselableitung und Entschlüsselungskette sind durch Bericht und Begleitcode nachvollziehbar; Laufzeitverhalten und Kampagnenkontext bleiben quellengebunden.

Keine eigene Sample- oder Telemetrieanalyse; keine unabhängige Bestätigung von C2, Payload-Verteilung, Infektionsweg oder Attribution.

Analystennotiz

Was der Prüfbestand wirklich hergibt.

Die stärkste Spur ist nicht ein Screenshot aus einem Bericht, sondern das Format im Extractor: Footer, XOR-Stufe und AES-GCM bilden eine überprüfbare Kette. Einen 2CLoader-Binärfund hatten wir dagegen nicht.

Evidence AnchorQuellstand geprüft
Artefakt
decrypt_payload.py
SHA-256
d44d008e720351ba346aef227934800568721e9babbb2aa77c4c21a13abd7f2b
Revision
aa8b55c63411a0ec691b4023cfdf6a81e48e1641
Analysegrundlage
Offizieller Extractor, lokal auf Datei-Hash und Revision fixiert.
Research anatomyInteraktives Methodenmodell

Eine Resource. Drei Ausführungswege.

Ein Footer und eine feste Magic markieren die eingebettete Konfiguration. Der Bericht bindet diese Struktur an den veröffentlichten Companion-Code.

Erklärendes Schema, keine Live-Telemetrie und kein Audit-Score. Die Einordnung und ihre Grenzen stehen im Artikel.

Malware / Evidence Atlas

Resource → Ausführungspfad

Der Analysepfad dieses Berichts. Jeder Knoten zeigt, was belegt ist, wo Detection ansetzen kann und wo die Aussage endet.

5Ablaufknoten 2Detection-Artefakte 2Regelformate
Aussage

Resource

Die quellengebundene Architektur beginnt bei einer eingebetteten Resource.

Detection-Schwerpunkt

Resourcegröße, Entropie und Zugriffspfad gemeinsam prüfen.

Primärquellengebunden
Config Surface

Konfigurations-Fingerabdruck

Analyseachsen aus dem Bericht – keine Live-Konfiguration und kein universeller Familienindikator.

01
Footer0xDC bytes
Kernspur
02
DekodierungXOR stage
Kernspur
03
EntschlüsselungAES-GCM
Kernspur
04
Persistenzscheduled task
Stütze
MODEL / 3CCAB70BKernspur, Stütze und Grenze – keine Risikowerte
Detection Pack

Defensive Artefakte

Quelle, Validierung und Grenze gehören zu jeder Regel.

QuelleEigene Ableitung aus der im Bericht beschriebenen Struktur.Validierungyara-python kompiliert; synthetische Truth-Table 3/3.GrenzeStruktureller Hunt, kein Familienbeweis.
YARARegel öffnen
Defensives Modell
rule Windows_Loader_2CLoader_Footer_Candidate {
 meta:
  author = "Ruhrdigital Studio"
  scope = "synthetic structural hunt; not family attribution"
 strings:
  $footer_magic = { 2C 3D 4E 5F }
 condition:
  uint16(0) == 0x5a4d and filesize > 0xDC and $footer_magic in (filesize-0xDC..filesize-1)
}

Evidenzstatus Im Prüfbestand belegtPrimärquellengebundenBegrenzt oder offen

Quelle, Prüfauftrag und Beleggrenze

ThreatLabz veröffentlichte am 30. September 2026 eine technische Analyse von 2CLoader und ein Python-Werkzeug zur Payload-Extraktion. Diese Untersuchung liest beide Primärquellen gegeneinander: Welche Struktur ist im Werkzeug tatsächlich kodiert, welche Verhaltensaussagen stammen ausschließlich aus der Sample- und Telemetrieanalyse von ThreatLabz, und welche defensiven Konsequenzen lassen sich daraus ableiten?

Es lag uns kein 2CLoader-Sample vor. Der Begleitcode wurde nicht mit Malware ausgeführt. Aussagen über Laufzeitverhalten, ausgelieferte Familien und Infrastruktur bleiben deshalb ausdrücklich der Primärquelle zugeschrieben.

ARTIFACT MANIFEST

Dateien und Prüfsummen

threatlabz-tools/2cloader/decrypt_payload.py
d44d008e720351ba346aef227934800568721e9babbb2aa77c4c21a13abd7f2b

Offizielles ThreatLabz-Begleitwerkzeug, fixiert auf Commit aa8b55c6; für diese Analyse nur statisch gelesen.

Was belegt ist — und was fehlt

Bericht und Begleitcode bilden zwei verschiedene Evidenzebenen. Der Bericht beschreibt beobachtete Samples, Ausführungsoptionen und Kampagnentelemetrie. Das Werkzeug implementiert die Resource-Suche, Footer-Struktur und Entschlüsselungsfolge. Ohne Originalsample lässt sich diese Implementierung hier nicht gegen einen konkreten Build wiederholen.

FILE / EVIDENCE MAP

Öffentliche Belege und offene Sample-Lücke

Die Karte trennt veröffentlichten Bericht, reproduzierbaren Werkzeugstand und das nicht vorhandene Malware-Sample.

Eine Dateireferenz belegt kein Laufzeitverhalten. Dokumentierte Aufbereitung ist keine erneute Ausführung.

QuelleWerkzeugAbleitungBelegFehlendReferenz geprüftDokumentiertUngeklärt

Beleglage

Zwei öffentliche Primärquellen; kein lokales Malware-Artefakt.

ThreatLabz-Bericht

Verhaltens-, Sample- und Telemetrieaussagen der Primärquelle.

  • ThreatLabz-Bericht → decrypt_payload.pyals Begleitwerkzeug veröffentlicht · Referenz geprüft

    Der Primärbericht verlinkt den ThreatLabz-Decryptor; Commit und Datei wurden fixiert.

Zugehöriges Berichtskapitel →
decrypt_payload.py

Hashgebundener offizieller Parser und Decryptor.

Datei
threatlabz-tools/2cloader/decrypt_payload.py
SHA-256
d44d008e720351ba346aef227934800568721e9babbb2aa77c4c21a13abd7f2b
Fundstelle
1-366
  • ThreatLabz-Bericht → decrypt_payload.pyals Begleitwerkzeug veröffentlicht · Referenz geprüft

    Der Primärbericht verlinkt den ThreatLabz-Decryptor; Commit und Datei wurden fixiert.

  • decrypt_payload.py → Malware-Sample nicht vorhandenhier nicht wiederholt · Ungeklärt

    Ohne Sample wurde keine Extraktion, Entschlüsselung oder Dekompression ausgeführt.

Zugehöriges Berichtskapitel →
Malware-Sample nicht vorhanden

Keine eigene Binär-, Laufzeit- oder C2-Evidenz.

  • decrypt_payload.py → Malware-Sample nicht vorhandenhier nicht wiederholt · Ungeklärt

    Ohne Sample wurde keine Extraktion, Entschlüsselung oder Dekompression ausgeführt.

Zugehöriges Berichtskapitel →

Grenze: Die Veröffentlichung eines Decryptors beweist seine Funktionsfähigkeit nur für die von ThreatLabz geprüften Stände, nicht für jede Variante.

Der Footer ist die Schaltzentrale

Das öffentliche Werkzeug erwartet am Ende der PE-Resource exakt 0xDC Byte Konfiguration. Ein Magic-Wert markiert den Footer; Größenfelder trennen Hauptpayload, optionale Zusatzdatei und optionale Nachricht. Weitere Felder steuern Persistenz, Anti-Analyse, Zielprozess, Schlafzeit und den geplanten Task.

Das ist defensiv relevant: Der Footer verbindet statisch sichtbare Struktur mit späterem Verhalten. Ein einzelner Magic-Wert wäre als Erkennung zu fragil; zusammen mit PE-Resource-Lage, plausiblen Größenbeziehungen und den nachfolgenden Prozessaktionen wird er belastbarer.

pythonThreatLabz-Decryptor: Parser für den 0xDC-Byte-FooterAnalysewerkzeug-Auszug
threatlabz-tools/2cloader/decrypt_payload.py · Zeilen 80-113
Datei-Hash anzeigenSHA-256 d44d008e720351ba346aef227934800568721e9babbb2aa77c4c21a13abd7f2b
def parse_footer(footer_bytes: bytes) -> configfooter:

    if struct.unpack_from("<I", footer_bytes, 0)[0] != FOOTER_MAGIC:
        fail()

    dwords = struct.unpack("<55I", footer_bytes)
    return configfooter(
        magic=dwords[0],
        fl=dwords[1],
        final_payload_size=dwords[2],
        aes_gcm_nonce_size=dwords[3],
        aes_gcm_tag_size=dwords[4],
        aes_gcm_nonce=footer_bytes[0x14:0x20],
        aes_gcm_tag=footer_bytes[0x20:0x30],
        sha256_seed_xor2=footer_bytes[0x30:0x40],
        sha256_seed_xor1=footer_bytes[0x40:0x50],
        sum_of_bytes_checksum=dwords[20],
        persistence=dwords[21],
        opt_flag=dwords[22],
        optional_payload_size=dwords[23],
        optional_message_size=dwords[24],
        xor_add_after_rolling_xor=footer_bytes[0x64],
        xor_key_after_rolling_xor=footer_bytes[0x65],
        rolling_xor_seed=footer_bytes[0x66],
        unk_67=footer_bytes[0x67],
        sleeptime=dwords[26],
        beacon_id=footer_bytes[0x6C:0x7C],
        target_executable_name_used_in_injection=footer_bytes[0x7C:0xBC],
        bt=dwords[47],
        pn=footer_bytes[0xC0:0xD0],
        unk_D0=dwords[52],
        scheduled_tasks_trigger_interval_hours=dwords[53],
        decompressed_buffer_size=dwords[54],
    )
Code lesen

Von der Resource zu drei Ausgaben

Die dokumentierte Verarbeitung ist eine feste Kette: Resource finden, Rolling XOR anwenden, zweite XOR-Stufe anwenden, Schlüssel aus Konfiguration und Code-Hash ableiten, AES-GCM authentifiziert entschlüsseln und optional Xpress Huffman dekomprimieren. Erst danach werden Hauptpayload, optionale Zusatzdatei und Nachrichtenblock getrennt.

AES-GCM ist hier kein Schutz für das Opfer, sondern schützt die eingebettete Payload vor einfacher statischer Extraktion. Gleichzeitig schafft der authentifizierte Tag einen harten Prüfschritt: falsche Schlüsselableitung oder veränderte Daten brechen die Kette.

pythonThreatLabz-Decryptor: vollständige Reihenfolge der statischen ExtraktionAnalysewerkzeug-Auszug
threatlabz-tools/2cloader/decrypt_payload.py · Zeilen 316-328
Datei-Hash anzeigenSHA-256 d44d008e720351ba346aef227934800568721e9babbb2aa77c4c21a13abd7f2b
def extract_decode_and_write(pe_path: str | Path, out_dir: str | Path):
    resource = find_footer_resource(pe_path)
    footer = resource["footer"]
    out_dir = Path(out_dir)
    out_dir.mkdir(parents=True, exist_ok=True)

    section_sha256_seed = compute_section_sha256_seed(pe_path)
    stage1 = decode_resource_stage(resource["body"], footer.rolling_xor_seed)
    stage2 = xor_decrypt_payload(bytearray(stage1), footer.xor_add_after_rolling_xor, footer.xor_key_after_rolling_xor)
    aes_key = generate_aes_key(footer, section_sha256_seed)
    aes_plaintext = aes_gcm_decrypt(stage2, footer, aes_key)
    final_buffer = decompress_final_payload(aes_plaintext, footer)
    main_payload, dropped_payload, message_block = split_body_parts(final_buffer, footer)
Code lesen

Anti-Analyse ist Teil der Schlüsselableitung

ThreatLabz beschreibt VM-, Debugger-, Timing- und Benutzeraktivitätsprüfungen. Besonders relevant ist die Kopplung an die Entschlüsselung: Eine Timingprüfung kann den SHA-256-Zwischenwert verändern und dadurch einen falschen AES-Schlüssel erzeugen. Das erzeugt keinen separaten sichtbaren Abbruch, sondern lässt die Payload-Kette kryptografisch scheitern.

Daneben soll 2CLoader über indirekte Systemaufrufe und Inline-Trampoline die Sicht von User-Mode-Sicherheitsprodukten und der nachgeladenen Payload beeinflussen. Die Wirkung dieser Mechanismen wurde hier nicht dynamisch nachgemessen.

Drei Ausführungswege, mehrere Persistenzpfade

Der Primärbericht beschreibt speicherbasierte .NET-Ausführung, manuelles LoadPE im eigenen Prozess und RunPE in einem angehaltenen Zielprozess. Konfigurationsflags können Fallbacks zwischen den nativen Wegen steuern. Optional kommen eine zweite abgelegte Datei und eine Täuschungsnachricht hinzu.

Persistenz kann über Run, RunOnce, Startup-Ordner, geplante Aufgaben, den Registry-Wert Load oder UserInitMprLogonScript erfolgen. Für die Verteidigung ist nicht die einzelne Methode entscheidend, sondern die zeitliche Kette aus neuer Autostart-Konfiguration, verdächtigem Prozessstart beziehungsweise Prozessmanipulation und anschließendem Beacon-Verkehr.

Erkennung: Struktur und Verhalten korrelieren

Ein belastbares Modell sollte drei Ebenen verbinden. Erstens statisch: PE-Resource mit passendem Footer-Magic, plausiblen Größenbeziehungen und Optionsfeldern. Zweitens Hostverhalten: neue Persistenz plus Prozessmanipulation oder speicherbasierte CLR-Ladung. Drittens Netzwerk: zeitnaher HTTP-POST eines neu gestarteten, nicht erwarteten Prozesses.

Das folgende Sigma-Beispiel ist ein defensives Korrelationsmodell für einen besonders aussagekräftigen Persistenzzweig. Es wurde hier nicht mit einer Sigma-Engine validiert und muss an Produktfelder, legitime Softwareverteilung und lokale Namenskonventionen angepasst werden.

yamlDefensives Modell, nicht engine-validiertDefensives Modell
title: 2CLoader-style scheduled task persistence candidate
status: experimental
logsource:
  product: windows
  category: process_creation
detection:
  task_tool:
    Image|endswith: '\\schtasks.exe'
    CommandLine|contains|all:
      - '/create'
      - '/sc'
      - 'onlogon'
  suspicious_name:
    CommandLine|contains: 'SecurityHealthService.exe'
  condition: task_tool and suspicious_name
falsepositives:
  - Legitimate software using the same filename or task pattern
level: medium
Code lesen

Payload-Nutzung ist keine Entwicklerzuordnung

ThreatLabz beobachtete 2CLoader vor allem in Verbindung mit Vidar und Remus sowie zusätzlich XWorm. Das beschreibt Auslieferungsbeziehungen in den untersuchten Kampagnen. Es beweist weder, dass dieselbe Partei Loader und Payloads entwickelt, noch dass jede künftige 2CLoader-Variante dieselben Familien verteilt.

Ebenso sind Dateiname, MessageBox-Text, Zielprozess oder einzelne C2-Indikatoren keine belastbare Betreiberidentität. Dieser Bericht übernimmt deshalb keine Akteurszuordnung.

Was diese Quellenanalyse trägt

Bericht und offizieller Decryptor stimmen in den strukturellen Kernaussagen überein: Footer-Größe und Magic, dreiteilige Resource, gestufte Entschlüsselung, codegebundene Schlüsselableitung und optionale Dekompression. Die Primärquelle ergänzt Anti-Analyse, Persistenz, Ausführungsoptionen und Kampagnenbeobachtungen.

Nicht belegt ist eine eigene Reproduktion an einem Sample. Deshalb bewertet diese Untersuchung die Architektur und ihre defensiven Konsequenzen, nicht die Funktionsfähigkeit eines konkreten Samples oder die Vollständigkeit aller Varianten.

Befunde im Überblick

  • Die Konfiguration liegt als 0xDC-Byte-Footer hinter einem verschlüsselten Resource-Körper und steuert Anti-Analyse, Persistenz und Ausführungsweg.
  • Rolling XOR, eine zweite XOR-Stufe, codegebundene SHA-256-Ableitung, AES-256-GCM und optional Xpress Huffman bilden eine gekoppelte Payload-Kette.
  • Die belastbarsten Erkennungspunkte entstehen aus der Korrelation von Loader-Resource, Persistenzänderung, Prozessmanipulation und anschließendem Netzwerkverkehr.

Grenzen der Prüfung

  • Der Bericht ist eine eigenständige technische Einordnung öffentlicher Primärquellen, keine eigene Malware-Sample-Reversierung.
  • Der veröffentlichte Decryptor wurde gelesen und hashgebunden, aber ohne Malware-Eingabe weder ausgeführt noch funktional verifiziert.
  • Von ThreatLabz beobachtete Payload-Familien und Infrastruktur belegen keine allgemeine Zuordnung jedes 2CLoader-Builds.

Kontext, nicht Beleg

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.

Zscaler ThreatLabz — 2CLoader technical analysis ↗ThreatLabz tools — decrypt_payload.py (commit aa8b55c6) ↗
Abschließendes Urteil

Fazit

Fazit: Die Tarnung ist konfigurierbar, die Kette bleibt beobachtbar

2CLoader verbindet Payload-Schutz, Analyseabwehr, flexible Ausführung und Persistenz in einer konfigurierbaren Zwischenschicht. Gerade diese Breite erzeugt aber mehrere miteinander verknüpfbare Signale: Resource-Struktur, Entschlüsselungsparameter, Autostart-Änderung, Prozessmanipulation und Statusverkehr. Der stärkste defensive Ansatz korreliert diese Ebenen, statt einen einzelnen Namen, Hash oder Magic-Wert als Familienbeweis zu behandeln.

Nächste Schritte

  • Footer-Parser zunächst nur gegen rechtmäßig verfügbare, hashgebundene Samples validieren.
  • Host- und Netzwerkdetektion mit synthetischen Positivfällen und bekannten legitimen Installern gegenprüfen.
  • Neue Varianten über Struktur und Verhaltenskette verfolgen, nicht allein über veröffentlichte IOCs.
Worauf dieses Urteil beruhtHoch für die Übereinstimmung von Bericht und Begleitcode; begrenzt für nicht selbst reproduzierte Laufzeit- und Kampagnenaussagen.
Öffentlicher ThreatLabz-Bericht zu 2CLoader und das am selben Stand veröffentlichte Payload-Entschlüsselungswerkzeug.
← Alle Research-Audits

Gespräch starten

Projekt besprechen.

Gespräch starten