Professional Documents
Culture Documents
Rev 01
Rev 01
Hình 1.
Chương trình nhận vào tên và một số bất kỳ từ người dùng và sẽ trả về flag (có lẽ)
nếu nhập đúng số trong khoảng 1 – 9999.
Kiểm tra thông tin file thì đây là một file thực thi 32bit và có dùng tới TLS:
Hình 2.
2
Bài thực hành số xx: Tên bài thực hành
Hình 3.
Hình 4.
Đầu tiên TLS này sẽ kiểm tra xem chương trình có đang bị debug hay không. Nếu
có thì biến v5 sẽ được gán thành “input+1234” ngược lại thì “input + 20”.
Hình 5.
Sau lần kiểm tra đầu tiên, TLS sẽ được gọi lần nữa để tiếp tục kiểm tra và lần này
input sẽ bị trừ đi 222 nếu có debug và cộng 2 nếu không. Chú ý tới biến result thì giá trị
này được khởi tạo là 1. Sau lần gọi đầu thì result được gán bằng kết quả của hàm
NtQueryInformationProcess(), nên vòng lặp phía dưới sẽ được thực thi.
Kiểm tra hàm main(), ta thấy rằng:
Hình 6.
Hàm main nhận giá trị đầu vào là v12 được gán vào v5.
Hình 7.
Sau đó thực hiện xor dãy flag với 51 kí tự với giá trị đầu vào là v5. Sau khi xor cờ
thì mới thực hiện kiểm tra xem v5 nhập vào có khớp với giá trị có sẵn hay không và trả
ra flag đã được giải mã.
Kiểm tra thì ta thấy giá trị input ban đầu trong TLS là “7D0” tương đương 2000:
Hình 8.
Hình 9.
Sau khi nhập giá trị đầu vào là 2022, đặt break point tại lệnh so sánh giá trị đầu vào
sau khi thực hiện TLS check:
Hình 10.
Tiến hành set IP để chương trình rẽ vào nhánh message box trả về flag:
Hình 11.
Sau đó jump vào chương trình ở địa chỉ 01091245 để lấy flag:
Flag: KSCS{1f_U_d0nt_Und3r5t4nt_4b0ut_TLS_C4llback_Y0u_L053}.