[Writeup] [CLGT CTF] Stegano (100)

Standard

Lời nói đầu

Đề bài


enc0de_.py

Nội dung chính

Mở file enc0de_.py:

import Image, zlib, struct

image_old = Image.open("mario.png")
pix_old = image_old.load()

image_new = Image.new('RGB',(image_old.size[0],image_old.size[1]),'black')
pix_new = image_new.load()

code = 'secret you want to hide'

i=0
for x in range(image_old.size[0]):
	for y in range(image_old.size[1]):
		if x == 0 and y < len(code):
			pix_new[x,y] = (pix_old[x,y][0],pix_old[x,y][1],ord(code[y])^0x13^0x37)
		else:
			pix_new[x,y] = (pix_old[x,y][0],pix_old[x,y][1],pix_old[x,y][2])

image_new.save("mario_.png")

Đọc qua có thể thấy, nó làm nhiệm vụ giấu một đoạn code vào file mario.png, và ghi thành file mario_.png (tức file mà đề cho ta). Mỗi ký tự của code sẽ được mã hóa với 1 điểm ảnh, bằng cách XOR ký tự đó với giá trị 0x13^0x37 và lưu vào byte màu blue (byte màu thứ 3) của cột pixel đầu tiên (tọa độ x = 0).

Zoom file hình mà đề cho, chú ý đến viền trái:

12-08-2013 10-52-37

Dải màu vàng mà ta thấy chính là kết quả của quá trình giấu nội dung. Chiều cao của nó là 66px, nên len(code) = 66 emo_popo_sure

Để giải mã, ta vận dụng linh hoạt và thông minh sự thần thánh của phép toán XOR (A ^ B = C thì A ^ C = B và A ^ C = B), đồng thời phát huy cao độ tính tái sử dụng code của tư tưởng lập trình hướng đối tượng, cụ thể là dùng lại cái file enc0de_.py mà bài cho, chuyển thành file decode.py như sau:

import Image

image_old = Image.open("mario_.png")
pix_old = image_old.load()

len = 66
code = ''
for y in range(len):
	code += chr(pix_old[0, y][2]^0x13^0x37)

print code

Kết quả emo_popo_look_down

<? $FLAG="mario_st3gan0_".md5(file_get_contents("mario_.png")); ?>

Có thể chạy đoạn output trên bằng PHP, hoặc lấy md5 của file mario_.png và ghép vào thủ công cũng được.

flag: mario_st3gan0_606cd321933e37926e0edeefd1d6eb8d

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s