Decription

File: https://mercury.picoctf.net/static/a6d9cac3bfa4935ceb50c145d3ff5586/keygenme-trial.py

Steps

  1. Phân tích từ trên xuống dưới, thấy rằng flag có dạng picoCTF{1n_7h3_|<3y_of_xxxxxxxx} và được lưu trong biến key_full_template_trial.
  2. Biến này được gọi trong hàm check_key và được so sánh với chuỗi ký tự người dùng nhập vào (biến key) về độ dài.
  3. Nhận thấy mỗi ký tự x trong chuỗi user nhập vào đều được so sánh với một ký tự của chuỗi được tạo ra từ hashlib.sha256(username_trial).hexdigest. Với:
    1. Hàm sha256 sẽ băm chuỗi username_trial dưới dạng SHA256, có giá trị gán cứng là PRITCHARD.
    2. Hàm hexdigest sẽ trả về chuỗi ký tự của kết quả sau khi băm.
  4. Do hàm băm có tính chất là cùng input thì sẽ cho ra một output, ta viết một đoạn code nhỏ lại để lấy ra giá trị của hàm băm từ PRITCHARD theo thứ tự index được gán cứng trong keygenme-trial.py như sau:
import hashlib
 
hash = hashlib.sha256(b'PRITCHARD').hexdigest()
index = [4,5,3,6,2,7,1,8]
 
print('picoCTF{1n_7h3_|<3y_of_',end='')
for i in index:
    print(hash[i], end='')
print('}',end='')
  1. Chạy script và có được cờ.

Attention

Cần lưu ý là các chức năng khác của file là để gây nhiễu.

Flag

Success

picoCTF{1n_7h3_|<3y_of_54ef6292}