(Write-up) Reversing.Kr: Easy ELF

(Write-up) Reversing.Kr: Easy ELF

🤔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
notion image

💻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 đó:
notion image
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
notion image
Xem qua hàm sub_8048451() để xem cách nó hoạt động.
notion image
Ở đâ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_804A020byte_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"
notion image
Vậy key của bài này là L1NUX

Loading Comments...