wave - Codegate 2024 Finals
#Codegate_2024_Finals #Rust
https://github.com/N0fix/rustbinsign でシンボル情報を復元できる
データにノイズが加えられているが、FFTでピークを探すと元のデータを復元できる
code:python
import numpy as np
import matplotlib.pyplot as plt
import scipy
import string
from math import sin, cos, pi
from binascii import unhexlify
from struct import unpack
import scipy.signal
def solve(y):
f_s = 400
t_fin = 1
dt = 1/f_s
N = int(f_s * t_fin)
t = np.arange(0.0, t_fin, dt)
yf = scipy.fft.fft(y)
freq = scipy.fft.fftfreq(N, d=dt)
threshold = 0.05
peaks_index, properties = scipy.signal.find_peaks(np.abs(yf), height=threshold)
max_height = 0
max_idx = 0
for i in range(len(properties'peak_heights')):
if properties'peak_heights'i > max_height:
max_height = properties'peak_heights'i
max_idx = i
return chr(peaks_indexmax_idx)
values_list = []
with open('flag.txt.encode', 'r') as f:
for line in f.readlines():
values = []
for i in range(0, len(line)-1, 16):
values.append(unpack('>d', unhexlify(linei:i+16))0)
values_list.append(np.asarray(values))
print(''.join([solve(values_listi) for i in range(len(values_list))]))