# Hướng dẫn giải thử thách Transmutation

Dưới đây là bảng tóm tắt các bước khai thác dựa trên phân tích lỗ hổng ghi đè mã máy (Self-Modifying Code):

| Bước | Mục tiêu | Chi tiết kỹ thuật | Opcode / Giá trị |
| :--- | :--- | :--- | :--- |
| **1** | **Tạo vòng lặp ghi vô hạn** | Ghi đè lệnh `ret` ở cuối hàm `chall` để chương trình không kết thúc mà tự động chạy tiếp vào `main`. | Thay `0xc3` (ret) bằng `0x55` (push rbp) tại index `0x48`. |
| **2** | **Mở rộng phạm vi ghi** | Thay đổi giá trị giới hạn `LEN` trong lệnh `lea` để có thể ghi vào các vùng nhớ xa hơn. | Thay byte offset `0x26` bằng `0xff` tại index `0x1f`. |
| **3** | **Chèn Shellcode** | Tận dụng khả năng ghi vô hạn để chèn mã khai thác thực thi shell vào vùng nhớ trống. | Ghi Shellcode amd64 vào vùng nhớ sau hàm `chall` (khoảng index `0xba`). |
| **4** | **Kích hoạt Shellcode** | Thay đổi luồng thực thi cuối hàm `chall` để nhảy vào vùng chứa Shellcode vừa chèn. | Ghi lệnh `jmp` ngắn (`0xeb`) dẫn đến địa chỉ Shellcode. |

**Flag:** `bctf{CPU_0pt1m1z3r5_H4T3_th15_0n3_51mp13_tr1ck_5519225335}`
