[CSAW CTF 2013] Impossible (Re500)

Ưu tiên viết bài này trước, vì đây là lần đầu tiên chạm tới ngưỡng 500 đầy danh giá, mà có lẽ sẽ mãi cho đến về sau cũng khó lặp lại được too_sad

Impossible – 500 Points

Solved by 82 teams.

WTF, his hp is over 9000! Beat the game to get your key.
impossible.nds

Link dự phòng:

Nội dung chính

Google tìm emulator để chạy thử, kiếm được DeSmuME, tuy nhiên thằng này rất tồi, phải kiếm thằng khác thay thế. Google tiếp và có được No$gba Debugger:

Chúng ta có trong tay một trò chơi kiểu bắn phi thuyền, thằng trùm có lượng máu cực khủng (theo đề bài nói thì trên 9000), và đạn nó bắn ra thì nhiều hơn mưa, dày đặc đến mức không thể né được (vậy mới đặt tên là Impossible emo_popo_sweat).

Mình mất rất nhiều thời gian cho bài này vì đi sai hướng, do đã bỏ qua phần quan trọng nhất đó là cửa sổ hiển thị log của debugger. Bởi vì, game này hoàn toàn không đưa cho chúng ta bất cứ goodboy, badboy, hay đại loại là những thứ kiểu kiểu như vậy ở trên màn hình, nên nếu ta cố ra sức mò, thì thực sự là dù có nhích cũng không bao giờ đến đích.

Sau một ngày thăng trầm với chuyện tình yêu tình báo, giận hờn vu vơ, được trở về với cái bình yên tĩnh lặng, sự tập trung cũng theo đó là kéo đến vây quanh. Ngay kể từ khi phát hiện ra cái cửa sổ bên dưới, niềm tin của mình đối với con số 500 chợt vụt cháy bùng bùng:

ADD ENT chính là log mỗi khi tạo thêm một viên đạn của thằng trùm xấu xa, và chỉ cần nó ngừng bắn, thì… nó thua.

Search trong memory chuỗi đó, thấy rằng nó ở địa chỉ 0x02023698:

Giờ thì chạy game, chuyển qua cửa sổ Disam, trace để tìm vị trí gọi đến ADD ENT. Sau vài phút lang thang phiêu bạt, phát hiện nó ở 0x0200282E:

Chúng ta sẽ đặt BP ở đó, quay về chơi game, nó sẽ dừng. Trace cho đến khi out khỏi hàm đó để xác định câu lệnh gọi đến nó, và ta làm gì? NOP thôi still_dreaming

Sẽ có một vài chỗ gọi chứ không phải một, nên lời khuyên là bạn đừng vội bỏ BP ở 0x0200282E. Patch hết rồi thì thoải mái mà chơi thôi, vì thằng trùm không còn đạn để bắn ta nữa:

Thanh màu nâu nâu đỏ đỏ hồng hồng ở trên cùng chính là máu của hắn, tuy nhiên nó quá nhiều, và dường như con số 9000 mà ta được thông báo là không chính xác emo_popo_doubt

Dùng một cheat engine bất kỳ (ở đây mình dùng Cheat Engine 6.3), dễ dàng search ra:

emo_popo_waaaht Vậy là những 1000000 chứ không phải chỉ xấp xỉ 9000 như chúng ta nghĩ lúc đầu emo_popo_sweat

Sửa nó về 100 (kinh nghiệm cheat game của mình cho thấy, không nên sửa về 0 ngay, tránh bug). Bắn thêm vài nhát xinh xinh và:

Nếu chụp lại cái key và đảo ngược nó theo chiều dọc, ta có thể thấy được chút chút:

Dường như là: KEY IS DUBZFGJCRC, tuy nhiên khi submit lại không đúng.

Trên trang chủ có một cái hint cho bài này, đại ý là “Bạn có chắc bạn đã tìm được toàn bộ key?”. Ok, search trong memory coi sao:

Done, flag = ou6UbzM8fgEjZQcRrcXKVN.

Điểm 500 đầu tiên trong sự nghiệp CTF emo_popo_beauty

One thought on “[CSAW CTF 2013] Impossible (Re500)

  1. Excellent post. I was checking continuously this blog and I am impressed!

    Extremely helpful info specially the last part :)
    I care for such information a lot. I was looking for
    this particular info for a very long time. Thank you and best of luck.

Leave a Reply

Your email address will not be published. Required fields are marked *