[2022蓝帽杯 初赛] Reverse赛题复现

电子取证杯也就这一道re,赛中还是给我整麻了,赛后没wp复现也是半死不活的,死了得了。。

loader

主函数长这样,可以看到应该是加载了unk_140003040这个玩意,点进去看看

可以看到开头是4D 5A,猜想这里是一个程序,考虑把它dump下来,结果整出来的程序完全无法运行。

只能硬着上动调,直接把F8按死,程序大概率会自己停下等待我们输入。这时,动调停下的地方call的函数就包含了main函数

在这下个断点,然后重命名为main_0,点进去看看逻辑

人眼找了一会并不能找到真正的main在哪,重新动调,然后在这里F8过函数,看哪里会停下,再在停下的地方下断点重新F7步入动调,这样我们找到了真正的main在sub_7FF748F95890处,然后就是分析这里的逻辑了。

在发现LABEL_15就是最后的check后,我们重点观察带goto LABEL_15的,这里点进去会发现dword数据是'galf',byte数据是'{',显然是检查前五位是否为'flag{'

下面的if检查分别是输入不为空、输入长度为42,输入最后为'}'

我们构造数据为flag{123123123123123123123123123123123123},然后动调后面的逻辑

这里动调后发现循环是将flag的内容取了前18位存进v12

后面也有一个相似的循环存了后18位

然后在sub_7FF748F94380函数中的xmm内 有

按一下h就变成了

1657893088339

随便换个前18位和后18位不一样的flag,发现他存的就是前18位flag的整型数据,后一个循环对应存的是后18位

然后的关键逻辑在这

data_1和data_2分别是72057594037927936和1152921504606846976,多试几种flag并调试后会发现sub_7FF748F950C0相当于一个小于符号,那么这里就是说72057594037927936 < part_1 < 1152921504606846976。

还能发现sub_7FF748F942B0相当于一个乘法,前两个参数乘后用第三个参数承接。sub_7FF748F95400也是个乘法。

最终我们会发现,这个题相当于一个大整数方程

\[(part\_1)^2-11*(part\_2)^2=9,72057594037927936 < part\_1 < 1152921504606846976 \]

re套crypto,我直接在线求助cryto👴

解得\(x = 118936021352508390, y = \pm35860559716724409\)

尝试了下几种组合,最后得到flag:

写完博客感觉好几把简单,结果做了我一个下午+一个晚上,😎👉🕶🤡

posted @ 2022-07-15 22:36  iPlayForSG  阅读(255)  评论(0编辑  收藏  举报