cakemath (451 pts)
Diberikan source code dessert.py dan file output.txt. Untuk menyelesaikan soal ini, pertama-tama saya mencoba memahami apa yang dilakukan kodenya. Setelah beberapa waktu mengotak-atik kodenya, saya menemukan beberapa hal yang menarik.
Pertama-tama, baris kode berikut ini akan memberikan sebuah list berisi angka 0 atau 1 yang merupakan representasi binary dari flag. Oleh karena itu, untuk mendapatkan flag, dapat kita asumsikan bahwa kita perlu mencari string binary tersebut.
Kedua, hasil dari bittersweet tersebut digunakan untuk baris kode berikut ini. Karena nilai dari sugar itu hanya bisa berupa 0 atau 1, maka keluaran yang mungkin dari baris kode ini hanyalah (c_n2*(gc_c^2)) mod c_n1 atau (gc_c^2) mod c_n1 saja.
Ketiga, baris kode if math.gcd(gc_c, c_n1) == 1: memberitahu kita bahwa gc_c dan c_n1 adalah koprima. Di samping itu, apabila kita mencoba mengambil gcd(c_n1, c_n2), kita akan mendapatkan hasil angka 29. Sekarang, apabila kita mencoba mengambil dua kemungkinan untuk encrypted yang sebelumnya disebutkan, kemudian kita gcd()-kan dengan c_n1, kita akan mendapatkan 29 untuk text yang di-encrypt dengan (c_n2*(gc_c^2)) mod c_n1 dan 1 untuk text yang di-encrypt dengan (gc_c^2) mod c_n1.
Nah sekarang kita tinggal memprogram saja sesuai dengan nilai sugar awalnya. Untuk elemen di encrypted yang menghasilkan 29 akan kita return angka 1, dan untuk elemen yang menghasilkan 1 akan kita return angka 0.
Flag: NCW22{j4c0bi_symb0ls_101_w!th_c0mposit3_numbers}
Last updated