一、查看文件类型
PE32无壳
尝试运行
发现是游戏题,倒数10s后根据提示输入正确的按键,程序会输出新的内容,若没有及时输入相应按键或按错键,程序退出
刚开始是练习部分
再次倒数10s后进入真正的游戏部分
依次键入空格、x、m、m、x、s后,跳出提示,相当于通过了第一关,游戏继续
多次运行后发现,后续的关卡,需要输入的键位每次都不相同,猜测程序在第二关使用了随机数,完成游戏后得到提示
得到flag为:no5c30416d6cf52638460377995c6a8cf5
那么解题思路即为将按键输入的判断条件更改,改为即使输入的是错误的按键或不输入,程序也能继续运行。
通过IDA找到条件判断的地址或直接通过x32dbg动态调试
二、IDA静态分析
打开字符串窗口,找到两个错误提示
分别通过交叉引用跟进
发现第一个错误提示的调用函数如下,看起来像程序前半的教学部分
第二个错误提示的调用函数如下:
分别查看其汇编代码
将其中的jnz改为jz或je即可
三、x32dbg动态调试
搜索字符串
找到错误提示并跟进
分别将两处的jne跳转改为je
按F9运行即可
待程序运行一段时间后,得到flag为:
no5c30416d6cf52638460377995c6a8cf5
点击修补文件即可导出