NKgame reverse

实验步骤

  1. 逆向分析game.exe二进制代码的主要逻辑结构和重要数据。

1)查找主要函数和流程:使用反汇编工具打开game.exe,查找程序的入口点,然后分析主要函数和流程。

先扔DIE——

img

扔IDA x32里——

分析game.exe程序流程——

整个程序共分为了4个关卡,四个关卡对应四个地图,玩家需要操控主角通过这四个关卡,然后会回到最开始的关卡,在这个关卡的地图的下方的海边找到最后的NPC并与之对话就可以得到最后的flag。

img

2)理解关卡切换条件:找到关卡切换的条件判断语句。

对于这四个关卡,每个关卡的通关条件是要击杀足够多的怪物,只有击杀的怪物数量足够后,才能进入下一个关卡。

img

3)识别主角和怪物的关键数据:查找和理解主角和怪物的血量、移速、攻击范围、攻击力等关键数据的使用方式。

img

  1. 修改game.exe二进制代码, 在实验报告中说明代码修改的具体过程。

1)打开游戏进行体验。体验后发现,角色死亡后,屏幕上显示“died”,因此在字符串中搜索,来找到游戏人物死亡判定的代码

imgimg

跳转到程序代码中,将jb改成jmp,就实现了不死

img

2)继续闯关,进入下一关时却给出如下提示:You need to kill enough monsters!

再次利用ida pro搜索字符串You need to kill enough monsters!

img

img

跳转到程序代码中,将jz改成jmp,就可以直接开始下一关。

img

3)继续游戏——

二、实验结果

运行游戏,未再出现相关失败提示,最后通关并得到flag:

(第一次不小心跳过flag了,在flag这里下个断点)

img

flag{a2fdkd80xo}

img