# 前言
首先感谢师傅们的关注,小透明诚惶诚恐,如果在我成长的路上给师傅们带来一丢丢的帮助,将感到十分荣幸。
# JustRE 1
这回是windows的软件,不如先不按套路出牌,点开看看是什么。
软件说,Flag不在这,左上有个getflag,右边有个捷径,那做逆向肯定是要走捷径的嘛。
作者你滴良心不会痛嘛,我 !@#¥%……
看左上。
师傅们我试过了啊,这“糟老作者”坏滴很!看来还是得按套路走。
32位,C++,没加壳。那就不纠结,直接IDA。
进来一看,也没有发现和flag相关的,我有点懵,一下子没了思路,只好shift+f12找找有没有flag相关的字符。
果然发现一串奇怪的字符,长的像flag,但是事情肯定没有这么简单。(我不会说我复制去试了的!)
那接下来的问题就是找到是什么调用了这一串字符串,选中之后双击,再选中按下X追踪。
看到左边发现调用函数,f5大法看反编译的伪代码。(f5真香)
简单分析一下代码,如果dword_4099F0等于19999,输出字符串巴拉巴拉。printf()
函数用于将格式化的字符串输出到标准输出设备;sprintf()
函数用于将格式化的字符串写入到字符数组中。那也就是说,我当初要是点了19999次就会弹出flag。点。。。点个锤子我点!
说正经的,从sprintf分析,正常写是“printf("%s", a);”,同理,sprintf的格式也是一样的,字符数组中有两个"%d",那按这个思路,写个脚本就应该有flag了。
加上题目的格式,flag{1999902069a45792d233ac} 。
# 总结
这道题确实是很开眼界,比如说X跳转这个功能,sprintf和printf的区别等等。发现技术增长还是挺开心的,然后就应该可以看看不知道哪年放在电脑里的一道题了,希望能顺利解题。
P.S.再次感谢师傅们的支持和鼓励!(手动鞠躬)