Đề bài

Tóm tắt
Ta được cung cấp file disassembly chall.dis. Mã bytecode Python xây dựng một bảng CRC32, định nghĩa hàm zzz42(string) => int để tính CRC32 kiểu chuẩn (init 0xFFFFFFFF, bảng đa thức 0xEDB88320, dịch phải 8 bit mỗi vòng, cuối cùng đảo bit), rồi yêu cầu người chơi nhập 6 chuỗi sao cho giá trị CRC32 của từng chuỗi khớp với 6 số trong danh sách expected. Nếu cả 6 chuỗi đều khớp, chương trình in ra cờ
Phân tích bytecode
- Đa thức CRC: poly = 0xEDB88320 (3988292384)
- Sinh bảng 256 phần tử từ poly (vòng lặp 8 bit/byte)
- Hàm zzz42(string):
- value = 0xFFFFFFFF (khởi tạo)
- Với từng ký tự ch: value = (value >> 8) ^ table[(ord(ch) ^ value) & 0xFF]
- Trả về -1 - value → tức bitwise NOT của value, tương đương zlib.crc32(s) & 0xFFFFFFFF
- Danh sách cần khớp (expected) có 6 giá trị CRC32 (dạng unsigned 32-bit)
Danh sách CRC32 mục tiêu
| Thứ tự | CRC32 (hex) | CRC32 (dec) |
| 1 | 0x9581D07D | 2508312701 |
| 2 | 0x49629A97 | 1231198871 |
| 3 | 0x57D65259 | 1473663577 |
| 4 | 0x3CEAE297 | 1022026391 |
| 5 | 0xFEEE8227 | 4277043751 |
| 6 | 0x6464C2B0 | 1684325040 |
Tìm tiền ảnh (preimage)
Chiến lược:
- Brute force ngắn cho độ dài 1–2 ký tự ASCII để lọc ra trường hợp đặc biệt
- Dò từ điển/ đoán cụm từ tự nhiên từ hint đề bài (“Free flag for everyone.”) → rất phù hợp với cụm “how easy peasy is this ?”
- Kiểm tra CRC32 của từng từ khóa dự đoán bằng zlib.crc32 và so sánh với expected
Kết quả khớp 1–2 ký tự
- Ký tự '?' có CRC32 0x6464C2B0 → khớp mục tiêu #6
- Chuỗi 'is' có CRC32 0x3CEAE297 → khớp mục tiêu #4
Kiểm tra các từ dự đoán
- 'how' → 0x9581D07D → khớp mục tiêu #1
- 'easy' → 0x49629A97 → khớp mục tiêu #2
- 'peasy' → 0x57D65259 → khớp mục tiêu #3
- 'this' → 0xFEEE8227 → khớp mục tiêu #5
- '?' → 0x6464C2B0 → khớp mục tiêu #6
Lưu ý quan trọng: Ký tự cuối cùng thật sự là dấu hỏi ? (không phải placeholder). Điều này được chứng minh trực tiếp bằng CRC32: zlib.crc32(b'?') & 0xFFFFFFFF == 0x6464C2B0
Mapping cuối cùng
| Vị trí | Chuỗi | CRC32 (hex) |
| 1 | how | 0x9581D07D |
| 2 | easy | 0x49629A97 |
| 3 | peasy | 0x57D65259 |
| 4 | is | 0x3CEAE297 |
| 5 | this | 0xFEEE8227 |
| 6 | ? | 0x6464C2B0 |
Flag
Flag: FlagY{how_easy_peasy_is_this_?}
'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] Mystery Zone (0) | 2025.09.01 |
