Reverse Engineering
crac (475 pts)
Description
-
Solution
Diberikan file elf 64 bit , selanjutnya kami decompile file tersebut
Terlihat bahwa terdapat pengecekan untuk input secara incremental , jadi mulai dari 1 byte , 2 byte, 3 byte, dst. Untuk crac sendiri merupakan fungsi hash ( modified crc32 ) . Jadi disini kita bisa melakukan brute per 1 byte , dengan cara membandingkan hasil hash karakter 1 byte ditambah dengan jumlah hash sebelumnya. Berikut solver yang kami gunakan
Flag : CJ2021{this_one_should_be_easy_enough_right}
Waze (951 pts)
Description
-
Solution
Diberikan akses ke suatu website yang merupakan web assembly.
Terlihat bahwa kita diharuskan mencapai finish dengan koordinat 126,127 dengan koordinat start 1,0. Pada setiap langkah terdapat pengecekan valid move , fungsi ini bisa kita gunakan untuk memetakan block pada maze. Selanjutnya tinggal implement bfs untuk mendapatkan shortest path first menuju koordinat finish. Berikut script yang kami gunakan untuk melakukan mapping terhadap maze.
Sebelumnya decompile dulu wasm dengan wasm2c.
Selanjutnya tinggal menerapkan bfs untuk mendapatkan shortest path first
Terakhir , untuk mendapatkan flag kami melakukan perubahan pada index.js , yaitu dengan memasukkan payload dari script sebelumnya.
Tekan key random untuk mentrigger looping , kemudian diakhir tekan βsβ untuk mendapatkan flag.
Flag : CJ2021{web_assembly_will_always_a-maze-d_me}
goba (997 pts)
Description
-
Solution
Diberikan file gba , disini kami melakukan decompile menggunakan ghidra dengan bantuan ghidragba. Cukup stuck lama karena mengira bahwa cheat yang dimaksud adalah melakukan patching, ternyata setelah melihat pada fungsi lain kami menemukan ada semacam cheat yang sudah disediakan dari gbanya :) ( fungsi FUN_080001b4 ).
Disini ada 2 cara , melakukan mapping keyinput ( harus cepat mengetiknya sepertinya ) , yang kedua adalah mencari nilai DAT_03007b74 dan mendapatkan flagnya. Diawal saya coba melakukan mapping , tapi seperti yang saya bilang sebelumnya sepertinya harus cepat mengetikkan cheatnya agar bisa menghasilkan flag, karena input panjang jadinya gagal deh. Berikut script mapping yang kami gunakan.
Selanjutnya cara kedua, ini ngeselin , karena sudah kelelahan akhirnya yang harusnya 0x7fff saya tulis 0x7ffff , debugging lama karena bingung salahnya dimana hingga akhirnya sadar. Untuk value DAT_03007b74 sendiri bisa menggunakan memory viewer untuk mendapatkannya.
Value initial dari DAT_03007b74 adalah 0x1337. Selanjutnya tinggal generate flag, berikut script yang kami gunakan. Sebelumnya ada miss juga di value 0x14 yang saya tulis 0x1 , kesalahan waktu parsing data.
Flag : CJ2021{in_reversing_cheating_is_always_an_option}
math (1000 pts)
Description
-
Solution
Diberikan file haskell, diawal tidak bisa menjalankan karena tidak ada libdary libffi.so.6 , disini saya mendownload libffi.so.6 dari repo ubuntu 19 ( os saya ubuntu 20 )
http://mirrors.kernel.org/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
Diawal berusaha decompile dengan IDA namun stuck , akhirnya kami menemukan hsdecomp ( https://github.com/gereeter/hsdecomp ) . Jadi lakukan decompile dengan hsdecomp tersebut
Selanjutnya tinggal rapikan dan didapatkan hasil perapian sebagai berikut
Terlihat bahwa untuk masing-masing operasi pernghubungnya adalah + jadi lakukan penggabunngan dengan + , kemudian diakhir ada operasi mod dengan 251. Selanjutnya karena terlihat berbentuk polynomial jadi tinggal lakukan translate dengan memasukkan nilai rtv_info_arg_0 dari 0 sampai 92.
Flag : CJ2021{how_can_haskell_not_be_the_programming_language_that_all_mathematicians_should_learn}
Last updated