[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就变成了
随便换个前18位和后18位不一样的flag,发现他存的就是前18位flag的整型数据,后一个循环对应存的是后18位
然后的关键逻辑在这
data_1和data_2分别是72057594037927936和1152921504606846976,多试几种flag并调试后会发现sub_7FF748F950C0相当于一个小于符号,那么这里就是说72057594037927936 < part_1 < 1152921504606846976。
还能发现sub_7FF748F942B0相当于一个乘法,前两个参数乘后用第三个参数承接。sub_7FF748F95400也是个乘法。
最终我们会发现,这个题相当于一个大整数方程
re套crypto,我直接在线求助cryto👴
解得\(x = 118936021352508390, y = \pm35860559716724409\)
尝试了下几种组合,最后得到flag:
写完博客感觉好几把简单,结果做了我一个下午+一个晚上,😎👉🕶🤡