Malware Analysis RELEASED 2026-05-10

Malware Analysis: DLL Side-Loading

TECH_STACK ::Reverse EngineeringPythonYARA/Sigma

Laporan Analisis Malware

Subtitle: Triage Pre-Execution: Analisis Downloader DLL Side-Loading via Kampanye Phishing Finansial
Klasifikasi: TLP: WHITE
Penulis: rwx4m
Tanggal: 10 Mei 2026
Status Insiden: 🟢 TIDAK ADA EKSEKUSI (Triage Pre-Execution)


VsGraphicsCore.dll

Downloader berbasis DLL Side-Loading yang menarget pengguna berbahasa Indonesia, dikirim melalui email phishing bertema keuangan.


Ringkasan Eksekutif

  • VsGraphicsCore.dll adalah shellcode loader berbasis DLL yang menarget pengguna Windows
  • Sampel berupa DLL arsitektur x64 yang dikompilasi menggunakan GCC 4.9.2 melalui MinGW w64, bukan menggunakan MSVC, dan menyamar sebagai komponen milik Microsoft Visual Studio.
  • Malware diamati dalam sebuah kampanye phishing dengan tema laporan rekening/tagihan keuangan, menarget pengguna korporat berbahasa Indonesia.
  • VsGraphicsCore.dll diunduh dan dieksekusi berpasangan dengan binary Microsoft Visual Studio 2022 yang sah (Tagihan bulan.exe) melalui mekanisme DLL Side-Loading.
  • Malware mengimplementasikan teknik Defence Evasion antara lain:
    • Encoding payload berbasis GUID (188 GUID strings → 3.008 bytes payload)
    • Custom rolling XOR cipher untuk mendekripsi shellcode
    • 4 lapis anti-analysis: file marker, screen resolution check, 10 juta iterasi CPU, anti-debug per 1.024 bytes
    • Stack string obfuscation untuk nama DLL yang dimuat secara dinamis
  • Shellcode yang di-decode mengandung string C2 207.56.138.28:6666 yang dikonfirmasi secara independen dari payload binary tanpa bergantung pada laporan sandbox.
  • Sandbox eksternal mengidentifikasi malware ini sebagai ValleyRAT (Winos4.0 Framework) yang adalah sebuah Remote Access Trojan yang dikaitkan dengan aktor ancaman berbahasa Mandarin.

Pendahuluan

Pada 7 Mei 2026, seorang karyawan menerima email mencurigakan dengan lampiran arsip ZIP bernama Laporan Rekening Bulan April.zip. Karyawan tidak mengeksekusi isi lampiran dan segera melaporkannya ke tim keamanan. File diserahkan untuk analisis triage. Tidak ada sistem yang terdampak.

Laporan ini berfokus pada analisis teknis VsGraphicsCore.dll yang merupakan komponen berbahaya yang ditemukan di dalam arsip ZIP tersebut.


Detail Malware

Metadata

Nama FileLaporan Rekening Bulan April.zip (arsip pengiriman)
DeskripsiArsip phishing bertema laporan rekening keuangan
Ukuran849 KB
MD5f35cd08e8a8d93466ff785e41db5f2a9
SHA-256f675a5d846a1ecc2d585661cec4a9c36f0f9aa7ea4aae1329b18377deda21fe5
Nama FileTagihan bulan.exe
DeskripsiBinary carrier — Microsoft Visual Studio 2022 Graphics Diagnostics yang sah, di-rename sebagai decoy
Ukuran2.1 MB
MD512199f946fa47547ec94fe93fb57b952
SHA-1a2fbc7a1b0b6fd3a7316f014d2072a049b0a930a
SHA-2563375ca29848411bcd49f7d6f7c6e3354f9804fb736d8486c39dc24ab934033fb
Compile Time2052-01-21 (di-forge — T1070.006)
Tanda TanganMicrosoft Corporation (valid)
Nama FileVsGraphicsCore.dll
DeskripsiGUID-based shellcode loader, menyamar sebagai komponen Microsoft Visual Studio
Ukuran132 KB
MD53b33f4c1dc26e1fe78458ab930b5ddd0
SHA-117bc6b2c9196884546b8041d8cb48d04253b8f46
SHA-25652253c4e296a1d1f0931e8836fe9bf02413996e49f091e589eea24252c920dbc
Compile Time2026-05-07 09:48:45 UTC (real)
CompilerGCC 4.9.2 (MinGW-w64 tdm64-1)
Tanda TanganTidak ada

Fungsionalitas

Gambaran Umum

VsGraphicsCore.dll dieksekusi secara otomatis melalui mekanisme DLL Side-Loading ketika Tagihan bulan.exe dijalankan oleh korban. Kedua file diekstrak ke direktori yang sama dari arsip ZIP, sehingga Windows DLL search order memprioritaskan DLL impostor di direktori yang sama sebelum mencari di System32.

Urutan eksekusi:

  1. Korban menerima email phishing berisi lampiran Laporan Rekening Bulan April.zip
  2. Korban mengekstrak dan menjalankan Tagihan bulan.exe yang terlihat sah (binary Microsoft)
  3. Windows memuat VsGraphicsCore.dll dari direktori yang sama melalui DLL Side-Loading
  4. DLL_PROCESS_ATTACH memicu eksekusi payload — terjadi di bawah proses Microsoft yang signed
  5. Malware melakukan pengecekan environment, mendekripsi payload dari 188 GUID strings, mengeksekusi shellcode yang berisi C2 207.56.138.28:6666

DLL Side-Loading

VsGraphicsCore.dll menggunakan nama yang identik dengan komponen Microsoft Visual Studio yang asli. Dari 1.861 fungsi yang diekspor, 1.859 adalah stub kosong yang hanya mengembalikan nilai 0 — diverifikasi melalui analisis byte pattern dan decompile. Ini adalah kamuflase visual agar DLL terlihat sah. Seluruh logika berbahaya berjalan melalui DLL_PROCESS_ATTACH, bukan melalui fungsi yang diekspor.

Bukti bahwa DLL ini adalah impostor dan bukan produk Microsoft:

  • Dikompilasi dengan GCC 4.9.2 (MinGW-w64) — ditemukan 23 compiler strings di binary
  • Menggunakan msvcrt.dll sebagai C runtime (bukan VCRUNTIME140.dll seperti komponen VS asli)
  • Tidak memiliki Authenticode signature
  • Tidak memiliki Version Info di PE metadata
  • Subsystem PE adalah Console (3) bukan GUI (2) seperti komponen VS asli
  • ASLR dan CFG dinonaktifkan

Persistensi

Berdasarkan laporan sandbox, shellcode yang didekripsi membentuk payload yang terhubung ke C2 207.56.138.28:6666 menggunakan protokol TCP binary khas ValleyRAT. ValleyRAT diketahui menggunakan berbagai mekanisme persistensi termasuk registry modification dan task scheduling, namun mekanisme spesifik stage ini memerlukan analisis lebih lanjut terhadap payload yang ter-decode sepenuhnya.


Defence Evasion

GUID-Based Payload Encoding

VsGraphicsCore.dll menyembunyikan shellcode berukuran 3.008 bytes di dalam 188 GUID strings pada section .rdata. String-string ini terlihat seperti data UUID biasa bagi analis statis.

Untuk mendekripsi payload, malware:

  1. Memanggil UuidFromStringA pada setiap GUID secara berurutan
  2. Setiap GUID menghasilkan 16 bytes binary (format bytes_le)
  3. 188 GUID × 16 bytes = 3.008 bytes encoded payload
Section .rdata berisi 188 GUID strings:
  04db52aa-5b04-b714-0677-860b36152899
  3dd7c351-c5a3-78b8-7611-e9825f92b31a
  7e1c74b0-1209-1687-6d86-07135be9ef10
  ... (185 GUID lainnya)
         │
         ▼  UuidFromStringA() × 188
3.008 bytes encoded binary (di heap, malloc 0xbc0)

Custom Rolling XOR Cipher

Payload hasil GUID decode kemudian didekripsi menggunakan custom rolling XOR cipher (bukan XOR sederhana dengan key tetap). Karakteristik algoritma:

  • Initial key: 0xe2
  • Polynomial feedback mask: 0xb8
  • Setiap byte input mempengaruhi key untuk byte berikutnya (rolling)
  • Anti-debug setiap 1.024 bytes: Sleep(0) + GetTickCount() + GetCurrentProcessId()

Implementasi Python dari algoritma ini tersedia di Lampiran 1.

Stack String Obfuscation

Nama-nama DLL yang dimuat secara dinamis (activeds.dll, Kernel32, rpcrt4, User32.dll) dan nama fungsi yang di-resolve secara runtime dibangun di stack menggunakan memcpy — tidak muncul sebagai string literal dalam binary. Ini mempersulit analisis statis berbasis pencarian string.

Anti-Analysis (4 Lapisan)

VsGraphicsCore.dll mengimplementasikan 4 teknik anti-analysis sebelum payload dieksekusi:

TeknikImplementasiTujuan
File markerCek keberadaan %LOCALAPPDATA%\.app_config_test via CreateFileA(OPEN_EXISTING)Deteksi apakah malware sudah pernah dijalankan sebelumnya
Screen checkGetSystemMetrics(SM_CXSCREEN/SM_CYSCREEN)Deteksi resolusi layar sandbox yang kecil
CPU timing10.000.000 iterasi loop>30 detik CPU burn → sandbox timeout
Anti-debugSleep(0) + GetTickCount() + GetCurrentProcessId() setiap 1.024 byte dekripsiDeteksi single-step debugging

Dynamic API Resolution

Fungsi-fungsi Win32 yang dibutuhkan (UuidFromStringA, VirtualProtect, SetTimer, dll.) di-resolve secara runtime menggunakan GetProcAddress — nama fungsi tidak muncul langsung dalam import table. Malware memuat library yang dibutuhkan via LoadLibraryA dengan stack strings, lalu memanggil GetProcAddress untuk mendapatkan pointer.


Komunikasi

VsGraphicsCore.dll menjalankan shellcode yang berisi konfigurasi C2. Berdasarkan analisis payload yang didekripsi dan konfirmasi dari laporan sandbox:

PropertiNilai
C2 Server207.56.138.28
Port6666
ProtokolTCP binary (ValleyRAT/Winos4.0)
Fallback127.0.0.1:6666
ASNZILLION-NETWORK (US)

String C2 ditemukan di dalam decoded shellcode, dikonfirmasi secara independen melalui implementasi XOR decoder tanpa bergantung pada laporan sandbox eksternal.

String identifikasi lain dalam decoded shellcode: codemark (build/version marker) dan referensi ke ws2_32.dll (Winsock2) yang di-obfuskasi menggunakan stack strings.


Deteksi

Indikator Kompromi

TipeNilaiKeterangan
MD5f35cd08e8a8d93466ff785e41db5f2a9Arsip ZIP phishing
SHA-256f675a5d846a1ecc2d585661cec4a9c36f0f9aa7ea4aae1329b18377deda21fe5Arsip ZIP phishing
MD512199f946fa47547ec94fe93fb57b952Tagihan bulan.exe (carrier — clean)
SHA-2563375ca29848411bcd49f7d6f7c6e3354f9804fb736d8486c39dc24ab934033fbTagihan bulan.exe (carrier — clean)
MD53b33f4c1dc26e1fe78458ab930b5ddd0VsGraphicsCore.dll (malicious)
SHA-117bc6b2c9196884546b8041d8cb48d04253b8f46VsGraphicsCore.dll (malicious)
SHA-25652253c4e296a1d1f0931e8836fe9bf02413996e49f091e589eea24252c920dbcVsGraphicsCore.dll (malicious)
Domain/IP207.56.138.28C2 server ValleyRAT
Port6666Port C2
Path%LOCALAPPDATA%\.app_config_testAnti-reanalysis file marker
Registry (baca)SYSTEM\CurrentControlSet\Control\ComputerName\ComputerNameFingerprinting hostname
Registry (baca)SOFTWARE\Microsoft\CryptographyFingerprinting MachineGuid
Registry (hapus)HKCU\Console\1 [d33f351a4aeea5e608853d1a56661059]Mutex/marker anti-double-execution
GUID pertama04db52aa-5b04-b714-0677-860b36152899Identifier payload encoding

Rules dan Signatures


Deskripsi: Mendeteksi DLL yang mengklaim sebagai komponen Visual Studio namun dikompilasi dengan GCC/MinGW. Rule ini memanfaatkan compiler artifact yang tidak dapat dipalsukan secara retrospektif.
Presisi: Tidak ada false positive yang teridentifikasi — DLL Microsoft Visual Studio selalu dikompilasi dengan MSVC.
Tipe rule: YARA

rule VsGraphicsCore_GCC_Impostor {
    meta:
        author      = "rwx4m"
        description = "Detects VsGraphicsCore.dll GCC-compiled impostor (ValleyRAT loader)."
        hash1       = "17bc6b2c9196884546b8041d8cb48d04253b8f46"

    strings:
        $dll_name   = "VsGraphicsCore.dll" ascii
        $gcc1       = "GCC: (GNU) 4.9.2" ascii
        $gcc2       = "GCC: (tdm64-1) 4.9.2" ascii
        $mingw      = "Mingw-w64 runtime failure:" ascii
        $reloc      = "Unknown pseudo relocation protocol version %d." ascii
        $reg1       = "System\\CurrentControlSet\\Control\\ComputerName" ascii
        $reg2       = "SOFTWARE\\Microsoft\\Cryptography" ascii
        $msvcrt     = "msvcrt.dll" ascii nocase

    condition:
        uint16(0) == 0x5A4D and
        uint32(uint32(0x3C)) == 0x00004550 and
        $dll_name and ($gcc1 or $gcc2) and
        ($mingw or $reloc) and ($reg1 or $reg2) and $msvcrt
}

Deskripsi: Mendeteksi pola GUID pertama yang digunakan sebagai encoded payload dalam VsGraphicsCore.dll.
Presisi: Tidak ada false positive yang teridentifikasi — GUID ini spesifik terhadap sampel ini.
Tipe rule: YARA

rule VsGraphicsCore_GUID_Payload_Encoding {
    meta:
        author      = "rwx4m"
        description = "Detects the GUID-based payload encoding pattern in VsGraphicsCore.dll."
        hash1       = "17bc6b2c9196884546b8041d8cb48d04253b8f46"

    strings:
        $guid1 = "04db52aa-5b04-b714-0677-860b36152899" ascii
        $guid2 = "3dd7c351-c5a3-78b8-7611-e9825f92b31a" ascii

    condition:
        uint16(0) == 0x5A4D and
        uint32(uint32(0x3C)) == 0x00004550 and
        any of them
}

Deskripsi: Mendeteksi C2 IP dan build marker dalam decoded shellcode ValleyRAT. Diterapkan pada memory dump atau decoded payload (hasil XOR decode 3.008 bytes).
Presisi: Tidak ada false positive yang teridentifikasi.
Tipe rule: YARA

rule ValleyRAT_Shellcode_C2 {
    meta:
        author      = "rwx4m"
        description = "Detects ValleyRAT C2 config in decoded shellcode or memory dump."
        hash1       = "17bc6b2c9196884546b8041d8cb48d04253b8f46"

    strings:
        $c2     = "207.56.138.28" ascii
        $marker = "codemark" ascii

    condition:
        $c2 and $marker
}

Deskripsi: Mendeteksi koneksi jaringan ke C2 server ValleyRAT yang dikonfirmasi. IP ini divalidasi secara independen dari binary DLL tanpa bergantung pada laporan sandbox.
Presisi: Tidak ada false positive yang teridentifikasi.
Tipe rule: Sigma

title: ValleyRAT C2 Connection — VsGraphicsCore Campaign
id: rwx4m-2026-001
status: stable
description: |
    Detects TCP connection to confirmed ValleyRAT C2 server.
    IP 207.56.138.28:6666 independently validated from DLL payload.
author: rwx4m
date: 2026-05-10
logsource:
    category: network_connection
    product: windows
detection:
    selection:
        DestinationIp: '207.56.138.28'
        DestinationPort: 6666
    condition: selection
falsepositives:
    - None expected
level: critical
tags:
    - attack.command_and_control
    - attack.t1071.001
    - attack.t1095

Deskripsi: Mendeteksi loading DLL VsGraphicsCore.dll yang tidak ditandatangani. Komponen Microsoft Visual Studio selalu ditandatangani; versi unsigned merupakan DLL impostor.
Presisi: Tidak ada false positive yang teridentifikasi — Microsoft selalu menandatangani komponen Visual Studio.
Tipe rule: Sigma

title: Unsigned VsGraphicsCore.dll Loaded — DLL Side-Loading
id: rwx4m-2026-002
status: stable
description: |
    Detects loading of unsigned VsGraphicsCore.dll.
    Legitimate Microsoft component is always signed.
    Unsigned version = GCC-compiled impostor (ValleyRAT loader).
author: rwx4m
date: 2026-05-10
logsource:
    category: image_load
    product: windows
detection:
    selection:
        ImageLoaded|endswith: '\VsGraphicsCore.dll'
        Signed: 'false'
    condition: selection
falsepositives:
    - None
level: critical
tags:
    - attack.defense_evasion
    - attack.t1574.002
    - attack.t1036.005

MITRE ATT&CK®

TaktikIDTeknikProsedur
Initial AccessT1566.001Phishing: Spearphishing AttachmentKorban menerima email phishing bertema laporan keuangan dengan lampiran ZIP
ExecutionT1204.002User Execution: Malicious FileKorban menjalankan Tagihan bulan.exe dari hasil ekstrak ZIP
ExecutionT1129Shared ModulesVsGraphicsCore.dll dimuat dan dieksekusi secara otomatis melalui DLL_PROCESS_ATTACH
Defence EvasionT1574.002Hijack Execution Flow: DLL Side-LoadingBinary Microsoft VS2022 yang sah digunakan sebagai host untuk memuat DLL berbahaya
Defence EvasionT1036.005Masquerade: Match Legitimate NameDLL diberi nama identik dengan komponen Microsoft Visual Studio yang asli
Defence EvasionT1070.006Indicator Removal: TimestompTimestamp PE Tagihan bulan.exe dimanipulasi ke tahun 2052
Defence EvasionT1027Obfuscated Files or InformationShellcode di-encode ke dalam 188 GUID strings di section .rdata
Defence EvasionT1027.005Obfuscated: Stack StringsNama DLL dibangun di stack via memcpy — tidak muncul sebagai literal string
Defence EvasionT1497.001Virtualization/Sandbox Evasion: System ChecksCek resolusi layar + file marker %LOCALAPPDATA%\.app_config_test
Defence EvasionT1497.003Virtualization/Sandbox Evasion: Time-Based10 juta iterasi CPU burn memicu timeout sandbox (>30 detik)
Defence EvasionT1055Process InjectionShellcode dieksekusi di memory PAGE_EXECUTE_READWRITE via CreateFileMappingA + SetTimer
DiscoveryT1012Query RegistryMembaca ComputerName dan MachineGuid untuk fingerprinting host
DiscoveryT1082System Information DiscoveryGetSystemMetrics, GetVersionExA, SHGetFolderPathA
Command & ControlT1571Non-Standard PortKomunikasi C2 menggunakan TCP port 6666
Command & ControlT1095Non-Application Layer ProtocolProtokol binary TCP khas ValleyRAT/Winos4.0

Lampiran

Lampiran 1 — Algoritma XOR Decoder

Implementasi Python dari custom rolling XOR cipher yang digunakan untuk mendekripsi shellcode dari hasil GUID decode. Algoritma ini direkonstruksi dari hasil analisis binary.

# Implementasi rolling XOR decoder VsGraphicsCore.dll
# initial_key = 0xe2, polynomial = 0xb8

def decode_xor(data: bytes, init_key: int = 0xe2, poly: int = 0xb8) -> bytearray:
    """
    Rolling XOR decoder.
    output[i] = key ^ input[i]
    key_new   = ((key >> 1) ^ poly if key & 1 else key >> 1) ^ input[i]
    """
    decoded = bytearray()
    k = init_key & 0xff
    for b in data:
        decoded.append(k ^ b)
        k2 = k >> 1
        k3 = k2 ^ poly if (k & 1) == 1 else k2
        k = (k3 ^ b) & 0xff
    return decoded

Lampiran 2 — Rantai Eksekusi Lengkap

exec-chain


Laporan ini disusun berdasarkan analisis teknis yang dapat diverifikasi dan direproduksi secara independen.
Domain dan IP berbahaya ditulis sebagaimana adanya untuk keperluan pencarian dan deteksi.

Penulis: rwx4m | Tanggal: 10 Mei 2026 | TLP: WHITE

Verified by rwx4m-Vault
End of Transmission