Crack Me

Yêu cầu đề bài:

  • Chúng ta sẽ nhập đúng số mà game yêu cầu. Mỗi số đúng game sẽ cho ra 1 ký tự của fake flag
  • Khi có đủ 17 ký tự của fake flag thì dùng chức năng check flag để kiểm tra số điểm của chúng ta hiện tại nếu thỏa sẽ có flag trả về

Dịch ngược mã nguồn tí:

  • Fake flag là các ký tự chữ cái được random ngẫu nhiên
  • Hàm check số nhập vào (loc_4010C4): dùng data đã được random sẵn ở address 0x602360 và 0x602370 và dữ liệu có sẵn tại 0x401720 để tính ra 17 số guess ở mỗi lượt.
  • Khi hết 17 số ở mỗi lượt thì sẽ có giá trị mới được thay thế ở 0x602360 và 0x602370

Okie bây giờ nói hướng giải của mình: đoán đúng số tiếp theo để nhận được flag. How??

  • Đoạn random ra 2 giá trị ở 0x602360 và 0x602370 sử dụng seed ko phải time chúng ta có thể brute các giá trị seed có thể có và lấy được dữ liệu sẽ được random cấn thiết

Okie code thôi:

  • Dựa theo cách tính seed mình có thể thấy max value của seed khoảng 1048559
  • Sau khi có hết các giá trị random ta tính hết các giá trị sẽ cần guess ứng với dữ liệu random đó.
  • Code (file init.bin là 272 bytes dump từ 0x401720 để tính guess number):

Có database rồi chúng ra chỉ việc connect đến server rồi nhập sai lần đầu để leak số đầu tiên rồi dò trong file để được các số còn lại. Trường hợp tốt nhất thì hết lần 1 mình sẽ có được 16 ký tự của fake flag. Sau đó game sẽ random lại và ta lại nhập sai 1 lần để lấy số đầu tiên của 17 số mới

Cảm ơn mọi người đã dành thời gian đọc 😀

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s