Apa itu CPU, memory, disk, register dalam reverse engineering (RE)
2025-07-16 - Rainhynn
Penjelasan sederhana tentang komponen komputer yang penting untuk dipahami dalam reverse engineering:
1. CPU (Central Processing Unit)
- Apa itu? “Otak” komputer yang menjalankan instruksi program.
- Fungsi dalam RE: Ketika melakukan reverse engineering, Anda menganalisis bagaimana CPU memproses instruksi dari program (misalnya, bagaimana ia menghitung, membandingkan data, atau melompat ke bagian kode tertentu).
- Contoh: Saat debugging, Anda melihat instruksi assembly yang dijalankan CPU.
CPU itu seperti Koki di Dapur
Bayangkan:
- CPU = Koki yang melakukan semua perhitungan dan perintah.
- Program = Resep masakan yang harus diikuti koki.
Ketika kamu menjalankan program (misalnya ls di terminal), CPU membaca instruksinya langkah demi langkah dan menjalankannya.
Contoh Nyata di Linux
Kita akan pakai perintah strace untuk melihat instruksi sistem (system calls) yang dijalankan CPU saat sebuah program berjalan.
1. Jalankan Perintah Sederhana
Buka terminal, lalu ketik:
strace ls
Ini akan menampilkan semua instruksi yang CPU kerjakan saat menjalankan ls (contoh output):
execve("/usr/bin/ls", ["ls"], 0x7ffd... /* 23 vars */)
write(1, "file1.txt file2.txt\n", 20)
exit(0)
Apa Arti Output Ini?
execve(): CPU memuat programlske memory.write(): CPU menampilkan output (file1.txt file2.txt) ke terminal.exit(): CPU mengakhiri program.
Ini adalah “bahasa CPU” tingkat dasar!
2. Debugging dengan ltrace (Lebih Sederhana)
Jika strace terlalu rumit, coba ltrace untuk melihat fungsi library yang dipanggil:
ltrace ls
Output:
printf("file1.txt file2.txt\n") = 20
exit(0)
Di sini kamu lihat CPU menjalankan printf() untuk menampilkan teks.
3. Lihat Proses CPU dengan top
Jalankan:
top
Tekan q untuk keluar. Kamu akan melihat daftar program yang sedang CPU kerjakan, seperti:
PID USER %CPU COMMAND
1234 user 5.0 firefox
- %CPU: Persentase penggunaan CPU oleh program tersebut.
Apa Hubungannya dengan Reverse Engineering?
Ketika kamu reverse engineering, kamu ingin tahu:
- Instruksi apa yang CPU jalankan (contoh:
strace). - Bagaimana program berinteraksi dengan sistem (contoh:
ltrace).
Nanti kalau sudah terbiasa, baru masuk ke assembly (bahasa mesin CPU).
Summary untuk Pemula
- CPU = “Koki” yang menjalankan perintah.
- Gunakan
strace/ltraceuntuk melihat instruksi CPU. - Gunakan
topuntuk melihat beban CPU.
2. Memory (RAM - Random Access Memory)
- Apa itu? Tempat penyimpanan sementara untuk data dan instruksi yang sedang diproses.
- Fungsi dalam RE:
- Menyimpan kode program yang sedang berjalan.
- Menyimpan variabel/data yang digunakan program.
- Dalam RE, Anda memeriksa isi memory untuk menemukan password, kunci enkripsi, atau memodifikasi nilai variabel.
- Contoh: Tools seperti Cheat Engine memanipulasi nilai di memory untuk mengubah perilaku game/program.
1. Analogi Sederhana
- CPU = Koki yang memasak.
- RAM = Meja tempat koki menaruh bahan & alat yang sedang dipakai.
- Hard Disk = Lemari penyimpanan (untuk bahan yang tidak sedang dipakai).
2. Contoh Nyata di Linux
a. Melihat Penggunaan RAM
Jalankan di terminal:
free -h
Output:
total used free
Mem: 16G 5.2G 10G
Swap: 2G 0B 2G
- Mem: RAM fisik (16GB total, 5.2GB dipakai).
- Swap: RAM cadangan di hard disk.
b. Lihat Program yang Pakai RAM
top -o %MEM # Urutkan berdasarkan penggunaan RAM
Contoh output:
PID USER %MEM COMMAND
1234 user 15% chrome
5678 user 8% vscode
Artinya:
- Google Chrome pakai 15% RAM.
- VS Code pakai 8% RAM.
3. Reverse Engineering & RAM
Dalam RE, RAM adalah tempat kita:
- Mencari password (misalnya, game menyimpan nyawa player di RAM).
- Memodifikasi nilai (misalnya, mengganti “skor=100” jadi “skor=9999”).
Contoh dengan Cheat Engine (Windows):
- Buka game (misalnya Plants vs Zombies).
- Cari nilai “sun” (misalnya 50) di RAM.
- Ubah jadi 9999 → Nilai di game langsung berubah!
Di Linux, kita bisa pakai scanmem (versi sederhana Cheat Engine):
sudo apt install scanmem # Install dulu
scanmem /proc/[PID_game] # Ganti [PID_game] dengan ID proses game
4. Coba Modifikasi RAM Sederhana
Buat program C bernama contoh_ram.c:
#include <stdio.h>
int main() {
int nilai = 10;
printf("Nilai awal: %d\n", nilai);
printf("PID: %d\n", getpid()); // Cetak ID proses
while (1) { } // Program jalan terus
}
Langkah-langkah:
Kompilasi & jalankan:
gcc contoh_ram.c -o contoh_ram ./contoh_ramOutput:
Nilai awal: 10 PID: 12345 # Catat PID iniCari & Ubah Nilai di RAM (di terminal lain):
sudo scanmem 12345 # Ganti 12345 dengan PID programDi
scanmem:> 10 # Cari nilai "10" di RAM > list # Lihat alamat memory yang menyimpan 10 > [alamat] 9999 # Ganti nilai di alamat itu jadi 9999Lihat terminal program
contoh_ram→ Nilai berubah!
5. Visualisasi RAM dalam Program
Alamat RAM Nilai
0x7ffc1234 10 # Awalnya
0x7ffc1234 9999 # Setelah dimodifikasi
3. Disk (Storage: HDD/SSD)
- Apa itu? Penyimpanan permanen untuk program dan data (seperti file EXE, DLL, atau dokumen).
- Fungsi dalam RE:
- File di disk (misalnya, binary/executable) adalah target utama reverse engineering.
- Anda menganalisis bagaimana program disimpan di disk (struktur file, kode terkompilasi, dll.).
- Contoh: Tools seperti Ghidra atau IDA Pro membaca file EXE dari disk untuk dianalisis.
1. Disk vs RAM: Perbedaan Krusial
| RAM | Disk (HDD/SSD) |
|---|---|
| Penyimpanan sementara (volatile) | Penyimpanan permanen (non-volatile) |
| Akses cepat (CPU langsung baca) | Akses lambat |
| Contoh: Variabel program | Contoh: File EXE, DLL, dokumen |
Dalam RE:
- File di disk (seperti binary
lsatauchrome) adalah target analisis. - Kita bisa memodifikasi file di disk untuk mengubah perilaku program.
2. Analisis File Binary dengan radare2
Contoh Praktis: Kita akan analisis binary sederhana di Linux (bisa pakai /bin/ls atau buat program sendiri).
Langkah 1: Buat Program Sederhana
Buat file contoh_disk.c:
#include <stdio.h>
void greet() {
printf("Password: 12345\n"); // Target kita: temukan string ini di binary!
}
int main() {
greet();
return 0;
}
Kompilasi:
gcc contoh_disk.c -o contoh_disk
Langkah 2: Buka Binary dengan radare2
r2 -AAA ./contoh_disk # Buka file dengan analisis penuh
Perintah Dasar radare2
Cari Fungsi (
maindangreet)[0x00401050]> afl # List semua fungsi [0x00401050]> s main # Pindah ke fungsi main [0x00401050]> pdf # Disassemble fungsiOutput:
┌ 23: int main (); │ 0x00401112 55 push rbp │ 0x00401113 4889e5 mov rbp, rsp │ 0x00401116 e8d5ffffff call greet ; Panggil fungsi greet │ 0x0040111b b800000000 mov eax, 0 │ 0x00401120 5d pop rbp └ 0x00401121 c3 retCari String “Password”
[0x00401050]> iz # List semua string di binaryOutput:
vaddr=0x00402004 paddr=0x00002004 ordinal=000 sz=12 len=11 section=.rodata type=ascii string=Password: 12345Lihat Isi Disk (Hex View)
[0x00401050]> px @ 0x00402004 # Lihat data di alamat stringOutput (hexdump):
0x00402004 50 61 73 73 77 6f 72 64 3a 20 31 32 33 34 35 00 Password: 12345.Modifikasi Binary (Opsional)
Ganti string “12345” jadi “ABCDE”:[0x00401050]> wx ABCDE @ 0x0040200B # Overwrite di disk [0x00401050]> q # KeluarJalankan program:
./contoh_diskOutput:
Password: ABCDE # String berhasil diubah!
3. Visualisasi Struktur File di Disk
Binary `contoh_disk` di Disk:
┌─────────────────┐
│ Header (ELF) │ # Informasi metadata
├─────────────────┤
│ .text │ # Kode mesin (fungsi main, greet)
├─────────────────┤
│ .rodata │ # String "Password: 12345"
├─────────────────┤
│ ... │ # Section lain
└─────────────────┘
- radare2 membantu melihat/memodifikasi bagian ini.
4. Contoh Nyata: Analisis /bin/ls
r2 -AAA /bin/ls
- Cari fungsi
main:[0x00401050]> afl~main # Cari fungsi main [0x00401050]> s main # Pindah ke main [0x00401050]> pdf # Disassemble - Cari string (misalnya pesan error):
[0x00401050]> iz~cannot # Cari string "cannot"
5. Fungsi dalam Reverse Engineering
- Menganalisis malware (file binary mencurigakan).
- Memodifikasi program (crack license, bypass auth).
- Memahami struktur executable (ELF, PE).
4. Register
- Apa itu? Penyimpanan kecil super cepat di dalam CPU untuk memproses data secara langsung.
- Fungsi dalam RE:
- Register menyimpan nilai sementara saat CPU menjalankan instruksi (misalnya, hasil perhitungan atau alamat memory).
- Dalam assembly/RE, Anda sering melihat register seperti:
- EAX/RAX: Menyimpan hasil operasi.
- EIP/RIP: Menunjuk ke instruksi berikutnya yang akan dijalankan.
- Contoh: Saat debugging dengan x64dbg, Anda memantau perubahan register untuk memahami alur program.
Bayangkan register seperti meja kecil di depan koki (CPU):
- Hanya muat sedikit data (4-8 byte), tapi paling cepat diakses.
- Dipakai untuk operasi matematis, alamat memory, dll.
1. Jenis Register Penting
| Register | Fungsi | Contoh (x64) |
|---|---|---|
| RAX/EAX | Menyimpan hasil operasi (return value) | mov eax, 5 |
| RIP/EIP | Instruction Pointer (alamat instruksi berikutnya) | 0x401000 |
| RSP/ESP | Stack Pointer (alamat stack) | 0x7fffffff |
| RBX/EBX | Penyimpanan sementara | mov ebx, eax |
Catatan:
RAX(64-bit),EAX(32-bit),AX(16-bit),AH/AL(8-bit).- EIP/RIP sangat penting untuk kontrol alur program (misal: eksploitasi buffer overflow).
2. Contoh Nyata dengan gdb
Buat file contoh_register.c:
#include <stdio.h>
int main() {
int a = 5;
int b = 10;
int c = a + b; // Perhatikan register RAX/EAX!
return 0;
}
Langkah Debugging
Kompilasi dengan debug info:
gcc -g contoh_register.c -o contoh_registerBuka dengan
gdb:gdb ./contoh_registerSet Breakpoint dan lihat register:
(gdb) break main # Set breakpoint di main (gdb) run # Jalankan program (gdb) disassemble # Lihat assembly (gdb) info registers # Lihat semua register
Output Assembly
mov DWORD PTR [rbp-0x4], 0x5 ; a = 5
mov DWORD PTR [rbp-0x8], 0xa ; b = 10
mov eax, DWORD PTR [rbp-0x4] ; EAX = a
add eax, DWORD PTR [rbp-0x8] ; EAX += b (EAX = 15)
Monitor Register
- Sebelum
add, cekeax:(gdb) p $eax # Output: 5 - Setelah
add, cek lagi:(gdb) p $eax # Output: 15
3. Reverse Engineering dengan Register
- Memodifikasi RIP/EIP: Mengubah alur eksekusi program (misal: loncat ke fungsi rahasia).
- Membaca RAX/EAX: Mendapatkan hasil perhitungan (misal: hasil dekripsi password).
Contoh Game Hacking:
- Cari alamat nilai “nyawa player” di RAM.
- Trace instruksi yang mengubah nilai itu (misal:
sub eax, 1). - Ganti jadi
add eax, 100untuk cheat unlimited health!
4. Visualisasi Register
CPU
┌─────────────┐
│ RAX = 15 │ ← Hasil a + b
│ RIP = 0x40 │ ← Alamat instruksi berikutnya
│ RSP = 0x7f │ ← Alamat stack
└─────────────┘
5. Tools untuk Analisis Register
- Linux:
gdb(denganinfo registers). - Windows:
x64dbg/OllyDbg(tampilan GUI lebih mudah). - Radare2:
r2 -d ./contoh_register [0x00401050]> dr # Lihat register [0x00401050]> ds # Step instruksi
Kesimpulan
- Register adalah “tangan” CPU untuk memanipulasi data.
- EAX/RAX dan EIP/RIP paling sering dipantau saat RE.
- Latihan:
- Gunakan
gdbuntuk modifikasi nilai register (set $eax=100). - Coba ubah RIP untuk loncat ke fungsi lain (advanced).
- Gunakan
Tips:
- Pelajari assembly dasar (mov, add, jmp) untuk memahami register.
- Jika bingung, ulangi contoh
gdbdi atas!
Next: Gabungkan konsep CPU, RAM, Disk, dan Register untuk analisis binary lengkap! 🚀
Analog Sederhana untuk Pemula
Bayangkan komputer seperti tukang masak (CPU) yang:
- Mengambil resep dari buku masak (disk),
- Menyiapkan bahan di meja dapur (RAM),
- Mengolah bahan dengan tangan/alat kecil (register).
Dalam reverse engineering, Anda adalah orang yang:
- Membongkar resep (program) untuk melihat bagaimana ia bekerja,
- Memodifikasi bahan (memory/register) untuk mengubah hasil masakan (perilaku program).
Penting untuk Reverse Engineering
- CPU + Register: Memahami assembly language (bahasa mesin) untuk melacak eksekusi program.
- Memory: Mem-scan/memodifikasi nilai saat runtime (misalnya, bypassing license check).
- Disk: Menganalisis file binary/executable untuk menemukan vulnerability atau algoritma.
Mulailah dengan tools seperti Cheat Engine (memory editing) atau Ghidra (binary analysis) untuk mempraktikkan konsep ini!
© 2021-2025 HnvDie
Powered By Hugo ᯓᡣ𐭩