SECATHON 2018 – DecryptFile

Bài này không phải khó nhưng nó yêu cầu kinh nghiệm làm nhiều CTF.

Đề bài có 2 file: 1 file thực thi và 1 file đã bị mã hóa

Chạy file thực thi thấy sinh ra 1 file: file_dec tuy nhiên file này không chạy được

Dùng IDA để xem code của file thực thi:

Đầu tiên, Key được sinh ra bởi hàm sub_4010A0( ) có 32 ký tự (giống mã md5) và chuỗi tham số nhập vào sau đó được đưa vào hàm giải mã sub_4017D0( )

secathon2018_decfile_1.png

Đọc vào hàm sub_4010A0( ) thấy có các con số lớn và lạ. Google thì biết đây là mảng tạo của thuật toán MD5.

secathon2018_decfile_0.png

Tại hàm giải mã sub_4017D0( ), thực hiện đọc file “file” sau đó lấy ra 8800 bytes để giải mã bằng Key rồi lưu vào file “file_dec”.

Phương thức giải mã được hiểu đơn giản là lấy các ký tự đọc được từ “file” nếu khác 0 thì xor với ký tự của Key.

secathon2018_decfile_2.png

Vậy thì vấn đề ở đây là nhập vào gì để sinh ra Key giải mã file ra được một file có nghĩa.

Mở “file” bằng 101 Editor thấy có những vùng toàn ký tự ‘\0x00’ rất giống với cấu trúc một file PE. Chúng ta đặt giả thiết: Nếu như “file_dec” là một file PE thì sẽ có e_magic ở DOS_HEADER là “MZ” và có một đặc trưng DOS stub sẽ không đổi ở mọi file là:

secathon2018_decfile_3

Dựa vào giả thiết này, ta code thử xem sẽ giải mã ra gì:

secathon2018_decfile_4

Ta được mã “5c7ab41e37efc4e816ebfcbc70071aa2” nhưng khi decrypt bằng tool onlie thì không ra gì 😦

Và may mắn khi “file_dec” thật sự là một file PE nhưng chạy không được do lỗi config.

secathon2018_decfile_5.png

Mở “file_dec” bằng CFF explorer tìm đển Resource Editor để xem file cấu hình trong Configuration File thì nhìn thấy trong thư mục Bitmap có 1 ảnh bmp

secathon2018_decfile_6.png

Export file bitmap ra thì thấy ảnh này không đọc được ra gì cả. Mở file bằng 101Editor lên để xem. Đến đây nếu không kiên trì và thêm may mắn thì nhiều bạn sẽ bỏ cuộc và tìm hướng khác.

Dựa vào kinh nghiệm chơi CTF, ở phần kích thước của file, ta thay đổi thông tin của chiều dài và chiều rộng của ảnh thử xem có mang lại kết quả gì không. Thường thì sẽ là nhân chiều rộng với x thì sẽ chia chiều cao với x. Như vậy ảnh sẽ không bị lỗi. Thử tăng chiều rộng lên 2 lần và giảm chiều cao đi 2 lần thì thấy ảnh bắt đầu xuất hiện chữ nhưng chưa rõ ràng.

secathon2018_decfile_out.png

Tăng tiếp chiều rộng lên 2 lần và giảm chiều dài đi 2 lần nữa ta được flag 🙂

secathon2018_decfile_flag

 

 

 

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s