171108 逆向-SWPU(re200)

来源:互联网 发布:女生风油精滴下体 知乎 编辑:程序博客网 时间:2024/06/02 04:18

1625-5 王子昂 总结《2017年11月8日》 【连续第404天总结】
A. 08067CTF-re200
B.
这题我觉得难点在于对程序架构的分析理解,找出各个变量、函数的意义,最终锁定关键函数

比起做题来说更类似对程序的逆向,flag在正常流程中不会出现,但却符合思路。所以虽然做起来很困难,但我觉得这种题对成长更有帮助

首先拿到程序,main函数中没有什么东西

于是从字符串入手,查看一番发现这段加载音频的地方
这里写图片描述
很明显它是从加密文件中读取音频,然后装载到内存中,通过dword_458b88指针数组来调用

观察可以看到n_gun(n枪声)、bonus(奖励声,实测发现是吃到枪的声音)等等游戏中出现的音频文件

查看这个数组的交叉引用,就能跟到各个地方的处理了:
比如说dword_458B88[4],p_death的调用函数肯定就是死亡处理:
这里写图片描述
向上查看交叉引用,将它Hook住就可以达到不死效果了

再比如dword_458B88[11], bonus的调用应该是吃到枪的处理,调试发现吃到枪会使分数增加,那么就可以推断出加分的函数add_points:
这里写图片描述

然后查看add_points的交叉引用就可以接着推断出其他加分的情况,例如杀怪等等

我Hook了死亡函数,通关以后直接回到第一关╮(╯_╰)╭没有任何反应
于是猜测flag是否与分数有关,考虑到结算画面有08067的字符出现:
这里写图片描述
于是对该字符串查找,定位到这里:
这里写图片描述
向上查看交叉引用,定位到外层:
这里写图片描述
根据经验,分析出==8的变量是关卡………………(╯‵□′)╯︵┻━┻我从来没打到过第四关让我拿什么分析啊!

通过在43E710中下断可以发现这里是进入关卡的画面显示函数,word_4586DC应该就是生命数了

我觉得当第八关死亡重来的时候貌似就会显示flag的样子?

直接call它,或者死亡后将level变量写成8就会显示flag:
这里写图片描述

这里需要一点灵性,自己做的时候断到这个函数了,但是没注意if(dword == 8)这个判断

C. 明日计划
re400