BinaryBomb实验

通过逆向工程分析,拆解二进制炸弹程序

包含了7个阶段以及1个隐藏阶段,分别集中考察对以下二进制程序表示各方面的理解和掌握:

      1. 阶段0:字符串比较
      2. 阶段1:浮点表示
      3. 阶段2:循环
      4. 阶段3:条件/分支
      5. 阶段4:递归调用和栈
      6. 阶段5:指针
      7. 阶段6:链表/指针/结构
      8. 隐藏阶段:只有在阶段4的拆解字符串后再附加一特定字符串后才会出现(作为最后一个阶段)

 

使用objdump反汇编指令反汇编bomb,并保存在bomb.asm文件中

阶段0:字符串比较

1. 任务描述:通过phase_0的反汇编代码找出要输入的字符串。

2. 实验设计:利用gdb结合断点来动态地分析。

3. 实验过程:

观察phase_0的反汇编代码,如图2.1所示:

 

图2.1

在调用strings_not_equal对比字符串之前,有两个压栈的指令,其中一个是将函数入参送入栈中,另一个地址作为参考字符串地址被送入了堆栈,函数入参应该就是输入的字符串所在地址,另一个地址就是正确字符串的首址,于是在phase_0处下个断点,然后运行,随意输入一个字符(此处为t),触发断点,再用x命令查看字符串,如图2.2所示

 

图2.2

重新执行程序,输入字符串“Linkers generate executable object files.”结果入图2.3所示

 

图2.3

如图2.3所示,阶段一拆弹成功

阶段1:浮点表示

1. 任务描述:通过phase_1的反汇编代码推断第二阶段要输入的数据

2. 实验设计:利用gdb结合断点来动态地分析,并观察各类寄存器的运行时的数据状态

3. 实验过程:

观察phase_1的反汇编代码,如图2.4所示:

 

 图2.4

通过分析sscanf函数可知,要求输入的是两个%d类型数据,如图2.5

图2.5

在phase_1设置断点,运行至断点处,随意输入两个数引发断点。使用ni进行单步调试,到第一步cmp比较时,使用info registers查看寄存器内容。如图

 

 

eax为输入值111,则edx 20039则是第一个要输入的数字。

 

同理得,第二个要输入的数字为31958

重新执行程序,结果如图:

如图所示,阶段二拆弹成功。

创建解码文本bomb3.txt,将炸弹一与炸弹二的答案保存进去,如图所示

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值