一.默认已装好IDA,exeinfope,winrar/7-zip
二.开始愉快解题吧:目标找到flag
(1)下载题,解压
(2)将拖入exeinfope中
(3)为32exe文件,在windows环境下运行(双击输入会闪退,所以在cmd窗口操作)
随便输入,发现关键字符串not enough;说明我们输入的flag长度太短
(4)将文件拖入IDAPro(x64/32)中,按键盘上f5键(有的电脑同时按住f5与fn键)得到对应c语言伪代码。
向上分析
这些sub函数几乎都与this指针有关系又有非常多嵌套,但双击this无数据显示,不好静态分析
故动态调试看是否有发现
1.f2在那行设置断点,因为是程序开始的地方,f8单步过流程,看看程序是如何运行的
2.选择动态调试器local windows debugger
3.按三角符号启动,一路确定
4.随便输长24的字符串,回车
5.一直f8到这一步,发现无法继续,看看对话框
随便输入长24的字符串,回车,又可继续f8
发现程序一定跳到loc_40686B代码段,继续f8
跳到loc_4068AA代码段,再跳到右分支,循环24次,再跳到loc_4068C9代码段,继续f8
再跳到loc_40695C,出现分叉
右分叉的goodjob为我们想要的
总体流程如上,再用其他长24的字符串也是一样的流程
找到固定流程的每个代码段f5反汇编可得对应伪代码
即输入24位flag---->
循环24次---->与rxusoCqxw{yqK`{KZqag{r`i这24位的字符串比较,看每一位是不是一样
故重点在sub_403B70对flag的操作
进入sub_403B70函数
char a2暗示了a2=flag,故逆向脚本如下:
得到flag{Welcome_to_Neusoft}
flag='' a='rxusoCqxw{yqK`{KZqag{r`i' for i in range(24): flag+=chr(ord(a[i])^0x14) print(flag)
如有错误,请大家不吝赐教