题目链接:https://pan.baidu.com/s/1n1a4VFdCkloDV3OBunbKQQ
提取码:wqs9
题目是一个推箱子的游戏,需要将两个箱子推到终点。
在sub_400EB9中有一个smc,进行异或操作,作用是解锁地图map。
开始会有”sp-analysis failed“,修一下栈指针可以进行反编译。
写IDApython脚本进行静态解密。
address = 0x6020A0 for i in range(192): b = Byte(address+i)^i PatchByte(address+i,b)
并且在sub_400796函数中初始化了推箱人和两个箱子的坐标。
解密后的map与person和box坐标如下(08代表墙,00代表通道,14代表终点):
我们来分析一下程序如何实现推箱子游戏的。
输入的字符串可以控制person的移动方向,我们分析一个控制向左移动函数为例。
然后每一次移动后都会跳转到check函数对box1和box2坐标值进行检测,看是否都等于0x14即推到了终点。
现在我们知道了程序如何实现的推箱子,然后只需要先将box1推进左边的14,然后把box2推进右边的14,可以实现这样的输入为”WW44W444W45555555450050W0000WWWWW5444WW00050W4W0000W0550544“。