[Sharif University CTF Quals 2013] one Line encoder For Specialist pRogrammer (crypto200)

 

Có thể để ý ngay những chữ viết hoa trong tên bài, nó là LFSR, nhưng kệ boss

Nội dung chính

Ở bài này, chúng ta có một hàm encode, đầu vào là một xâu text và một khóa key. Dựa vào kết quả trả về của hàm len(key) và set(key), ta biết được 2 thông tin:

  • Key dài 9 ký tự.
  • Key chỉ chứa ‘0‘ và ‘1‘.

Như vậy, mình tin chắc rằng mình sẽ làm được, với lựa chọn cho bước đường cùng là brute key để submit. Kế hoạch cụ thể mình đã có, đó là submit từng key cách nhau 10s, tức 1 phút được 6 key, một giờ được 360 key, khoảng 2h sẽ xong. Nếu vẫn bị BTC phát hiện thì đẩy interval lên và cắm máy qua đêm sexy_girl

Tà đạo đã xong, giờ là chính đạo. Tiến hành viết lại cái hàm encode của họ như sau (nói thật là mình mất không hề ít thời gian để đọc về lambda, map và reduce, vì dù nó đơn giản thật nhưng khi áp dụng vào bài cho thì mình lại hơi bị loạn, khá ức chế):

Có thể thấy thuật toán mã hóa là rất đơn giản, byte-to-byte bằng phép toán XOR huyền thoại. Chúng ta viết hàm decode như sau:

và tiến hành brute để tìm key:

Output chỉ cho ra một giá trị duy nhất khả quan (thì tất nhiên là vậy rồi emo_popo_sweat):

flag = md5(key) = d2fa68bb166dde1c720bd0c8fd665bae.

Leave a Reply

Your email address will not be published. Required fields are marked *