Decription
File: https://mercury.picoctf.net/static/a6d9cac3bfa4935ceb50c145d3ff5586/keygenme-trial.py
Steps
- 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ếnkey_full_template_trial
. - 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ếnkey
) về độ dài. - 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:- Hàm
sha256
sẽ băm chuỗiusername_trial
dưới dạng SHA256, có giá trị gán cứng làPRITCHARD
. - Hàm
hexdigest
sẽ trả về chuỗi ký tự của kết quả sau khi băm.
- Hàm
- 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 trongkeygenme-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='')
- 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}