Reverse Engineering

Reverse engineering merupakan topik paling menarik, tapi juga butuh waktu paling lama untuk belajar. Membaca kode biner bisa sangat membosankan apalagi ketika awal belajar (belum tahu di mana harus memulai).

Saran utama saya untuk belajar reverse engineering: buatlah program sendiri, compile, disassembler, lalu bongkar sendiri.

Cerita mengenai apa itu reverse engineering:

http://blog.compactbyte.com/2008/07/26/hacking-dan-reverse-engineering/

Cerita mengenai Flare On, di bagian penutup ada juga topik bagaimana memulai reverse engineering:

http://blog.compactbyte.com/2015/09/08/reverse-engineering/

Jenis Soal Reverse Engineering

Pada dasarnya 90% soal ini seperti mencari serial number untuk sebuah software. Ada dua jenis utama:

  • kita diminta memasukkan password/serial jika benar maka flag akan ditampilkan
  • kita diminta memasukkan flag untuk dicek apakah flagnya benar atau tidak

Contoh varian lain: kita diminta bermain game atau menebak sesuatu, jika benar maka kita akan diberi flagnya.

Untuk soal reversing yang sangat sederhana, komparasi dilakukan langsung terhadap string/password yang disimpan di program (paling sederhana, bisa dibreak dengan strings).

Pemeriksaan yang biasanya dilakukan adalah seperti ini:

  • Komparasi dengan string yang sudah dienkripsi
  • String dalam program didekrip lalu dibandingkan dengan yang menjadi input
  • String input dienkrip lalu dibandingkan dengan yang tersimpan dalam program
  • Melakukan pengecekan algoritmik, misalnya: jumlah 2 karakter pertama harus X, selisih dua karakter pertama harus Y

Ada banyak variasi untuk dua hal di atas. Biasanya yang saya lakukan adalah:

  • Mencari tahu apakah akan dilakukan komparasi di akhir (strcmp atau sejenis), jika ya, coba break di situ (atau gunakan preload)
  • Mencari tahu apakah perbandingan dilakukan per karakter (dan berhenti setelah karakter salah pertama), jika ya maka bisa dibruteforce menggunakan Intel PIN

Antidebug

Untuk windows, ada banyak sekali teknik antidebug yang bisa dipakai. Untuk linux, biasanya hanya teknik ptrace yang dipakai. Ada juga soal yang sengaja berjalan lama karena menggunakan sleep.

C

Kebanyakan peserta CTF akan menggunakan IDA Pro (bajakan), atau IDA Free (jika soalnya for Windows) untuk melakukan disassembly dan atau dekompilasi. Sebagai informasi, harga resmi IDA Pro sangat mahal (orde puluhan hingga ratusan juta) tapi software alternatif lain masih terlalu sulit dipakai.

Alternatif lain yang dapat dipakai adalah: Hopper (shareware, relatif murah), gdb, radare2 (powerful tapi kurang user friendly).

LD_PRELOAD

LD_PRELOAD memungkinkan kita meload library untuk mengganti behavior sebuah fungsi. Ada banyak kasus bisa diselesaikan dengan ini. Setelah diload ke memori, library kita juga bisa memanggil fungsi yang sudah ada di dalam program.

Patch Jump

Beberapa soal sederhana bisa diselesaikan dengan mempatch kebalikan instruksi misalnya jz menjadi jnz (atau sebaliknya). Jika hanya diperlukan sekali, IP/EIP/RIP bisa diset langsung dengan gdb

Android

Saya sudah membuat tulisan mengenai reverse engineering Android di sini:

http://yohan.es/security/android/

SMT Solver

Saya sendiri belum pernah memakai secara langsung untuk menyelesaikan soal CTF, tapi Z3 (atau SMT solver lain) bisa digunakan untuk menyelesaikan beberapa challenge reversing

https://gist.github.com/ancat/9316938

Contol soal

Baby Crackme (Pwnium 2014)

Soal reversing paling sederhana

http://blog.rentjong.net/2014/07/pwnium-2014-re10-baby-crackme.html

BabyCmd

Pengetahuan yang diperlukan: reversing (sangat basic) dan pengetahuan mengenai shell

https://github.com/rentjongteam/write-ups-2015/tree/master/def-con-quals-2015/babycmd

License

Soal RE sederhana, butuh pengetahuan dasar enkripsi XOR

https://github.com/rentjongteam/write-ups-2015/tree/master/asis-finals-2015/license

Access Control

Saya menggunakan trik LD_PRELOAD untuk menggunakan kode yang sudah ada dalam program

https://github.com/rentjongteam/write-ups-2015/tree/master/def-con-quals-2015/access-control

Keylead

Menggunakan GDB untuk bypass

http://blog.rentjong.net/2015/05/asis-ctf-2015-keylead-reverse-150.html

Sullivan Square

Reverse engineering Ruby bytecode

http://blog.rentjong.net/2015/03/boston-key-party-2015-sullivan-square.html

IDSecconf 2014 Hard Reversing

Scripting GDB

http://blog.rentjong.net/2014/11/idsecconf-online-2014-hard-reversing.html

IDSecconf 2014 Easy Reversing

Simple XOR

http://blog.rentjong.net/2014/11/idsecconf-offline-2014-easy-reversing.html

Guess the flag

Soal semi bruteforce yang menarik

http://blog.rentjong.net/2014/10/hacklu-ctf-2014-guess-flag.html

Kernel Land

Kadang kita tidak harus menjalankan kode di environment yang diminta

http://blog.rentjong.net/2014/07/pwnium-ctf2014-re150-kernel-land.html

Flare On 2015 Challenge 1

Menggunakan objdump saja untuk menyelesaikan soal

https://github.com/yohanes/write-ups/tree/master/flare-2015/flare1

Flare On 2015 Challenge 2

Menggunakan objdump + nasm

https://github.com/yohanes/write-ups/tree/master/flare-2015/flare2

Flare On 2015 Challenge 3

Tidak semua executable merupakan hasil kompilasi, kadang hanya packing dari batchfile, Python, maupun yang lain

https://github.com/yohanes/write-ups/tree/master/flare-2015/flare3

Flare On 2015 Challenge 4

Kadang bruteforce merupakan cara tercepat

https://github.com/yohanes/write-ups/tree/master/flare-2015/flare4

Flare On 2015 Challenge 6

Menggunakan LD_PRELOAD di Android

https://github.com/yohanes/write-ups/tree/master/flare-2015/flare6

Flare On 2015 Challenge 7

Reversing .NET

https://github.com/yohanes/write-ups/tree/master/flare-2015/flare7

Flare On 2015 Challenge 9

Menggunakan Intel PIN untuk menyelesaikan soal

https://github.com/yohanes/write-ups/tree/master/flare-2015/flare9

Flare On 2015 Challenge 10

Reversing yang rumit: file batch yang dipack dengan autoit, plus sebuah device driver windows.

https://github.com/yohanes/write-ups/tree/master/flare-2015/flare10

Flare On 2015 Challenge 11

Kadang tidak ada shortcut untuk reversing dan kita perlu memahami semuanya

https://github.com/yohanes/write-ups/blob/master/flare-2015/flare11

Ill Intentions

Reversing/patching Android

https://github.com/yohanes/write-ups/tree/master/google-ctf/mobile-ill-intentions

Copyright © 2009-2010 Yohanes Nugroho