🤔Overview
Chall này là một file Linux. Khi chạy file này, chương trình sẽ yêu cầu người dùng nhập vào một chuỗi bất kỳ, chương trình sau đó sẽ kiểm tra và in ra kết quả trên màn hình
💻Problem
Để giải quyết bài này, chúng ta sẽ tìm hiểu cách mà chương trình hoạt động và tìm ra được chuỗi đúng (Cũng có thể chính là auth key của chall này).
🚩Let’s go
Mở chương trình trong IDA và tìm nơi thực hiện việc kiểm tra chuỗi nhập vào, và đây là đoạn code thực hiện việc đó:
Hàm sub_8048451 sẽ được gọi và lấy giá trị trả về để kiểm tra với 1, nếu đúng thì sẽ gọi tới hàm sub_80484F7() - Đây là hàm để in ra lời nhắn Correct
Xem qua hàm sub_8048451() để xem cách nó hoạt động.
Ở đây, chương trình sẽ so sánh các ký tự trong chuỗi nhập vào mới mã ascii, các biến byte_804A020 → byte_804A025 lần lượt là giá trị của các ký tự của chuỗi được nhập vào. Bên cạnh đó, một số ký tự bị XOR sau đó mới được đi so sánh. Bây giờ, chỉ cần tìm ra các ký tự này và nối chũng lại thành chuỗi là chúng ta đã tìm được auth key của bài này
auth_key = "" # byte_804A020 ^= 0x34 # byte_804A020 == 120 byte_804A020 = 120 ^ 0x34 # = 76 auth_key += chr(byte_804A020) # => auth_key[0] = 'L' byte_804A021 = 49 auth_key += chr(byte_804A021) # => auth_key[1] = '' # byte_804A022 ^= 0x32u # byte_804A022 != 124 byte_804A022 = 124 ^ 0x32 # = 78 auth_key += chr(byte_804A022) # => auth_key[2] = 'N' # byte_804A023 ^= 0x88u # byte_804A023 == -35 byte_804A023 = (256 - 35) ^ 0x88 # = 85 auth_key += chr(byte_804A023) # => auth_key[3] = 'U' # byte_804A024 != 88 byte_804A024 = 88 auth_key += chr(byte_804A024) # => auth_key[4] = 'X' print(auth_key) # auth_key = "L1NUX"
Vậy key của bài này là
L1NUX