CTFshow Reverse 数学不及格 wp
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))