😈
ReverseMe
  • Introduction
  • References
  • ReverseMe
    • Introduction
      • What is Reverse Engineering?
      • Legality of Reverse Engineering
      • Reverse Engineering Communities
  • Programming Language
    • C
      • Basic
        • Pointer
        • Casting
      • Reference
        • stdio.h
          • fclose()
          • fopen()
          • fseek()
          • ftell()
          • fgetc()
          • fgets()
          • fread()
          • fprintf()
          • fwrite()
          • printf()
          • putchar()
          • puts()
          • sprintf()
          • snprintf()
        • stdlib.h
          • malloc()
          • calloc()
          • realloc()
          • free()
          • rand()
          • srand()
        • string.h
          • strcat()
          • strncat()
          • strcmp()
          • strncmp()
          • strcpy()
          • strncpy()
        • time.h
          • time()
  • Reversing Fundamentals
    • Stripped and Unstripped
  • Tools
    • file
    • strings
    • ltrace
    • ghidra
  • CTF Writeups
    • HackTheBox Challenges
      • Baby RE
      • You Cant C Me
  • ABOUT ME
    • Mail
    • LinkedIn
    • GitHub
Powered by GitBook
On this page
  • Apa itu Binary Stripped dan Unstripped?
  • Kapan Stripped Digunakan?
  • Contoh Perbedaan Binary Stripped dan Unstripped
  • 1. Membuat Program
  • 2. Kompilasi Program
  • 3. Perbandingan Hasil
  • 4. Ukuran File Binary
  1. Reversing Fundamentals

Stripped and Unstripped

Mengenal perbedaan binary stripped dan unstripped

PreviousReversing FundamentalsNextTools

Last updated 2 months ago

Saat melakukan analisis terhadap suatu binary, kita sering menemui istilah stripped dan unstripped (atau not stripped). Pada bagian ini, kita akan membahas dua istilah penting tersebut.

Apa itu Binary Stripped dan Unstripped?

Ketika melakukan reverse engineering, kita akan menganalisis binary, misalnya menggunakan perintah . Di sini kita akan ditampilkan informasi tentang binary tersebut, apakah stripped atau unstripped.

  1. Unstripped Binary Binary yang masih mengandung informasi tambahan seperti nama fungsi, nama variabel, simbol, dan informasi debug. Informasi ini memudahkan seorang reverse engineer karena bisa dengan mudah mengetahui nama fungsi dan struktur kode program.

  2. Stripped Binary Kebalikan dari unstripped. Binary ini sudah tidak mengandung informasi tambahan seperti nama fungsi atau variabel, simbol, serta informasi debug lainnya. Semuanya dihapus agar ukuran file lebih kecil dan sulit dipahami saat di-reverse engineering.

Analoginya seperti ini:

  • Unstripped: Seperti buku lengkap yang punya judul bab, daftar isi, nomor halaman, dan nama-nama tokoh yang jelas. Kita bisa dengan mudah menemukan bagian tertentu.

  • Stripped: Seperti buku yang semua judul bab, daftar isi, nomor halaman, dan nama tokohnya dihapus. Kita harus membaca perlahan untuk memahami alur cerita dan mencari tahu siapa tokohnya.

Kapan Stripped Digunakan?

Biasanya binary sengaja di strip dengan tujuan berikut:

  1. Mengurangi ukuran binary, sehingga lebih ringan saat distribusi.

  2. Menyulitkan proses analisis dan reverse engineering agar kode tidak mudah dipahami orang lain, sehingga lebih aman dari eksploitasi.

Contoh Perbedaan Binary Stripped dan Unstripped

1. Membuat Program

Berikut adalah kode program sederhana dalam bahasa C yang digunakan untuk perbandingan:

hello.c
#include <stdio.h>

void say_hello(char* name) {
    printf("Hello, %s!\n", name);
}

int main() {
    char name[50];

    printf("Enter your name: ");
    scanf("%49s", name);

    say_hello(name);

    return 0;
}

2. Kompilasi Program

Ada dua jenis cara mengompilasi program ini, yaitu unstripped (default) dan stripped (informasi simbol dihapus).

a. Unstripped Binary

Kompilasi biasa (tanpa opsi tambahan):

➜ gcc hello.c -o hello

➜ file hello  
hello: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b89a0ee9571dbbb24667a5232e95c4e210bca811, for GNU/Linux 3.2.0, not stripped

b. Stripped Binary

Ada dua cara melakukan stripping:

  1. Gunakan opsi -s saat kompilasi:

➜ gcc hello.c -o hello_stripped -s

➜ file hello_stripped 
hello_stripped: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=be4d294f666beefd209e4d776d1c9a89d8cc2d6d, for GNU/Linux 3.2.0, stripped
  1. Menggunakan perintah strip setelah kompilasi

➜ gcc hello.c -o hello_unstripped2

➜ strip hello_unstripped2 -o hello_stripped2

➜ file hello_stripped2 
hello_stripped2: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b89a0ee9571dbbb24667a5232e95c4e210bca811, for GNU/Linux 3.2.0, stripped

3. Perbandingan Hasil

Untuk membandingkan hasil antara binary unstripped dan stripped, kita gunakan perintah berikut:

a. Unstripped Binary

Kita cek apakah fungsi say_hello masih bisa dilihat:

# Unstripped binary
# Melihat daftar simbol dari suatu file menggunakan 'nm'
➜ nm hello | grep say_hello
0000000000001149 T say_hello

Bisa kita lihat, fungsi say_hello terlihat jelas.

b. Stripped

Jika binary sudah stripped, nama fungsi tersebut tidak akan muncul lagi:

# Stripped binary
➜ nm hello_stripped | grep say_hello
nm: hello_stripped: no symbols # Tidak akan ada output karena simbol dihapus

Dalam alat bantu seperti Ghidra atau IDA Pro, nama fungsi muncul sebagai alamat memori saja seperti FUN_00101173.

4. Ukuran File Binary

➜ ls -lh hello*
-rwxrwxr-x 1 kali kali 16K Mar  7 15:48 hello            # Unstripped (default)
-rw-rw-r-- 1 kali kali 216 Mar  7 15:48 hello.c          # source code
-rwxrwxr-x 1 kali kali 15K Mar  7 15:52 hello_stripped   # stripped
-rwxrwxr-x 1 kali kali 15K Mar  7 15:50 hello_stripped2  # stripped (alternatif)

Ukuran binary stripped lebih kecil karena semua informasi tambahan sudah dihapus.

file
Unstripped Binary pada Ghidra
Stripped Binary pada Ghidra