BlueHatCupRe


蓝帽杯-REVER

0x0 前言调试

怎么进入关键位置,一直f8,跑起来了就在那个call下断点,然后重新跑,最终可以找到OEP

0x1 check 格式

1

要求下来就是输入格式flag{中间任意36个数字},长度为42

0x2 取值

2

可以找到有两个while循环18次的位置,分别取了前18位和后18位。

0x3算法

3

取完值后,会计算两个值出来分别是72057594037927936,1152921504606846976

点两个unk进去往下加10的位置就是值,限制输入的大小

4

第一个算法位置,就是赋值两次,然后这个乘法函数就是第一个值和第二个值进行相乘放入第三个位置。剩下的算法函数一样

5

第二个乘法把后18位取出来自我相乘,然后再乘一个11,&v28就是上面先乘出来的值

0x4 比较

6

然后把前18位算出来的值和后18位进行相减,如果等于9为成功

0x5 flag

x^2-11y^2=9,72057594037927936<x < 1152921504606846976

https://www.wolframalpha.com/

进入这个网站填写进去解出。

0x6 总结

先感谢一下Lu1u师傅对我的帮助和提点

这题我自己本身做时,在输入下断,完全断不住算法位置,后面复现也不明白这些位置怎么算了,怎么判断的,什么位置。

后面发现这里面存放地址的实际位置在点进去位置后往下+10的位置才是真正存放的位置,然后看到值后一一对比,感觉就醍醐灌顶一样。整个200行的代码做了什么完全清楚了。


文章作者: Blue
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Blue !
评论
  目录