Reverse Engineering
Last updated
Last updated
Yggdarsil (656 Pts)
Goliath (699 Pts)
-
Diberikan file mach-o , jadi kami coba jalankan terlebih dahulu menggunakan vm mac-os.
Selanjutnya kita coba lakukan decompile terhadap file tersebut.
Terlihat bahwa program tersebut dibuat menggunakan rust , pada fungsi main terdapat fungsi untuk memanggil webview , jadi bisa kita simpulkan dari hasil eksekusi dan static analysis bahwa program tersebut melakukan load terhadap web. Ada 2 kemungkinan disini , web bisa online atau di store di program itu sendiri, jadi lakukan string untuk melihat string apa aja yang disimpan oleh program.
Terlihat terdapat kode html ,lakukan search pada “Incorrect!”
Dapat dilihat pada potongan kode diatas bahwa terdapat pengecekan terhadap hasil encrypt dari input kita.
Berikut adalah kode dari fungsi doEncrypt
Fungsi tersebut menjalankan fungsi billstclair$elm_crypto_string$Crypto$Strings$encrypt dan salah satu argumen juga menjalankan suatu fungsi $elm$random$Random$initialSeed. Jadi tinggal search aja untuk kedua fungsi tersebut dan didapatkan informasi bahwa kode tersebut dibuat menggunakan elm-lang dan fungsi encrypt diambil dari salah satu library yang ada pada elm-lang
Lakukan install terhadap elm-lang dan juga librarynya , lalu coba fungsinya ( lakukan encrypt decrypt ).
Karena sudah bisa encrypt decrypt maka kita coba lakukan decrypt terhadap ct yang dibandingkan dengan hasil encrypt input kita.
Karena sudah memiliki key dan ct maka lakukan decrypt
Flag : CJ2021{a_delightful_flag_for_reliable_reverser}
-
Diberikan file ELF 64-bit , kalau diliat dari strings program tersebut dibuat menggunakan rust
Selanjutnya kita coba jalankan file tersebut dan ada yang aneh , yaitu keluar encrypted tapi telat ( sepertinya program lain ) dan hasil md5sum berubah
Maka dari itu kami coba lakukan static analysis dan dynamic analysis.
Pertama kita tahu bahwa goliath berubah , berarti terdapat open terhadap file goliath . Dapat dipastikan ketika kita ubah nama filenya maka akan error
Cek fungsi open dan liat reference terhadap fungsi tersebut
Hanya dipanggil difungsi main dan sepertinya bisa kita skip
Selanjutnya cek fungsi open64
Terlihat bahwa dipanggil oleh beberapa fungsi , jadi kita keep informasi ini. Berdasarkan informasi sebelumnya kita ketahui bahwa ada perubahan terhadap file dengan nama goliath , jadi kita search string goliath.
Didapatkan string goliath juga diload di fungsi sub_8CAC , maka selanjutnya analisis fungsi sub_8CAC.
Disini kami melakukan analisis beberapa fungsi secara dynamic , adapun berikut untuk beberapa address penting yang kami catat.
Jadi untuk fungsi ptrace kita bypass , caranya adalah dengan mengubah nilai ecx menjadi 6
Selanjutnya akan dilakukan xor value yang ada dimemory $rbp+$rdi dan $r14+$rbx
Jadi kita lakukan dump terhadap nilai pada address tersebut, adapun untuk panjangnya kita ketahui dari perbandingan nilai rbx dan r12
Berikut untuk dumpnya
Selanjutnya tinggal lakukan xor dan cek hasil dari xor tersebut.
Ternyata file gzip , jadi ubah extensi jadi gz lalu lakukan extract.
Didapatkan file out yang merupakan file ELF64 bit
Yang mana ketika kita jalankan akan menghasilkan output seperti yang diawal tadi
Jadi selanjutnya langsung decompile file tersebut
Terlihat bahwa program melakukan request terhadap suatu gist lalu melakukan sha256 dan enkripsi aes. Karena terlihat terdapat format flag maka kemungkinan yang di encrypt adalah flag , jadi lakukan breakpoint pada pemanggilan fungsi main_Ase256 agar tahu value dari argumentnya (flag).
Adapun berikut breakpoint yang kami set sebelumnya untuk melakukan analisis pada binary tersebut
Flag : CJ2021{eaca9080fa4c6a8bca426dc205e73d96a5e5814fdef8aa7ef0f219c6ba761fb3}