[Writeup] MATESCTF – LicenseChecker (Re500)

Đây là một hệ thống kiểm tra licence rất phức tạp 🙂
Nếu bạn tìm được licence đúng, bạn sẽ có cờ
P/s: Nếu cờ không có dạng matesctf{…}, bạn hãy thêm nó vào cờ
LicenceChecker.zip

Giải SV-ATTT năm trước, mình nhớ cũng có một bài Re dạng VM thế này. Nhưng cái VM đó chỉ chạy trong một hàm, nhận vào một số 32 bit và trả kết quả về True/False, nên…

25

Mình đọc nhiều writeup có liên quan đến VM, hầu hết đều dùng Pin hoặc dùng một trick nào đó, ngoại trừ có writeup của PiggyBird giải nào chẳng nhớ, Boston Key Party chăng, viết lại cái VM đó, rất văn minh. Mình ước một ngày mình có thể làm được như thế.

2

Thực nhòng mà nói, với bài này, việc hiểu hết các hàm hay viết lại VM là không cần thiết, cứ debug mãi cũng sẽ ra thôi (chắc ý đồ của BTC cũng là vậy, vì mình cho rằng để một bài như thế này vào một cuộc thi kéo dài 12 tiếng là vô cùng “quá đáng”)

Sau khi dựng được lại cái struct, kiểu kiểu thế này (tên thanh ghi là mình đặt bừa):

việc đọc các hàm sẽ đơn giản hơn rất nhiều. Mình code lại một cái bằng python như sau, nó chạy khá đúng (đẹp thì khó), mất mấy tiếng debug và fix code (có lẽ chọn ngôn ngữ khác thì tốt hơn):

matesctf.092015.re500.py

matesctf.092015.re500.code.hex

Phần 1

Mình sẽ demo một chút phần check key của target. Nó mở một file tên là license.drm:

Tạo file đó và nhập vào 123456789.

Ta thấy hàm fgetc được gọi 4 lần, mỗi lần đọc 1 byte từ file license.drm và lưu vào [edi]. Sau đó là bước kiểm tra từng ký tự:

mã giả

Điền lại key[0] = 0x1B + 0x30 = 0x4B, ta đến bước check ký tự thứ 2:

mã giả:

key[1] = 0x60 + 0x2B = 0x8B
Tương tự như vậy, ta có 4 ký tự đầu tiên là 4B 8B 04 ED.

28

Phần 2

mã giả:

Ta có thương của phép chia = 0x1385 => w1 = 0x1385 * 11 = 0xD6B7 => sửa 2 byte đầu của block 2 thành D6 B7.

Ta có thêm phần dư của phép chia = 6 => w1 = 0x1385 * 11 + 6 = 0xD6BD.
Tương tự vậy, 4 byte của block thứ 2 là D6 BD 06 5D.

Sau 4 block chính xác, chúng ta có flag:

 

6 Responses

  1. Quả thật quá hư cấu.

  2. Quốc Trung says:

    Cho mình hỏi “VM” bạn nhắc đến ở đây là gì v ạ

  3. Quang says:

    Bài CTF có VM tui thấy bài này cực kỳ ấn tượng luôn http://www.vnsecurity.net/ctf%20-%20clgt%20crew/2010/03/19/codegate-2010-challenge2-xbox-pwned.html

Comments are better than likes...

%d bloggers like this: