蓝帽杯-REVER
0x0 前言调试
怎么进入关键位置,一直f8,跑起来了就在那个call下断点,然后重新跑,最终可以找到OEP
0x1 check 格式
要求下来就是输入格式flag{中间任意36个数字},长度为42
0x2 取值
可以找到有两个while循环18次的位置,分别取了前18位和后18位。
0x3算法
取完值后,会计算两个值出来分别是72057594037927936,1152921504606846976
点两个unk进去往下加10的位置就是值,限制输入的大小
第一个算法位置,就是赋值两次,然后这个乘法函数就是第一个值和第二个值进行相乘放入第三个位置。剩下的算法函数一样
第二个乘法把后18位取出来自我相乘,然后再乘一个11,&v28就是上面先乘出来的值
0x4 比较
然后把前18位算出来的值和后18位进行相减,如果等于9为成功
0x5 flag
x^2-11y^2=9,72057594037927936<x < 1152921504606846976
进入这个网站填写进去解出。
0x6 总结
先感谢一下Lu1u师傅对我的帮助和提点
这题我自己本身做时,在输入下断,完全断不住算法位置,后面复现也不明白这些位置怎么算了,怎么判断的,什么位置。
后面发现这里面存放地址的实际位置在点进去位置后往下+10的位置才是真正存放的位置,然后看到值后一一对比,感觉就醍醐灌顶一样。整个200行的代码做了什么完全清楚了。