ebCTF bin200 Writeup

来源:互联网 发布:linux源码编译mysql 编辑:程序博客网 时间:2024/06/03 16:14

刚接触CTF,做了一道简单的逆向题(题目链接)。这道题是一个掷骰子的游戏,只要能掷出一串特定的值就能得到flag。

这里写图片描述

0x01 IDA加载分析

使用IDA加载二进制文件,打开Strings window查看字符串。

这里写图片描述

通过这些字符串可以看到只有依次掷出3-1-3-3-7就有可能得到flag,但是要随机掷出这些数字明显不可能,因为其中有个7!为此,需要跟进字符串“[*] You rolled a three! Good!”引用处查看程序的处理逻辑。

这里写图片描述

从图中可以看到,程序通过判断[ebp+var_5C]中的值是否为3进行跳转,如果为3则进入右边分支,程序继续执行;否则,程序跳转至loc_40198B提示掷出的数字不是3,游戏结束!

这里写图片描述

0x02 修改指令

理清程序的逻辑后,采用最简单的办法控制程序的执行路径——修改指令。首先,通过菜单栏中Options/General/Disassembly/Number of opcode bytes设置IDA使其显示指令的机器码。jnz的机器码为75,只需将其改为jz的机器码74。修改方法:Edit/Patch program/Change byte。

通过“[*] You rolled a one! Very nice!”等提示信息找到其他几处判断语句,使用相同的方法修改机器码。但是有两处为near jump,jnz的机器码为0F 85,将其修改为0F 84即可。

修改完后Edit/Patch program/Apply patches to input file保存修改后的文件,运行便能得到flag:ebCTF{64ec47ece868ba34a425d90044cd2dec}。

这里写图片描述

0 0
原创粉丝点击