Stenography - Can You See Me

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:

  1. bless, hexeditor : phần mềm xem và chỉnh sửa hex trên linux
  2. python3
  3. exiftool
  4. Decimal to text: Decode Unicode code points to text - cryptii dec decode.
  5. List of file signatures - Wikipedia . xem chữ kí của file
  6. 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


image

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

2 Likes

Cảm ơn bài writeup chi tiết và tâm huyết của bro.
Phần code python, bro sử dụng thẻ code markdown để hiển thị code cho đẹp nhaa

2 Likes

sao không thấy nút edit đâu hết vậy ạ

1 Like