Hades Xploit
01HOME
02ARTICLES
03TOOLS
04TERMS
05PRIVACY
06DISCLAIMER
07LOGIN
08CTF

Xploit the Unknown // Defend the Known

highArticle

Membongkar Malware dengan Ghidra & IDA Pro: Teknik Static Analysis Mendalam

x0_Hades
22 May 2026
4 min read
Membongkar Malware dengan Ghidra & IDA Pro: Teknik Static Analysis Mendalam

Membongkar Malware dengan Ghidra & IDA Pro: Teknik Static Analysis Mendalam

Pendahuluan

Reverse engineering malware adalah langkah krusial dalam memahami perilaku ancaman siber. Di antara berbagai pendekatan, static analysis menjadi fondasi yang memungkinkan analis membedah kode tanpa menjalankannya. Dua alat yang mendominasi ranah ini adalah Ghidra (open-source dari NSA) dan IDA Pro (komersial dari Hex-Rays). Artikel ini akan mengupas teknik static analysis menggunakan kedua alat tersebut, mulai dari persiapan hingga rekonstruksi logika berbahaya.

Apa itu Static Analysis?

Static analysis adalah teknik menganalisis program tanpa mengeksekusinya. Tujuannya: mengidentifikasi malicious intent melalui struktur kode, string, API calls, dan alur kontrol. Keuntungan utamanya adalah keamanan—tidak perlu menjalankan sampel berbahaya di lingkungan nyata. Namun, tantangannya adalah obfuscation, packing, dan anti-analysis yang sering digunakan malware.

Persiapan Alat: Ghidra vs IDA Pro

Kedua alat memiliki kelebihan masing-masing:

  • Ghidra: Gratis, dekompiler yang mumpuni, mendukung banyak arsitektur, dan ekstensibel dengan Python/GhidraScript. Cocok untuk tim dengan anggaran terbatas.
  • IDA Pro: Dekompiler (Hex-Rays) yang sangat akurat, basis data analisis yang kaya, dan plugin ekstensif. Harganya mahal, tetapi menjadi standar industri.

Catatan: Dalam praktik, banyak analis menggunakan keduanya secara komplementer. IDA Pro untuk analisis cepat dan interaktif, Ghidra untuk kolaborasi dan scripting massal.

Langkah-langkah Static Analysis

1. Analisis Header File

Sebelum masuk ke kode, periksa header file dari sampel (PE, ELF, Mach-O). Gunakan alat seperti file, pefile, atau GUI Ghidra/IDA.

Contoh di Linux:

bash
$ file sample.exe
sample.exe: PE32 executable (GUI) Intel 80386, for MS Windows

Di Ghidra, setelah import, buka Program Tree untuk melihat section (.text, .data, .rdata, dll). Perhatikan entropi section—entropi tinggi menandakan packing atau enkripsi.

2. Menelusuri String

String sering menjadi petunjuk awal: URL C2, registry key, nama file, atau perintah sistem.

Di IDA Pro: Buka View > Open subviews > Strings (Shift+F12).

Di Ghidra: Search > Program Text atau gunakan script:

python
from ghidra.program.model.address import AddressSetView
from ghidra.app.util.opinion import OpinionService

# GhidraScript untuk ekstraksi string
strings = currentProgram.getListing().getDefinedData(True)
for data in strings:
    if data.isString():
        print(data.getDefaultValueRepresentation())

Perhatian: Malware sering menyembunyikan string dengan XOR atau encoding. Analis harus melakukan decode manual atau menggunakan plugin.

3. Deteksi Packer

Packer menyulitkan analisis statis dengan mengompresi/mengenkripsi kode asli. Tanda-tanda adanya packer:

  • Entropi section tinggi (>7.0)
  • Hanya sedikit import dalam IAT
  • Entry point kecil (stub unpacker)

Gunakan alat seperti Detect It Easy (DiE) atau PEiD untuk identifikasi awal.

Di IDA Pro: Plugin seperti IDAscope dan HexRaysPyTools membantu mendeteksi packer.

Di Ghidra: Gunakan Analysis > One Shot > Packer Detection (jika tersedia). Atau script manual:

python
# GhidraScript sederhana untuk cek entropy section
from ghidra.util.statistics import Entropy
for section in currentProgram.getMemory().getBlocks():
    if section.isInitialized():
        entropy = Entropy.calculateEntropy(section)
        print(f"{section.getName()}: {entropy:.2f}")

4. Dekompilasi dan Rekonstruksi Kode

Setelah unpacking (jika perlu), kita masuk ke inti—mendekomilasi kode assembly ke representasi tingkat tinggi.

IDA Pro + Hex-Rays: Pilih fungsi, tekan F5 untuk melihat dekompilasi C-like. Sangat akurat untuk kode yang tidak diobfuscate.

Ghidra Decompiler: Setelah analisis otomatis, buka Window > Decompiler. Bahasa yang dihasilkan mirip dengan Hex-Rays, kadang perlu modifikasi tipe data.

Contoh dekompilasi fungsi yang memanggil CreateFile:

c
void malicious_function(void) {
  HANDLE hFile;
  hFile = CreateFileA("C:\\Windows\\system32\\config\\SAM", 0x80000000, 0, NULL, 3, 0, NULL);
  if (hFile != INVALID_HANDLE_VALUE) {
    // baca registry SAM
  }
}

Dari sini, analis bisa melihat bahwa malware mencoba membaca file SAM (database password lokal).

5. Identifikasi Fungsi Berbahaya

Fokus pada API calls yang sensitif:

  • Network: WinHttpOpen, InternetConnect, socket, connect
  • File/Registry: CreateFile, RegOpenKeyEx, WriteFile
  • Process/Thread: CreateProcess, CreateRemoteThread, WriteProcessMemory (injection)
  • Cryptography: CryptEncrypt, CryptDecrypt (ransomware)

Di IDA Pro: Gunakan Imports tab dan Cross References (Xrefs).

Di Ghidra: Window > Symbol Table untuk melihat fungsi impor. Klik kanan > Show References to untuk melacak pemanggil.

6. Menulis Script Analisis Kustom

Untuk efisiensi, tulislah script Python yang memanfaatkan API Ghidra atau IDAPython.

Contoh IDAPython untuk mencetak semua fungsi yang memanggil WriteFile:

python
import idautils
import idaapi
import idc

for seg_ea in Segments():
    for func_ea in Functions(seg_ea, SegEnd(seg_ea)):
        func_name = GetFunctionName(func_ea)
        for (start, end) in Chunks(func_ea):
            for head in Heads(start, end):
                if GetMnem(head) == "call":
                    op = GetOperandValue(head, 0)
                    if GetFunctionName(op) == "WriteFile":
                        print(f"Fungsi {func_name} memanggil WriteFile di {hex(head)}")

Contoh GhidraScript (Python) untuk menandai fungsi yang menggunakan enkripsi:

python
from ghidra.app.decompiler import DecompInterface
from ghidra.util.task import ConsoleTaskMonitor

monitor = ConsoleTaskMonitor()
ifc = DecompInterface()
ifc.openProgram(currentProgram)

# Fungsi untuk mengecek apakah suatu fungsi memanggil CryptEncrypt
funcs = currentProgram.getListing().getFunctions(True)
for func in funcs:
    decomp = ifc.decompileFunction(func, 0, monitor)
    if decomp:
        code = decomp.getDecompiledFunction().getC()
        if "CryptEncrypt" in code:
            print(f"CryptEncrypt ditemukan di {func.getName()}")

Kesimpulan

Static analysis dengan Ghidra dan IDA Pro memberikan kemampuan luar biasa untuk memahami malware tanpa risiko eksekusi. Meskipun terdapat tantangan seperti obfuscation dan packing, kombinasi tool yang tepat serta scripting dapat membuka tabir kode berbahaya. Ingatlah bahwa static analysis hanyalah satu langkah—sering kali diperlukan dynamic analysis untuk konfirmasi.

Untuk analis yang ingin mendalami, pelajari lebih lanjut tentang data flow analysis, symbolic execution, dan deobfuscation. Selamat menganalisis, dan jaga keamanan siber tetap kuat!


Referensi: Ghidra Official Docs, Hex-Rays IDA Pro, Malware Analysis Tutorials oleh OALabs