CSAW CTF 2017 – RE – Tablez 100 points

Nhìn qua

Mở file bằng IDA ta thấy được cấu trúc chương trình khá đơn giản. Vẫn có khối nhập password, khối kiểm tra và khổi đưa ra kết quả.

csaw2017-tablez-1.png

Phân tích

  • Xâu s2 được khởi tạo với giá trị không đổi và có những giá trị không thuộc mã ASCII
  • Xâu s được nhập vào gồm 37 ký tự = len(s2)
  • Xâu s được xử lý qua hàm get_tbl_entry()
  • Xâu s được so sánh s2
  • Nếu đúng => Correct, nếu sai => Wrong

Phân tích hàm get_tbl_entry() ta thấy ngay cách chuyển đổi như sau:

csaw2017-tablez-2

Các ký tự của s được đưa vào so sánh với các phần tử chẵn của mảng trans_tbl[]. Nếu giống nhau thì sẽ trả về giá trị của phần tử lẻ của trans_tbl[] ( trong hình trên thì byte_201281 là  địa chỉ phần tử lẻ đầu tiên của tran_tbl[])Nếu không có giá trị nào giống nhau thì sẽ trả về 0 ( kết thúc xâu ).

Nhận thấy mảng trans_tbl[] gồm các phần tử chắn là các mã ASCII và các phần tử lẻ là các mã hex khác. Nghĩa là quá trình biến đổi xem mảng trans_tbl[] như một bảng ánh xạ các giá trị trong bảng mã ASCII với các giá trị hex khác. Việc tìm ra flag bây giờ là ánh xạ ngược lại các giá trị trong s2 thành các giá  trị trong bảng mã ASCII.

Ta viết code ánh xạ ngược để tìm ra flag 🙂

 

csaw2017-tablez-3

Flag: flag{t4ble_l00kups_ar3_b3tter_f0r_m3}

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: