一、题目描述
把文件下载下来,运行后发现是一个简单的小游戏,属于那种玩通关了就给 flag 的,自己先玩了一下,玩了一下大概游戏规则就是看到 s 就按空格,遇到 x 就按x,遇到 m 就按m,但是玩到后面速度非常快,如果你足够厉害,玩到后面应该是可以玩出来的。这里我们就要IDA进行静态分析,又是小游戏,所以也需要ollydbg
进行动态调试。
二、解题环境
(1)解题所采用的的是windows11
家庭中文版的操作系统
(2)编程语言为C语言
(3)用到的软件:exeinfope.exe
,IDA(32)
以及IDA里面的F5
插件 , x32dbg
动态调试软件
三、解题思路
第一步:
将gametime.exe
放到exeinfope.exe
查看一下gametime
的一些基本信息
上面显示是一个32位无壳的程序,然后运行一下,发现是一个小游戏:
第二步:
将gametime.exe
放进32位的IDA里面利用F5
的插件查看反汇编代码
往下走:
这里是我们跟进去游戏规则sub_401435
函数里面来查看一下
查看一下sub_401260判断函数对应的汇编语言及重要跳转函数的地址
分析到这里,我们能清楚的了解到了gametime
的第一部分,介绍三个游戏规则看见's'按空格键,看见'x'按'x'键,看见'm'按'm'将,的整个流程及一个很重要的判断函数
.text:004014D6 pop edi
.text:004014D7 pop esi
.text:004014D8 pop ebx
.text:004014D9 test al, al
.text:004014DB jnz short loc_401503 //这里到后面进行动态调试时需要进行修改让他直接进行跳转
我们继续往下面分析:
到这里我们可以又分析到一个重要的判断函数:
我们继续跟进去到sub_401507函数里面查看一下,发现与上一个判断函数有一点变化,但是整体的思路没有变化,还是先找判断函数,这里有6次判断,自己动态调试着玩了一下,完成这6次后,后面还有说明这是试玩的6次
查看一下sub_401260判断函数对应的汇编代码及重要跳转函数的地址:
分析到这里我们了解到了这里是gametime
的第二部分介绍完规则之后又让你试玩6次,也发现了另一个重要的跳转函数:
.text:0040155E pop edi
.text:0040155F pop esi
.text:00401560 pop ebx
.text:00401561 test al, al
.text:00401563 jnz short loc_401586 //这里到动态调试时可能不止修改一次判断函数,要修改到两个判断函数
我们继续往下面分析:
这里是我们跟进去到当v19
=10时跳转到LABEL_41里面调用的sub_4012F6()
函数里面查看一下
静态分析到这里,上面算是整个游戏的第三部分正式玩10次,我们可以很清楚的了解到了这个游戏的整个流程,当你完成3次游戏规则介绍,6次的试玩,正式玩成功10次后,第20次就能拿到flag,在这个静态分析里面有两个重要的判断函数,第一个是介绍规则时的判断函数,第二个是试玩和正式玩的时候的一个判断函数,分析到这里我们就需要用x32位的dbg
来进行动态调试,找到这两个重要的判断函数的位置进行设置断点调试,检验和修改,让它进行无条件跳转直接跳转。
第三步:
我们进去到x32为dbg
来进行动态调试gametime.exe
进去之后按下F9
:
去找我们静态分析时找到的两个重要的判断函数地址,虽然动态调试时的地址与静态分析的地址有一小点不一样,但是最后四位地址是一样的,我们依照后四位是找一下动态调试里面对应的地址:
.text:004014DB jnz short loc_401503 //第一个判断函数
.text:00401563 jnz short loc_401586 //第二个判断函数
找到之后分别进行设置断点跑一下来检验我们的想法是否正确:
第一个判断函数设置断点:
第二个判断函数设置断点:
通过跑了一下发现我们的想法是正确,现在就只需要对这两个判断函数进行修改,让其判断我们输入的是什么都无条件跳转
这样修改完成后,我们F9
跑一下gametime.exe
,看一下结果和我们预想的是否一样
四、解题结果
跑下来和我们想的一样,到判断输入的是否正确时就直接无条件跳转了继续往下走:
介绍规则的3次:
试玩的6次:
正式玩成功的10次,第11次就出flag了
最终和我们想的一样第20次就出flag:
flag:no5c30416d6cf52638460377995c6a8cf5
五,总结:
完成这个实验后又积累到了一些经验,遇到玩游戏的题一定要先看懂了是如何玩,玩懂了对整个的思路想法还是有一点帮助,进行静态分析时代码太长的话我们可以整体看一下,重点分析一下关键的代码,游戏题玩起来很困难的话可以动态调试着下断点来玩,来慢慢摸索里面的思路从而找到关键的信息,还有一定要严谨,你后面分析的每一步都要在你前面分析出的找到对应的依据,不能凭个人感觉,这样即使可能结果没跑出来,但是你可以根据你的依据反堆回去查找错误!
标签:攻防,判断,函数,gametime,跳转,text,调试,Reverse From: https://www.cnblogs.com/xyweiwen/p/17928481.html