二进制炸弹大作业

二进制炸弹

花了一天工夫完成了二进制炸弹;又花了一天工夫写完了实验报告,真的是痛并快乐着吧(嘿嘿)

实验内容
二进制炸弹是作为一个目标代码文件提供给学生们的程序,运行时,它提示用户输入6个不同的字符串。如果其中任何一个不正确,炸弹就会“爆炸”:打印出一条错误信息。学生通过反汇编和逆向工程来确定是哪六个字符串,从而解除他们各自炸弹的雷管。
该作业需要有比较好的汇编语言阅读能力,涉及理论课第3章的所有知识内容。

前序步骤 :
1、 反编译bomb并打开bomb.txt文件进行搜索:
在这里插入图片描述

2、 通过【查找】功能查找主程序并找到第一次读取键盘输入:
在这里插入图片描述

3、 在程序中记录下每一个phase函数的起始位置,在调用每一个phase前设置断点,并在explode_bomb也设置断点,防止在gdb中调试时爆炸:
在这里插入图片描述
在这里插入图片描述
注释:进入程序后加载两句话,随后先输入任意内容执行程序
4、 解读main主程序中关于phase_1程序的上下文
在这里插入图片描述

一、Phase_1:
(1)【查找】phase_1的汇编代码,并理解语句
在这里插入图片描述

解答此题关键在于理解<strings_not_equal>函数以及0x8048de4到0x8048de8之间的代码
(2)很明显,strings_not_equal函数判断字符串是否相等;而0x8048de40x8048de8在R【eax】中内容相等时跳转到phase_1+0x22的位置,否则爆炸,因此重点是验证phase_1的栈帧
在这里插入图片描述

查完寄存器内容可知,在0x804b4e0处存储了我们输入的字符串,那么在0x804a229处便存储了需要比较的字符串,调用操作查看其中内容知其值为 ” Crikey! I have lost my mojo!
运行一遍查看是否能通过:
在这里插入图片描述

-----------------------------------------------------------------------------------------

二、phase_2:
(1)查看phase_2的汇编语言,并将其大致分块【“判断”的重点主要为红色下划线处、橙色和红色方框处
在这里插入图片描述

(2)第一个重点为<read_six_number>处,通过查阅汇编代码,得知其目的为:读入并确认读入的数字是否为六个整数,若是则通过,否之则爆炸
在这里插入图片描述

(3)第二个重点为黄框处cmpl $0x0 0xffffffe0(%ebp) 将我们输入的第一个数与0比较,如果jns【即为非负数】则跳转到0x8048d42,否则爆炸 说明读入的第一个数为非负数,我选择数字0
在这里插入图片描述

(4)最重要的是第三个重点 红色方框处
在这里插入图片描述
分析代码知,通过一个循环将R[eax]【其中存

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司_夏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值