CTFshow Reverse 数学不及格 wp

发布时间 2023-10-29 17:15:36作者: Ethan(ˊ˘ˋ*)

1.elf文件使用IDA反汇编

main函数,主要逻辑写在注释里,要算出除程序名之外的4个参数

2.根据伪代码分析数据

前三个check相加,有

(v9-v10)+(v9-v11)+(v9-v12)=3*v9-(v10+v11+v12)=0x233F0E151C+0x1B45F81A32+0x244C071725=0x62d10d4673

而check4

v4+v10+v11+v12=0x13A31412F8C

两个等式相加可得,其中v9是斐波那契数列第v4左右项的值,v4是项数

3*v9+v4=0x62d10d4673+0x13A31412F8C=0x19d024e75ff

3*v9+v4的和除以3,可以大概知道v9的值

print((0x233F0E151C+0x1B45F81A32+0x244C071725+0x13A31412F8C)/3)

值为591286729898

找一个在线计算斐波那契数列的网站,找到一个非常接近上面算出来的v9的大概值的一个数

于是v9=591286729879,v4=0x19d024e75ff-3*v9=58

再算出4个输入的参数为

v9=591286729879
v4=58
print(hex(v9-0x233F0E151C))
print(hex(v9-0x1B45F81A32))
print(hex(v9-0x244C071725))
print(hex(v4+0x6543))
#0x666c61677bL
#0x6e65776265L
#0x655f686572L
#0x657d

3.验证并转格式,得到flag

验证一下 666c61677b 6e65776265 655f686572 657d,验证成功

最终转成字符串,得到flag{newbee_here}

from Crypto.Util.number import long_to_bytes
print(long_to_bytes(0x666c61677b6e65776265655f686572657d))