SECATHON 2018 – RVZT

Khoan hay nhắc đến tên đề bài này có nghĩa gì mà xem nó chạy ra cái gì.

secathon2018_RVZT_0

Chúng ta đi vào phân tích file ELF này qua IDA đã xem nó là gì. Flag được lưu trong mảng ptr

secathon2018_RVZT_1.png

Sau khi nhập liệu vào ptr, thực hiện một chuỗi các hàm kiểm tra với Flag. Đầu tiên Flag phải có 26 ký tự.

Hàm tạm đặt tên là Validate() sẽ kiểm tra giá trị một số ký tự thỏa mã các điều kiện như: Là chữ số, là chữ cái, là chữ viết thường, ….

secathon2018_RVZT_2.png

          Ta suy ra:

          Ptr[0->7] là chữ cái                                     Ptr[8] ko phải số hoặc chữ

          Ptr[9] là chữ hoa                                         Ptr[10] là chữ số

          Ptr[11] là chữ hoa                                       Ptr[12] là chữ cái

          Ptr[13] là chữ số                                         Prt[14] là chữ số

          Ptr[15] là chữ cái                                        Ptr[16] là chữ hoa

          Ptr[17] là chữ cái                                        Ptr[18] là chữ số

          Ptr[19] là chữ hoa                                       Ptr[20] là chữ số

          Ptr[21] là chữ số

          Ta gọi đây là điều kiện (1)

Sau đó là hàm W7G( ) kiểm tra ptr[10], ptr[12]

secathon2018_RVZT_3.png

Vì đây là hàm kiểm tra các phần tử nên ta dễ dàng viết brute force để tìm ra

          Suy ra Prt[10] = ‘3’ ; Ptr[12] = ‘n’

          Ta gọi là điều kiện (2)

Tiếp theo là hàm ZS1DDAW2B( )

secathon2018_RVZT_4.png

          Suy ra:

          Ptr[10] = Ptr[13] = Ptr[14] = Ptr[21] = Ptr[24]

          Ptr[12] = Ptr[22]

          Ta gọi là điều kiện (3)

Hàm ABWW7U9LE( )

secathon2018_RVZT_5.png

Ở đây sử dụng hàm NOIBSA5() để kiểm tra từng ký tự Ptr[15], Ptr[17], Ptr[18], Ptr[20], Ptr[23]

Trong đó hàm NOIBSA5( )

          secathon2018_RVZT_6.png

Tiếp tục brute force để tim ra các ký tự này:

          => Ptr[15] = d; Ptr[17] = p; Ptr[18] = 4;  Ptr[20] = 1; Ptr[23] = c

          Ta gọi là điều kiện (4)

Từ (1), (2), (3) và (4) ta có:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
S E C A T H O N { 3 n 3 3 d p 4 1 3 n c 3 }

Vậy là còn 4 vị trí nữa chưa xuất hiện trong phần kiểm tra ở trên mà sẽ được kiểm tra bằng hàm CRC32( ). Thực tế mình không thể tìm thấy hàm tương tự với 3 tham số như trong bài để brute force được nên cả buổi chiều giải không ra.

Trong hàm main( ) có đoạn kiểm tra Ptr[9] và Ptr[11] nên đã giới hạn được 1 phần:

          P<= Ptr[9], Ptr[11] << Z

Đây chính là lúc ta nhìn lại đề bài: Đề bài gồm 4 chữ cái viết hoa không có nghĩa gì “RVZT”. Và vấn đề bài toán còn 4 ký tự chưa biết. Thử thêm lần lượt các ký tự đề bài vào và kiểm tra.

secathon2018_RVZT_7.png

Flag: SECATHON{R3Vn33dZp4T23nc3}

Qua đây ta rút ra bài học: cần đọc kỹ đề trước khi làm bài.

Một bình luận về “SECATHON 2018 – RVZT”

Trả lời

Điền thông tin vào ô dưới đây hoặc nhấn 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 )

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

%d người thích bài này: