Balik
Reverse Engineering
Bongkar binary, pahami cara kerjanya
Tools Utama
Ghidra (gratis!)IDA FreeGDB + pwndbgradare2 / rizinobjdumpstrings
Langkah Pertama
MudahSebelum buka disassembler, cek dulu info dasarnya
Reconnaissance awalbash
1# Cek tipe file2file crackme3# crackme: ELF 64-bit LSB executable, x86-64...4 5# Cek proteksi (penting buat pwn juga)6checksec crackme7 8# Cari strings menarik9strings crackme | grep -i flag10strings crackme | grep -i password11strings crackme | grep -i correct12strings crackme | grep -i wrong13 14# Strings dengan minimum length15strings -n 10 crackme16 17# Jalanin dulu, liat behavior18./crackme19./crackme password123Tips
Kadang jawabannya literally ada di strings. Jangan langsung buka Ghidra sebelum cek strings dulu!
Assembly Dasar x86-64
MudahGak perlu jago, yang penting bisa baca
Register pentingasm
1# 64-bit registers:2RAX, RBX, RCX, RDX → general purpose3RSI, RDI → source, destination (juga args)4RSP → stack pointer5RBP → base pointer6RIP → instruction pointer (alamat instruksi sekarang)7 8# Calling convention Linux x64:9# Argument 1: RDI10# Argument 2: RSI11# Argument 3: RDX12# Argument 4: RCX13# Return value: RAX14 15# 32-bit pake E prefix: EAX, EBX, etc.Instruksi yang sering ketemuasm
1mov rax, rbx ; copy rbx ke rax2push rax ; taruh rax ke stack3pop rax ; ambil dari stack ke rax4 5add rax, 5 ; rax = rax + 56sub rax, 5 ; rax = rax - 57xor rax, rax ; rax = 0 (cara cepat set 0)8 9cmp rax, rbx ; bandingkan rax dengan rbx10test rax, rax ; cek apakah rax == 011 12jmp label ; loncat ke label13je label ; jump if equal (ZF=1)14jne label ; jump if not equal15jz label ; jump if zero16jnz label ; jump if not zero17 18call func ; panggil fungsi19ret ; return dari fungsi20 21lea rax, [rbx+4] ; load effective address (rax = rbx+4)Pattern Penting: Password Check
1; Biasanya kayak gini:2mov rdi, user_input ; input user3mov rsi, correct_pass ; password bener4call strcmp ; bandingin5test eax, eax ; hasil di EAX (0 = sama)6jne wrong ; kalo gak sama, loncat ke wrong7; ... correct path ...8 9; Yang perlu kita cari: apa isi correct_pass?10; Atau: gimana caranya bypass jne?Pake Ghidra
MudahDisassembler + decompiler gratis dari NSA
Workflow di Ghidratext
11. File → Import File → pilih binary22. Yes untuk analyze33. Tunggu analysis selesai4 5Di window utama:6- Kiri: Symbol Tree (fungsi-fungsi)7- Tengah: Disassembly (assembly)8- Kanan: Decompiler (pseudo-C) ← fokus sini9 10Shortcut penting:11G → Go to address12L → Label/rename13; → Comment14Ctrl+E → Edit bytes15X → Cross-references (siapa yg manggil fungsi ini)16F5 → Refresh decompilerContoh output decompilerc
1// Ghidra output (nama fungsi/var bisa di-rename)2void check_password(char *input) {3 char correct[16];4 5 // Hardcoded password!6 correct[0] = 's';7 correct[1] = 'e';8 correct[2] = 'c';9 correct[3] = 'r';10 correct[4] = 'e';11 correct[5] = 't';12 correct[6] = '