Reverse Engineering
Materi RE lebih lanjut ada di http://yohan.es/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.
Update: sekarang sudah ada Ghidra yang gratis dan bisa melakukan dekompilasi dengan baik.
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
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-2018 Yohanes Nugroho