IrisCTF2024

最有用的一集

What the Beep?

题目描述说有几个地方的音频音量计记录,下载附件后发现是有四个不同位置的记录,从前到后大概是49,56,52,52分贝。题目中又说信号源是140分贝,所以推测是计算信号源到四个位置的相对距离然后在地图得出位置。

经过搜索得到声音衰减公式:

衰减(分贝)=20log10(d1d2)\text{衰减(分贝)} = 20 \cdot \log_{10}\left(\frac{d_1}{d_2}\right)

所以可以得到:

d1d2=10衰减(分贝)20\frac{d_1}{d_2} = 10^{\frac{\text{衰减(分贝)}}{20}}

带入数据得到四个地点到信号源的距离之比是

2.1:1:1.5:1.52.1:1:1.5:1.5

然后在地图上作图得到大概位置就行了:

IlEp9.jpeg

nc后输入位置坐标得到flag:

irisctf{ac0ust1c_pr0pagat10n_m0d3ls_c4n_b3_us3d_t0_appr0xim4te_d1st4nce5}

The Peano Scramble

图片下下来是一张很混乱的图片:

InPtX.png

通过题目peano搜索发现是一种分形几何:

https://zhuanlan.zhihu.com/p/305623626

推测应该是按着曲线的轨迹将像素还原到原来的位置,于是编写脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from PIL import Image
from tqdm import tqdm

def peano(n):
if n == 0:
return [[0,0]]
else:
in_lst = peano(n - 1)
lst = in_lst.copy()
px,py = lst[-1]
lst.extend([px - i[0], py + 1 + i[1]] for i in in_lst)
px,py = lst[-1]
lst.extend([px + i[0], py + 1 + i[1]] for i in in_lst)
px,py = lst[-1]
lst.extend([px + 1 + i[0], py - i[1]] for i in in_lst)
px,py = lst[-1]
lst.extend([px - i[0], py - 1 - i[1]] for i in in_lst)
px,py = lst[-1]
lst.extend([px + i[0], py - 1 - i[1]] for i in in_lst)
px,py = lst[-1]
lst.extend([px + 1 + i[0], py + i[1]] for i in in_lst)
px,py = lst[-1]
lst.extend([px - i[0], py + 1 + i[1]] for i in in_lst)
px,py = lst[-1]
lst.extend([px + i[0], py + 1 + i[1]] for i in in_lst)
return lst

order = peano(6)

img = Image.open(r"C:\Users\ASUSROG\Desktop\chal.png")

width, height = img.size

block_width = width # // 3
block_height = height # // 3

new_image = Image.new("RGB", (width, height))

for i, (x, y) in tqdm(enumerate(order)):
# 根据列表顺序获取新的坐标
new_x, new_y = i % width, i // width
# 获取原图像素
pixel = img.getpixel((x, height - 1 - y))
# 在新图像中放置像素
new_image.putpixel((new_x, new_y), pixel)

new_image.save("rearranged_image.jpg")

运行得到最终结果:

InhLJ.jpeg

提交即可

Czech Where?

直接谷歌地图搜索即可得到地址,把音标去掉得到flag

irisctf{zlata_ulicka_u_daliborky}