RPS

Bill Elim & Jayson Adrian


Diberikan sebuah service game rock paper scissor sederhana

Mari kita lihat source codenya:





Terdapat cukup banyak komponen disini, mari kita lihat beberapa kode yang penting

Jadi berdasarkan return value dari play(), apabila kita menang maka wins kita akan bertambah, apabila kalah maka wins nya akan di reset menjadi 0

Apabila wins kita >5, maka kita akan mendapatkan flagnya.
Mari kita lihat fungsi play()


Memahami kode tgetinput cukup sulit, jadi kita asumsikan saja hanya fungsi input biasa yang bisa menghitung timeout

Pada kode ini, kita bisa melihat logika gamenya sendiri. Sebelumnya terdapat 2 array, hands dan loses

Jadi misalnya hasil dari computer_turn adalah 0, berarti computer akan memainkan hands[0] yaitu rock, dan akan kalah oleh loses[0] yaitu paper, jadi kalau yang kita mainkan sama dengan loses[0], maka kita akan menang.

Namun perhatikan baik-baik fungsi yang digunakan untuk mengecek stringnya.

Ya, fungsi yang dipakai adalah strstr, berbeda dengan strcmp, strstr mencari substring dalam sebuah teks.

Jadi misalnya computer memainkan rock, kalau kita menginput “asdpaperasd”, maka kita masih tetap menang karena terdapat teks “paper” didalamnya.

Idenya adalah dengan menginput “rockpaperscissors”, dengan begitu apapun pilihan computer, substring lawannya masih tetap ada. Misalnya computer memainkan rock, maka terdapat string paper yang bisa melawan, atau kalau computer memainkan scissors, maka terdapat string rock yang bisa melawan.


Flag: picoCTF{50M3_3X7R3M3_1UCK_58F0F41B}


Thank you for reading!