Khoan hay nhắc đến tên đề bài này có nghĩa gì mà xem nó chạy ra cái gì.
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
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, ….
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]
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( )
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( )
Ở đâ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( )
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.
Flag: SECATHON{R3Vn33dZp4T23nc3}
Qua đây ta rút ra bài học: cần đọc kỹ đề trước khi làm bài.
TA THÙ CÁI BÀI NÀY VCL VÌ CÁI VZ ==”
ThíchThích