Diberikan file PE yang dibuat dengan golang. Disini kami membukanya menggunakan IDA. Kita perlu menginputkan value yang sesuai sebanyak 3 kali. Pertama username, password, lalu OTP.
Untuk username algoritmanya dapat dilihat diatas, intinya kita bisa lakukan leak terhadap value dari xor dan mendapatkan value input yang sesuai.
Leak value rdx pada 0x5152c5 dan qword ptr [rsp+rcx*8+4F8h+var_3F0] pada 0x5152bd. Lakukan xor dapat value username yang sesuai.
Selanjutnya password, namun disini ada beberapa sleep yang tidak berhubungan dengan password/flag jadi bisa kita patch supaya tidak dijalankan fungsi sleep sebenarnya.
Caranya dengan mengubah jle menjadi jnz pada 0x4db203 .
Untuk value password tinggal dapatkan semua static value lalu gunakan z3. Berikut script yang kami gunakan
Leak value rax setelah pemanggilan fungsi rand lalu kurangkan dengan main_minran.
Flag : NCW22{1t_1sNT_JU5t_4n_0TP_C0d3_155351}
⚡ Ragnarok (500 pts)
Description
-
Solution
Diberikan file PE yang dipack , karena disini kami tidak tahu packer yang digunakan jadi debug saja. Set breakpoint pada akhir pemanggilan fungsi yang melakukan jump pada suatu address
Step over dan nanti akan ketemu dengan pemanggilan suatu fungsi
Selanjutnya step into
Sampai disini kita sudah masuk ke hasil unpacknya (program aslinya). Selanjutnya lakukan analisis dan kami mendapatkan fungsi pengecekannya yaitu pada sub_7FF6BF631A57
Intinya kita disuruh menginputkan 24 bytes value. Nantinya 24 bytes value tersebut akan dioperasikan dan operasinya berbasis VM (hardcode).
Untuk mempermudah disini kami membuat assemblernya namun pertama kami perlu lakukan leak terhadap bytecode VM nya terlebih dahulu.
Copya value pada address 0000021F0B3924B0 sampai 0000021F0B392520 (bytecode VM). Berikut assembler yang kami buat