Skip to content
Advanced Potion Making
📅 Apr 13, 2026

Advanced Potion Making

"Ron just found his own copy of advanced potion making, but its been corrupted by some kind of spell. Help him recover it!"


Advanced-potion-making¤

Đề bài¤

Bước 1: Xác định định dạng thông tin file¤

0

Hình 1. Nội dung Challenge

1

Hình 2. Tải file về

2

Hình 3. Xem thông tin file

3

Hình 4. Xem các byte bằng xxd

Bước 2: Xác định vấn đề¤

  • Magic bytes bị sai (4E 47 biến thành 42 11).
  • Chiều dài khối IHDR bị sai (00 00 00 0D biến thành 00 12 13 14).

Script sửa tự động:

brew_postion.py
with open("advanced-potion-making", "rb") as f:
data = list(f.read())

# Sửa Magic Bytes: 89 50 4E 47
data[2] = 0x4E
data[3] = 0x47

# Sửa IHDR Length: 00 00 00 0D
data[8] = 0x00
data[9] = 0x00
data[10] = 0x00
data[11] = 0x0D

with open("fixed.png", "wb") as f:
f.write(bytes(data))

4

Hình 5. Sửa các byte cho đúng định dạng

Bước 3: Thực hiện sau khi sửa¤

5

Hình 6. Sau khi sửa

Khắc phục

Sau khi sửa xong các header, ra được ảnh nhưng không có gì hết, có thể đã được ảnh giấu để tránh lộ thông tin, vì file này có khối IDAT khá lớn (binwalk tìm thấy Zlib tại 0x5B). Ta dùng dùng zsteg để tìm dữ liệu ẩn trong các bit LSB (Least Significant Bit)

6

Hình 7. Cài zsteg để xem các file bị ẩn

Cụ thể, nó tìm thấy một OpenPGP Secret Key (Khóa bí mật PGP) được giấu ở hai vị trí khác nhau trong cấu trúc pixel:

  1. b2,bgr,msb,xy: Bit thứ 2, kênh màu BGR, quét theo hàng ngang (xy).
  2. b5,g,lsb,xy: Bit thứ 5, kênh màu Green, quét theo hàng ngang. Em đã thử trích xuất mảnh ở b2,bgr,msb,xy trước nhưng chỉ chứa các byte rác và hầu như không thu được kết quả. Sau đó, có repo chứa tool stegsolve, giúp hỗ trợ giải mã

7

Hình 8. Cài đặt môi trường java

7.2

Hình 9. Dùng java stegsolve để giải

Flag¤

8

Hình 10. Flag

Result¤

9

Hình 11. Thành công
Flag
picoCTF{w1z4rdry}