当前位置:网站首页>CTF逆向入门题——掷骰子

CTF逆向入门题——掷骰子

2022-07-06 09:33:00 TiggerRun

题目传送:Beat our dice game and get the flag

0x00 查壳

在这里插入图片描述
使用PEiD确定程序未加壳

0x01 OD动态调试

打开后我先是F7 F8调试了一会儿,没有啥思路。
就使用了字符串搜索法进行定位。
可以知道这是个掷骰子的问题,并且要掷出 “3-1-3-3-7”才能拿到Flag。
并且这5次掷骰子是分开写的,根据每次掷骰子定位代码的位置,发现cmp后紧跟着jnz,通过下断可以知道这个判断就是用于判断掷出的值和程序中的值是否相同。

0x02 NOP jnz(成功)

简单暴力的把jnz跳转命令NOP掉,程序不就可以继续运行了嘛~香!
在这里插入图片描述在这里插入图片描述

0x03 修改跳转(失败)

在这里插入图片描述
当然原理还是使用字符串分析

通过最后的一个判断和跳转,可以定位出蓝色框内就是成功的逻辑,那是否可以让程序直接跳转到这里运行呢???

跳转地址 0x004029AD
在这里插入图片描述
下断点可以知道,程序走到这一步会要我们输入,但是当我们在这里直接修改汇编进行跳转,程序还没走完就崩溃了,可能是需要的变量没声明???

我就想在第一次做判断的时候跳转,这样可能程序的变量都已经定义完成了。
在这里插入图片描述
但是结果flag是空的。
原因分析:

  1. 跳转的位置不够早,flag还没计算好…
  2. 此路不通,flag是根据前面5个函数算的(搞过反爬虫的加密都知道,比如某宝的js时时刻刻在循环计算一些参数,不按流程来就是死路一条)

想到可以看看最后一次掷骰子后程序的逻辑是怎么样的。
在这里插入图片描述
第七次错误跳转到 0040270A
发现代码块最后一句为跳转到 00402870
在这里插入图片描述
然后再将第一次判断错误的跳转地址改为 00402870
在这里插入图片描述
这时候提示… something wrong,当然有问题,我们只走了1个函数。在最后还有一个cmp。想着应该把这个jnz给nop了就OK了吧哈哈哈哈。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现实很残酷,最终flag未能成功出来,这说明一点,这个flag是来自前5个函数分别计算的!!!

只是分享了思路,虽然这种思路没能成功拿到flag

原网站

版权声明
本文为[TiggerRun]所创,转载请带上原文链接,感谢
https://blog.csdn.net/shipsail/article/details/104305563