逆向工程【二进制炸弹】

二进制炸弹任务描述

"二进制炸弹包含若干个阶段,每个阶段需要输入特定的字符串,所有输入正确则炸弹被排除,否则….."

拆弹的任务也就是找出这些字符串将字符串记录到solution.txt文件中,用换行区别不同阶段的字符串,

Linux环境下可按下列方式验证拆弹结果:

主要方法

objdump反汇编与gdb调试。 

分析流程

已知数据有编译好的二进制可执行文件bomb,也就是反汇编目标文件,以及bomb.c文件,用于辅助理解代码。

查看bomb.c可知程序利用phase_*函数(*为1~6) 检查输入字符串是否合法,不合法就引爆炸弹。

bomb.c没有给出phase的源码,我们实际的任务就是逆向出每个phase的检查规则,构造出合法字符串。

首先使用www.wityx.com反汇编得到bomb的汇编文件,

以下将逐个分析phase1-phase6。

phase1【字符串对比】

 <phase_1>汇编段前三行申请了8字节栈空间,

movl指令在高4字节存入了0x80499a8处的一份数据,随后的两条mov指令将我们提供的phase1的参数存入了栈的低4字节,

紧跟着一条call指令,跳转到<strings_not_equal>处,显然是在进行字符串对比,

通过分析我们可以得到,phase_1实际上是将输入参数与0x80499a8处存储的数据做对比,

在汇编文件中,数据段的内容并没有包含,所以我们需要通过gdb断点输出该处的存储数据,

断点处输出可以得到0x80499a8处的数据,即phase_1的字符串答案I turned the moon into something I like to call a Death Star.

phase2【循环数字】

从8048bbe行可以看出,phase_2的执行与读取6个数字有关,那么输入也应该是6个数字。

从8048bc3、8048bf0、8048bf3行可以得到phase_2的执行,进行了3次循环,也就是6个输入数字进行了3次对比。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值