[RE] Mystery Zone

2025. 9. 1. 03:06·

Đề bài

Whoa, duuuudes! HelloWorld, righteous!
I was cruisin' the EXE lookin' for the flag when I totally got lost in this gnarly place, man . . . .
Gimme a ping and help me find that flag, little dudes! Cowabunga!

Dịch

Whoa, mấy anh em! HelloWorld, tuyệt đỉnh luôn!
Tôi đang lướt trong file EXE để tìm flag thì bị lạc vào một chỗ siêu quái đản, bro…
Ping tôi cái và giúp tôi tìm flag với, mấy nhóc! Cowabunga!

Detech It Easy

Sử dụng DIE để phân tích xem file Challenge.exe được code bằng gì

Được code bằng C++

Thử sử dụng Ghidra để đọc xem sao


Ghidra

Sau khi dùng Ghidra để mở file Challenge.exe thì tôi không thấy gì lắm, không có hàm nào đặc biệt, hàm main cũng không dẫn đến đâu nên tôi chuyển hướng phân tích


File

Mở hết tất cả các folder của đề cho ra thì tôi thấy có 1 file dll trông cũng khá sú là Assembly-CSharp.dll

Nhìn thì cũng có thể biết file này code bằng C# nhưng anh em cũng có thể dùng DIE để cho chắc cú

Được code bằng C#


dnSpy

Công cụ anh em sẽ dùng để đọc và chỉnh sửa file C# sẽ là dnSpy, IDA với Ghidra sẽ không có khả năng đọc và chỉnh sửa file C# mạnh như dnPsy

Sau khi tìm một hồi thì tôi thấy 1 class là Shellmove có hàm Update như sau

// Token: 0x06000004 RID: 4 RVA: 0x00002074 File Offset: 0x00000274 
private void Update() { 
    Vector3 position = base.gameObject.transform.position; 
    if (Input.GetKey(KeyCode.Delete)) 
    { 
        SceneManager.LoadScene("Main"); 
    } 
    if (this.Len(position) >= 50.0) 
    { 
        this.TransError(); 
    } 
    if (position == new Vector3(65535f, 65535f)) 
    { 
        this.TransFlag(); 
    } 
    if (!this.ismoving && this.canmove)
    { 
        Vector3 zero = Vector3.zero; 
        if (Input.GetKeyDown(KeyCode.W)) 
        { 
            zero = new Vector3(0f, this.grid); 
            this.walksound.Play();
        } 
        if (Input.GetKeyDown(KeyCode.S)) 
        { 
            zero = new Vector3(0f, -this.grid); 
            this.walksound.Play(); 
        } 
        if (Input.GetKeyDown(KeyCode.D)) 
        { 
            zero = new Vector3(this.grid, 0f); 
            this.walksound.Play(); 
        } 
        if (Input.GetKeyDown(KeyCode.A)) 
        { 
            zero = new Vector3(-this.grid, 0f); 
            this.walksound.Play(); 
        } 
        if (zero != Vector3.zero) 
        { 
            base.StartCoroutine(this.MoveSmooth(zero)); 
        }
    } 
}

Phân tích

Để phân tích chương trình này thì cũng khá đơn giản thôi

Đây là một đoạn script Unity (MonoBehaviour) gắn vào GameObject, xử lý cập nhật mỗi frame trong hàm Update() (Unity gọi hàm này tự động). Nó chịu trách nhiệm:

  • Reset lại scene nếu người chơi bấm Delete
  • Kiểm tra điều kiện đặc biệt (gọi hàm ẩn flag, error)
  • Điều khiển di chuyển nhân vật theo lưới (grid movement) bằng phím WASD

Đi sâu vào từng hàm thì sẽ như sau

  • Lấy ra vị trí hiện tại
Vector3 position = base.gameObject.transform.position;

Lưu tọa độ hiện tại của GameObject vào biến position
base.gameObject là GameObject chứa script này

  • Reset Game sau khi ấn Delete
if (Input.GetKey(KeyCode.Delete)) 
{ 
    SceneManager.LoadScene("Main"); 
}

Nếu người chơi nhấn phím Delete, thì load lại scene Main (reset game)

  • Kiểm tra tọa độ
if (this.Len(position) >= 50.0) 
{ 
    this.TransError(); 
}

Hàm Len(position) nhiều khả năng trả về độ dài vector / khoảng cách từ gốc (0,0,0)

Nếu đối tượng đi quá xa >= 50 đơn vị, gọi TransError() → Crash Game và phải chơi lại

  • Kiểm tra di chuyển
if (!this.ismoving && this.canmove)
    { 
        Vector3 zero = Vector3.zero; 
        if (Input.GetKeyDown(KeyCode.W)) 
        { 
            zero = new Vector3(0f, this.grid); 
            this.walksound.Play();
        } 
        if (Input.GetKeyDown(KeyCode.S)) 
        { 
            zero = new Vector3(0f, -this.grid); 
            this.walksound.Play(); 
        } 
        if (Input.GetKeyDown(KeyCode.D)) 
        { 
            zero = new Vector3(this.grid, 0f); 
            this.walksound.Play(); 
        } 
        if (Input.GetKeyDown(KeyCode.A)) 
        { 
            zero = new Vector3(-this.grid, 0f); 
            this.walksound.Play(); 
        } 
        if (zero != Vector3.zero) 
        { 
            base.StartCoroutine(this.MoveSmooth(zero)); 
        }
    } 

Kiểm tra các phím WASD các thứ và cộng vào tọa độ gốc

  • Gọi Flag
if (position == new Vector3(65535f, 65535f)) 
{ 
    this.TransFlag(); 
}

Có thể thấy nếu như chúng ta đến được vị trí (x, y) = (65535, 65535) thì có thể lấy được Flag


Chỉnh sửa

Ở bài này tôi sẽ sử dụng cách là chỉnh sửa trực tiếp vào chương trình, khiến cho nó gọi ngay ra Flag mà không cần chơi hay làm gì cả

Đơn giản là anh em sẽ chỉnh sửa hàm Update như sau

private void Update()
{
    this.TransFlag();
}

Như này thì khi mở chương trình lên nó sẽ gọi thẳng đến hàm TransFlag() và lấy được Flag


Flag

fwectf{K494ku_no_Ch1k4r4_t7e_5u63h!}

'WriteUp > RE' 카테고리의 다른 글

Square Cipher - BuckeyeCTF 2025  (0) 2025.11.09
Python 0bf  (0) 2025.11.02
[RE] Clockwork - EnigmaXplore 3.0  (0) 2025.10.20
[RE] S0urc3 - POC CTF 2025  (0) 2025.10.13
[RE] Dsp - POC CTF 2025  (0) 2025.10.13
'WriteUp/RE' Other posts in category
  • Python 0bf
  • [RE] Clockwork - EnigmaXplore 3.0
  • [RE] S0urc3 - POC CTF 2025
  • [RE] Dsp - POC CTF 2025
longhd
longhd
Longhd's Blog
  • longhd
    Ha Duy Long - InfosecPTIT
    longhd
  • Total
    Today
    Yesterday
  • About me

    • Hello I'm Duy Long 👋🏻
    • View all categories (117) N
      • Certificates (4)
      • CTF (3)
      • WriteUp (94) N
        • Forensics (44) N
        • Steganography (5)
        • RE (9) N
        • OSINT (8)
        • Web (17)
        • MISC (6)
        • Crypto (3)
        • Pwn (2)
      • Love Story (0)
      • Labs (15)
        • Information Gathering (10)
        • Vulnerability Scanning (2)
        • Introduction to Web Applica.. (1)
        • Common Web Application Atta.. (1)
        • SQL Injection Attacks (1)
  • Blog Menu

    • Home
    • Tag
    • GuestBook
  • Popular Posts

  • Tags

    Re
    picoCTF
    PTITCTF2025
    SunshineCTF2025
    Steganography
    BuckeyeCTF2025
    EnigmaXplore3.0
    THM
    misc
    Web
    CTF
    POCCTF2025
    Forensics
    CHH
    V1tCTF2025
    Dreamhack
    OSINT
    writeup
    CSCV2025
    htb
  • Recent Comments

  • Recent Posts

  • hELLO· Designed ByLong.v4.10.4
longhd
[RE] Mystery Zone
Go to Top

티스토리툴바