题目下载地址
https://ctf.bugku.com/files/d2935133b45ff7a32b2b9436851959d0/ConsoleApplication4.exe

分析题目

Bugku_逆向——游戏过关
题目大概的意思就是

目的:点亮所有的lamp(台灯)
输入lamp编号(m),则该lamp变亮,同时(m-1)和(m+1)的lamp亮暗状态会变化
输入多次m,最后将lamp全部点亮,游戏过关

反正我是不知道这么玩

先是查壳看看 发现无壳

IDA静态分析

shift+F12 搜索字符串
Bugku_逆向——游戏过关
意味着我们只要让程序执行到这个位置,就可以获得flag了

双击查看字符串地址

变量位于只读数据区
Bugku_逆向——游戏过关

按x键定位变量的交叉引用地址

Bugku_逆向——游戏过关
push ebp
发现进栈地址:0x0045E940 ,这里需要记住偏移地址E940 ,下面使用OD直接非常规执行到该地址

OD动态调试

直接用OD载入程序

Bugku_逆向——游戏过关
把基地址 0045 记住

找一个可控的程序片段,以跳转到目的flag段
Bugku_逆向——游戏过关
n= 每次数入一个数字都会判断 所以 n= 可以控制程序是否得到flag

双击查看 n= 的地址 再次双击下断点
Bugku_逆向——游戏过关

在程序窗口输入 1 再按回车是程序断在下断处

跳转到flag字符串地址–(关键)

修改断点处的汇编指令 Ctrl+G 或者双击汇编指令

再按 F9 运行程序

Bugku_逆向——游戏过关
第一次复现逆向题目,感觉还有好多没有理解,请各位多多指教。

参考:https://www.52pojie.cn/thread-925121-1-1.html

相关文章: