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:6666yang 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 File | Laporan Rekening Bulan April.zip (arsip pengiriman) |
| Deskripsi | Arsip phishing bertema laporan rekening keuangan |
| Ukuran | 849 KB |
| MD5 | f35cd08e8a8d93466ff785e41db5f2a9 |
| SHA-256 | f675a5d846a1ecc2d585661cec4a9c36f0f9aa7ea4aae1329b18377deda21fe5 |
| Nama File | Tagihan bulan.exe |
| Deskripsi | Binary carrier — Microsoft Visual Studio 2022 Graphics Diagnostics yang sah, di-rename sebagai decoy |
| Ukuran | 2.1 MB |
| MD5 | 12199f946fa47547ec94fe93fb57b952 |
| SHA-1 | a2fbc7a1b0b6fd3a7316f014d2072a049b0a930a |
| SHA-256 | 3375ca29848411bcd49f7d6f7c6e3354f9804fb736d8486c39dc24ab934033fb |
| Compile Time | 2052-01-21 (di-forge — T1070.006) |
| Tanda Tangan | Microsoft Corporation (valid) |
| Nama File | VsGraphicsCore.dll |
| Deskripsi | GUID-based shellcode loader, menyamar sebagai komponen Microsoft Visual Studio |
| Ukuran | 132 KB |
| MD5 | 3b33f4c1dc26e1fe78458ab930b5ddd0 |
| SHA-1 | 17bc6b2c9196884546b8041d8cb48d04253b8f46 |
| SHA-256 | 52253c4e296a1d1f0931e8836fe9bf02413996e49f091e589eea24252c920dbc |
| Compile Time | 2026-05-07 09:48:45 UTC (real) |
| Compiler | GCC 4.9.2 (MinGW-w64 tdm64-1) |
| Tanda Tangan | Tidak 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:
- Korban menerima email phishing berisi lampiran
Laporan Rekening Bulan April.zip - Korban mengekstrak dan menjalankan
Tagihan bulan.exeyang terlihat sah (binary Microsoft) - Windows memuat
VsGraphicsCore.dlldari direktori yang sama melalui DLL Side-Loading DLL_PROCESS_ATTACHmemicu eksekusi payload — terjadi di bawah proses Microsoft yang signed- 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.dllsebagai C runtime (bukanVCRUNTIME140.dllseperti 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:
- Memanggil
UuidFromStringApada setiap GUID secara berurutan - Setiap GUID menghasilkan 16 bytes binary (format
bytes_le) - 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:
| Teknik | Implementasi | Tujuan |
|---|---|---|
| File marker | Cek keberadaan %LOCALAPPDATA%\.app_config_test via CreateFileA(OPEN_EXISTING) | Deteksi apakah malware sudah pernah dijalankan sebelumnya |
| Screen check | GetSystemMetrics(SM_CXSCREEN/SM_CYSCREEN) | Deteksi resolusi layar sandbox yang kecil |
| CPU timing | 10.000.000 iterasi loop | >30 detik CPU burn → sandbox timeout |
| Anti-debug | Sleep(0) + GetTickCount() + GetCurrentProcessId() setiap 1.024 byte dekripsi | Deteksi 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:
| Properti | Nilai |
|---|---|
| C2 Server | 207.56.138.28 |
| Port | 6666 |
| Protokol | TCP binary (ValleyRAT/Winos4.0) |
| Fallback | 127.0.0.1:6666 |
| ASN | ZILLION-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
| Tipe | Nilai | Keterangan |
|---|---|---|
| MD5 | f35cd08e8a8d93466ff785e41db5f2a9 | Arsip ZIP phishing |
| SHA-256 | f675a5d846a1ecc2d585661cec4a9c36f0f9aa7ea4aae1329b18377deda21fe5 | Arsip ZIP phishing |
| MD5 | 12199f946fa47547ec94fe93fb57b952 | Tagihan bulan.exe (carrier — clean) |
| SHA-256 | 3375ca29848411bcd49f7d6f7c6e3354f9804fb736d8486c39dc24ab934033fb | Tagihan bulan.exe (carrier — clean) |
| MD5 | 3b33f4c1dc26e1fe78458ab930b5ddd0 | VsGraphicsCore.dll (malicious) |
| SHA-1 | 17bc6b2c9196884546b8041d8cb48d04253b8f46 | VsGraphicsCore.dll (malicious) |
| SHA-256 | 52253c4e296a1d1f0931e8836fe9bf02413996e49f091e589eea24252c920dbc | VsGraphicsCore.dll (malicious) |
| Domain/IP | 207.56.138.28 | C2 server ValleyRAT |
| Port | 6666 | Port C2 |
| Path | %LOCALAPPDATA%\.app_config_test | Anti-reanalysis file marker |
| Registry (baca) | SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName | Fingerprinting hostname |
| Registry (baca) | SOFTWARE\Microsoft\Cryptography | Fingerprinting MachineGuid |
| Registry (hapus) | HKCU\Console\1 [d33f351a4aeea5e608853d1a56661059] | Mutex/marker anti-double-execution |
| GUID pertama | 04db52aa-5b04-b714-0677-860b36152899 | Identifier 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®
| Taktik | ID | Teknik | Prosedur |
|---|---|---|---|
| Initial Access | T1566.001 | Phishing: Spearphishing Attachment | Korban menerima email phishing bertema laporan keuangan dengan lampiran ZIP |
| Execution | T1204.002 | User Execution: Malicious File | Korban menjalankan Tagihan bulan.exe dari hasil ekstrak ZIP |
| Execution | T1129 | Shared Modules | VsGraphicsCore.dll dimuat dan dieksekusi secara otomatis melalui DLL_PROCESS_ATTACH |
| Defence Evasion | T1574.002 | Hijack Execution Flow: DLL Side-Loading | Binary Microsoft VS2022 yang sah digunakan sebagai host untuk memuat DLL berbahaya |
| Defence Evasion | T1036.005 | Masquerade: Match Legitimate Name | DLL diberi nama identik dengan komponen Microsoft Visual Studio yang asli |
| Defence Evasion | T1070.006 | Indicator Removal: Timestomp | Timestamp PE Tagihan bulan.exe dimanipulasi ke tahun 2052 |
| Defence Evasion | T1027 | Obfuscated Files or Information | Shellcode di-encode ke dalam 188 GUID strings di section .rdata |
| Defence Evasion | T1027.005 | Obfuscated: Stack Strings | Nama DLL dibangun di stack via memcpy — tidak muncul sebagai literal string |
| Defence Evasion | T1497.001 | Virtualization/Sandbox Evasion: System Checks | Cek resolusi layar + file marker %LOCALAPPDATA%\.app_config_test |
| Defence Evasion | T1497.003 | Virtualization/Sandbox Evasion: Time-Based | 10 juta iterasi CPU burn memicu timeout sandbox (>30 detik) |
| Defence Evasion | T1055 | Process Injection | Shellcode dieksekusi di memory PAGE_EXECUTE_READWRITE via CreateFileMappingA + SetTimer |
| Discovery | T1012 | Query Registry | Membaca ComputerName dan MachineGuid untuk fingerprinting host |
| Discovery | T1082 | System Information Discovery | GetSystemMetrics, GetVersionExA, SHGetFolderPathA |
| Command & Control | T1571 | Non-Standard Port | Komunikasi C2 menggunakan TCP port 6666 |
| Command & Control | T1095 | Non-Application Layer Protocol | Protokol 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

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