Trước khi vào bài thì mình sẽ để các công cụ và trang web giúp mình giải bài này:
- bless, hexeditor : phần mềm xem và chỉnh sửa hex trên linux
- python3
- exiftool
- Decimal to text: Decode Unicode code points to text - cryptii dec decode.
- List of file signatures - Wikipedia . xem chữ kí của file
- Hex to file (binary) converter (tomeko.net) hex to file
Vào bài.
Như những bài khác thì mình có dùng qua tất cả các công cụ có thể để mò mẫm mọi thông tin từ hình ảnh.
Từ exiftool ta thấy được một dòng commnet:
y0u_c4n_n0t_cr4ck_th1s_f1l3_w1th_th3_d3f4ut_w0rdl1st_0n_k4l1
Và từ pngcheck
Tới đây thì mã hex 00 4e 00 47 có vẫn đề nên mình dùng bless để xem mã hex
Tìm kiếm mã hex 00 4e 00 47 thì mình thấy vấn đề ngay
Có một hình ảnh khác trong hình ảnh.
Nhưng chữ kí của hình ảnh này bị sai mã Hex
Hình ảnh png chữ kí là 89 50 4e 47
Theo như hình ảnh thì hình ảnh này được chèn 00 ở giữa mỗi hex
Kiểm tra đoạn cuối của hex thì ta biết nó dừng lại ở 82.
Phần thừa ở sau chắc chắn là của hình ảnh gốc.
Cắt phần hình ảnh thứ 2, ta sẽ được hình ảnh thứ nhất trọn vẹn.
Bấm ignore và save as 1.png
Lúc này mình tiếp tục kiểm tra lại hình ảnh 1.png nhưng cũng không thu thập được gì thêm nên chuyển sang hình ảnh thứ 2.
Lưu tất cả hex vào file hex2.txt sau đấy dùng đoạn code python để xoá đi phần 00 thừa
# Đọc nội dung từ file
with open(“hex2.txt”, “r”) as file:
data = file.read()
# Chuyển đổi nội dung thành danh sách các số
numbers = data.split()
# Xoá số ở các vị trí chẵn
filtered_numbers = [numbers[i] for i in range(len(numbers)) if i % 2 != 0]
# Ghi nội dung mới vào file
with open(“true_hex2.txt”, “w”) as file:
file.write(" ".join(filtered_numbers))
Ta được file true_hex2.txt
Copy hex vào bless, lưu lại với tên 2.png

Khi zoom lớn lên thì ta có thể thấy nhưng dấu chấm kì lạ
Sau hồi lâu thì mình mới biết là không thể phân tích bằng cách nhìn vào hình ảnh được
Mình nghĩ nó sẽ ẩn giấu gì đó trong từng pixel của ảnh nên lúc này dùng code để lấy ra mã màu của từng pixel.
from PIL import Image
# Load hình ảnh
image = Image.open(“2.png”) # Thay “ten_anh.png” bằng đường dẫn đến hình ảnh của bạn
# Chuyển đổi hình ảnh thành đối tượng PixelAccess để truy cập từng pixel
pixel_access = image.load()
# Lặp qua từng pixel trong hình ảnh
for y in range(image.height):
for x in range(image.width):
# Lấy giá trị RGB của pixel tại vị trí (x, y)
r, g, b = pixel_access[x, y]
#print(f"{b}")
print(f"Pixel ({x}, {y}): R={r}, G={g}, B={b}")
Nhìn kĩ kết quả chạy được thì chỉ có mã màu blue là có sự khác biệt nên ta sẽ chỉ in ra mã màu blue và cho nào vào file kq.txt
python3 rgb.py > kq.txt
Lúc này chỉ toàn là số thôi nên mình đoán được ngay là decimal.
Nhưng dữ liệu đang là một dòng một số chưa decode được, nên mình chuyển dấu enter thành space
Khi decode thì ta sẽ thấy một vài dấu hiệu tích cực: PK , flag.txt
Khi kiểm tra chữ kí thì mình biết đây là file zip, và flag.txt chắc chắn nằm trong file zip
vậy mình sẽ chuyển nó sang mã hex
lại bị chèn 00, ta dùng code cũ để xoá.
sau đó chuyển hex sang file .zip
Ta sẽ được file myfile.zip, khi giải nén thì đòi password
sau một hồi suy nghĩ thì chẳng phải nó luôn ở trước mặt mình hay sao?
y0u_c4n_n0t_cr4ck_th1s_f1l3_w1th_th3_d3f4ut_w0rdl1st_0n_k4l1
sau khi giải nén thì ta sẽ có flag