bugku-re-游戏过关


参考某师傅blog的wp
一样四种方法。

1.直接玩游戏

15786234直接通关

1-1.png


2.ida计算flag

ida打开,打开字符串窗口,找到关键字符串,双击跟入。在按x,交叉引用。f5转为反汇编,看到左下角的图。v2和v59是两个数组,ida并没有识别出来,直接在上面找到定义的时候。右键输入变量类型,改为数组的形式。
2-1.png

再把两个数组提出来,直接写脚本,异或两个数组内的值和0x13在异或,chr之后得到flag。
2-2.png


3.修改源码

左上找到关键字符串flag。在找到上面输出flag的函数的入口。跟入跳转。在跟入本地调用。看到上面有8个jnz,就是判断8个灯是否亮的代码。一旦有1个没满足,就call回去原来的函数,重新要求你输入n玩游戏。只要把这里的jmp 0085f4b7(循环重新开始的位置)改成00857ab4(flag函数的入口地址)或者改成0085e940(输出flag的函数的路口)。
3-1.png

然后按如图保存即可。
右键修改的代码,复制到可执行文件->选择,找到修改的代码保存文件。
3-2.png

运行结果
3-3.png


4.边调试边运行

找到8个jnz的地方,给8条语句f2下上断点之后开始。
8个jnz就是判断灯是否亮的代码。在ida里同样可以看到。
4-1.png

运行之后,输入n之后,f7单步运行,把8个jnz中的zf判断,哪个zf不为1,都改为1。zf就表示这里要跳转了。通过修改zf的值,来实现不跳转。
4-2.png

改完之后再运行。
4-3.png