TCTF BabyEncoder 傅里叶级数

一、推导出傅里叶级数

首先IDA打开,发现代码逻辑比较简单

 

 

 

主要代码在这里

 

 

我们用python代码化简一下,大概就是这样

pai_unit = 3.141592653589793 / 64.0 pai = 3.141592653589793 # ttt = 0.00000390625 # print(ttt * 2000 * 2 * pai) a1 = [] input2 = randomm() input3 = randomm() input4 = randomm() input5 = randomm() input6 = randomm() input7 = randomm() input8 = randomm() input9 = randomm() v24 = pai_unit * randomm() v25 = pai_unit * randomm() v26 = pai_unit * randomm() v27 = pai_unit * randomm() v28 = pai_unit * randomm() v29 = pai_unit * randomm() v30 = pai_unit * randomm() v31 = pai_unit * randomm()63 v32 = randomm() for i in range(128): # cos(kΠ + ) v11 = cos(pai_unit * i + v24) * input2 v12 = cos(2 * pai_unit * i + v25) * input3 + v11 v13 = cos(3 * pai_unit * i + v26) * input4 + v12 v14 = cos(4 * pai_unit * i + v27) * input5 + v13 v15 = cos(5 * pai_unit * i + v28) * input6 + v14 v16 = cos(6 * pai_unit * i + v29) * input7 + v15 v17 = cos(7 * pai_unit * i + v30) * input8 + v16 v18 = cos(8 * pai_unit * i + v31) * input9 + v17 v10 = v18 + randomm() % 3 a1.append(v32 + v10)

进一步化简为:

 

 

 对傅里叶级数公式比较熟悉的师傅应该不难看出这是傅里叶级数

二、利用傅里叶公式简化代码

从一到八的求和我们可以约等于从一到正无穷

 

 近一步化简=》

 

由傅里叶级数得:

 

根据积分的定义,我们可以吧该积分化为离散点的求和(约等于

 

三、exp代码

# # 1、首先 f(x) 的每个值都能求 # # 2、我们要求的只是Ai # # 3、直接使用公式 An = .... ,带入 f(x) # # 4、把积分式转化一下即可 # # 1、打交互,取得程序输出的值 from pwn import * from math import * sh = process(r"./BabyEncoder") sh.recvuntil(b"========START=======\n") data = sh.recvuntil(b'=========END========')[:-20] # 由于 程序把每8字节buf转化为了128 * 8 字节的v6 , 那么,我们需要分组# gp = [0.0 for i in range(128*8)] for i in range(8): val = data[128*8*i : 128*8*(i+1)] for j in range(128): gp[i*128 + j] = struct.unpack('<d',val[j*8 : (j+1) * 8])[0] # bytes转换为字符串 input = [] for i in range(8): An = Bn = 0.0 for j in range(8): for x in range(128): An += gp[128 * i + x] * cos(math.pi* x * (j+1)/64) Bn += gp[128 * i + x] * sin(math.pi * x * (j+1)/64) An *= 2/128 Bn *= 2/128 val = int(sqrt(pow(An,2)+pow(Bn,2))) & 0xff input.append(val) for i in range(len(input)): print(chr(int(input[i]+0.5)),end = "") # 考虑到python是向下取整

代码不保证完全正确,因为题目环境已经消失....但应该就是这样做的

 

ps: 这道题让我梦回大一...有点怀念

这道题偏实用性,比较考察傅里叶的本质


__EOF__

本文作者_TLSN
本文链接https://www.cnblogs.com/lordtianqiyi/articles/16795379.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   TLSN  阅读(67)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示