Hugtto!-WriteUp

Kyrie-Lrving 2024-10-07 15:39:12 131 0


emiru.png该标志被隐藏,结果和脚本被编译到 tar.gz 中。过程很简单:用0到2之间的随机数来存储r、g、b的低1位中的一位。
我们需要知道随机数种子,但由于它接近生成 tar.gz 的时间,因此我们将使用它。

使用 tar 检查时间戳。
留言

$ tar -t -v --full-time -f hugtto.tar.gz
-rw-rw-r-- ptr/ptr 1346615 2019-08-01 14:07:10 ./steg_emiru.png
-rw-rw-r-- ptr/ptr 1009 2019-08-01 14:06:22 steg.py


编写解码器时要注意图像处理的时区和垂直方向。


from PIL import Image
import random
import datetime

img = Image.open("steg_emiru.png")
width, height = img.size

bin_prefix = []
for c in "KosenCTF{":
for i in range(8):
bin_prefix.append((ord(c) >> i) & 1)

approx = int(datetime.datetime.strptime(
'2019-08-01 14:00:00', '%Y-%m-%d %H:%M:%S'
).timestamp())

for seed in range(approx, approx + 0x1000):
random.seed(seed)
bin_flag = []
for i in range(len(bin_prefix)):
x, y = i // width, i % width
rnd = random.randint(0, 2)
r, g, b = img.getpixel((x, y))
if rnd == 0: bin_flag.append(r & 1)
if rnd == 1: bin_flag.append(g & 1)
if rnd == 2: bin_flag.append(b & 1)
if bin_flag[i] != bin_prefix[i]:
break
else:
print("[+] Found seed: {}".format(seed))
break
else:
print("[-] Invalid approx")
exit(1)

random.seed(seed)
flag = ""
char = []
for i in range(8 * 128):
x, y = i // width, i % width
rnd = random.randint(0, 2)
r, g, b = img.getpixel((x, y))
if rnd == 0: char.append(r & 1)
if rnd == 1: char.append(g & 1)
if rnd == 2: char.append(b & 1)
if len(char) == 8:
x = 0
for j in range(8):
x |= char[j] << j
flag += chr(x)
char = []

print(flag)

分类:MISC
image
作者:Kyrie-Lrving

41

提交

0

收入

相关WriteUP

问题反馈