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

包含了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,将炸弹一与炸弹二的答案保存进去,如图所示

BinaryBomb实验相关推荐

  1. 合肥工业大学—SQL Server数据库实验四:数据库的分离和附加

    数据库的分离和附加 1. 数据库分离 2. 数据库附加 1. 数据库分离 当SQL Server服务器运行时,该服务器上所有的数据库自动处于运行状态,而运行中的数据库文件是无法进行数据库文件的拷贝的. ...

  2. 解读模拟摇杆原理及实验

    解读模拟摇杆原理及实验 Interpreting Analog Sticks 当游戏支持控制器时,玩家可能会一直使用模拟摇杆.在整个体验过程中,钉住输入处理可能会对质量产生重大影响.让来看一些核心概念 ...

  3. legend位置 pyecharts_实验|pyecharts数据可视化分析-1

    1. 实验介绍 本实验主要介绍pyecharts基本特点与属性. 1.1. 实验目的 了解pyecharts功能.特点.与安装方式. 1.2. 知识点 pyecharts特点 pyecharts图表 ...

  4. 2019春第二次课程设计实验报告

    2019春第二次课程设计实验报告 一.实验项目名称: 贪吃蛇游戏编写: 二.实验项目功能描述: 这个实验主要是实现游戏的正常运行,实现的目标是对小蛇移动的控制, 同时对小蛇数据的保存,如何实现转弯的效 ...

  5. 汇编语言程序设计 实验九

    实验内容 实验一: 补全程序t1.asm,完成在屏幕上输出内存单元中的十进制两位数 ; 在屏幕上输出内存单元中的十进制两位数 assume cs:code, ds:data data segmentd ...

  6. 20172324 2018-2019-1《程序设计与数据结构》实验2报告

    20172324 2018-2019-1<程序设计与数据结构>实验2报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 曾程 学号:20172324 实验教师:王志强 ...

  7. JAVA第二次验证设计性实验报告

    [实验任务一]:素数输出 (3)实验报告中要求包括程序设计思想.程序流程图.源代码.运行结果截图.编译错误分析等内容. 1.   实验内容 (1)计算并输出3~100之间的素数. (2)编程满足下列要 ...

  8. 20172329 2017-2018-2 《程序设计与数据结构》实验五报告

    这是这学期最后一次实验了,也是学到了很多东西,希望自己可以可以善始善终,加油! 让我们开始这一篇博客吧! 20172329 2017-2018-2 <程序设计与数据结构>实验五报告 课程: ...

  9. 计算机网络实验报告建立校园网,计算机网络实验报告

    设计性实验报告 一.实验目的 通过对网络设备的连通和对拓扑的分析,加深对常见典型局域网拓扑的理解:通过路由建立起网络之间的连接,熟悉交换机.路由器的基本操作命令,了解网络路由的设计与配置. 二.背景描 ...

  10. c语言链表最高响应比优先,操作系统--最高响应比优先调度算法实验报告..doc

    操作系统--最高响应比优先调度算法实验报告. 进程调度一.实验题目与要求 编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法.实现具体包括:首先确定作业控制块的内容和组成方式:然 ...

最新文章

  1. codesmith学习总结
  2. nohup-真正的Shell后台运行
  3. 从来没有一种技术是为了解决复用、灵活组合、定制开发的问题
  4. 模拟实现unordered_mapunordered_set
  5. 机器学习实战(五)——Logistic 回归
  6. linux里的vmware16有中文吗,vmware 16.1专业版_linux版本下载_vmware 16.1下载_5分享
  7. js 获得明天0点时间戳_需要知道的JS的日期知识,都在这了
  8. Qt工作笔记-使用QFileSystemWatcher监控文件是否改变
  9. WCF创建WebService正确操作步骤详解
  10. Mysql笔记之 -- replace()实现mysql 替换字符串
  11. [SOA征文]谈谈资源端的SOA化
  12. iphone开机白苹果_「手机维修自学教程」苹果6PLUS的DFU模式故障维修技巧思路决定速度...
  13. excel计算机快捷键大全,excel表格使用技巧快捷键大全
  14. airflow的xcom使用
  15. CF85D Sum of Medians
  16. 了解公司企业:Primetics
  17. 7-2 计算Fibonacci数列的前N(N<=20)项 (10 分)
  18. 使用AES加密配置文件
  19. ( SSD ; HHD ; HDD )
  20. reflection removal

热门文章

  1. android电视直播卡顿,智能电视或电视盒子经常会在看直播的时候卡顿
  2. android 自定义锁屏凌驾于系统锁屏之上
  3. android studio 补间动画,Android动画学习(一):帧动画和补间动画
  4. Android中补间动画相关知识
  5. 移动端 touch 手机拖动 css停止问题
  6. 推荐一个巨好用的查看gihub源码的插件-Octotree
  7. 打开jsp文件出现error错误,不能查看文件内容的解决方法,亲测有效
  8. 42u的机柜供服务器安装位置,一个42U标准服务器机柜能放多少台服务器
  9. PCB Layout初学者必会知识总结(转)
  10. Python实现图形界面猜数字游戏(GUI)