ps: 只是这道题目名叫最难的题目,并不是比赛中最难的题目2333333
逆向文件下载:http://oj.xctf.org.cn/files/re_100.8cd4820cbd1300bda951e694298f73a0
pps: 题目详情可在oj.xctf.org.cn找到,但是给出的flag无法通过,通过看别人的writeup认为是xctf又搭崩了
首先看看题目吧
通过ida就可检测出这是一个pe文件,后缀改为.exe运行一下
结果就是疯狂跳出这个框,怎么点都会再弹出来
好吧,拖进OD看看
结果在调试过程中弹出了个不同的东西,然后后面直接调用了exit函数
就退出程序了= =
猜测大概有些调试保护的函数吧(后来看别人的writeup的确如此,不过我的OD没有显示出来)
搜索字符串,定位到对应函数,发现jnz的跳转语句可以跳过该函数
好办,空格修改jnz为jz继续调试
然后就定位到了bctf这个字符串,发现这个函数在很多个循环里面(难怪会疯狂跳出)
为了方便理解,进入ida按f5反编译为c查看
发现如下函数
对应汇编中如下
这么可以猜他这是输出flag啊,那么尝试下 让他输出
可以看到主函数中四次调用了这个函数,并且传入了四个不同的int
这些int可以理解为包含flag信息的参数
那么函数中的运算不能随便改,不然就会导致输出flag不对
于是把里面调用messageBoxA函数用NOP替换,让程序自己跑起来
这时把断点什么的都关掉,不然每次自己点很麻烦的
最终跑完结果如下
嗯,所以flag就是
Th3_H4rd3st_H3r3