题目下载地址
https://ctf.bugku.com/files/d2935133b45ff7a32b2b9436851959d0/ConsoleApplication4.exe
分析题目
题目大概的意思就是
目的:点亮所有的lamp(台灯)
输入lamp编号(m),则该lamp变亮,同时(m-1)和(m+1)的lamp亮暗状态会变化
输入多次m,最后将lamp全部点亮,游戏过关
反正我是不知道这么玩
先是查壳看看 发现无壳
IDA静态分析
shift+F12 搜索字符串
意味着我们只要让程序执行到这个位置,就可以获得flag了
双击查看字符串地址
变量位于只读数据区
按x键定位变量的交叉引用地址
push ebp
发现进栈地址:0x0045E940 ,这里需要记住偏移地址E940 ,下面使用OD直接非常规执行到该地址
OD动态调试
直接用OD载入程序
把基地址 0045 记住
找一个可控的程序片段,以跳转到目的flag段
n= 每次数入一个数字都会判断 所以 n= 可以控制程序是否得到flag
双击查看 n= 的地址 再次双击下断点
在程序窗口输入 1 再按回车是程序断在下断处
跳转到flag字符串地址–(关键)
修改断点处的汇编指令 Ctrl+G 或者双击汇编指令
再按 F9 运行程序
第一次复现逆向题目,感觉还有好多没有理解,请各位多多指教。
参考:https://www.52pojie.cn/thread-925121-1-1.html