哈工大计算机系统实验三——二进制炸弹
实验三还是挺好玩的,拆炸弹,这个实验每个人的炸弹都不一样,所以只能靠自己啦。
可以下载一个工具(忘了叫啥),可以将汇编语言直接转换为c语言,然后直接破解炸弹。
第六个炸弹我们都是1-6个数字的一个排序,所以。。。就算你没看懂汇编语言,你也可以以试错的方式把答案试出来哦。
把火炬传下去!
实验报告
实 验(三)
题 目 Binary Bomb
二进制炸弹
专 业 计算机类
学 号 xxx
班 级 xxx
学 生 xxxx
指 导 教 师 xxxx
实 验 地 点 xxxx
实 验 日 期 xxxx
计算机科学与技术学院
目 录
第1章 实验基本信息............................................................................................. - 3 -
1.1 实验目的......................................................................................................... - 3 -
1.2 实验环境与工具............................................................................................. - 3 -
1.2.1 硬件环境................................................................................................. - 3 -
1.2.2 软件环境................................................................................................. - 3 -
1.2.3 开发工具................................................................................................. - 3 -
1.3 实验预习......................................................................................................... - 3 -
第2章 实验环境建立............................................................................................. - 4 -
2.1 Ubuntu下CodeBlocks反汇编(10分).................................................. - 4 -
2.2 Ubuntu下EDB运行环境建立(10分).................................................... - 4 -
第3章 各阶段炸弹破解与分析............................................................................. - 5 -
3.1 阶段1的破解与分析..................................................................................... - 5 -
3.2 阶段2的破解与分析..................................................................................... - 5 -
3.3 阶段3的破解与分析..................................................................................... - 5 -
3.4 阶段4的破解与分析..................................................................................... - 5 -
3.5 阶段5的破解与分析..................................................................................... - 5 -
3.6 阶段6的破解与分析..................................................................................... - 5 -
3.7 阶段7的破解与分析(隐藏阶段).................................................................. - 6 -
第4章 总结............................................................................................................. - 7 -
4.1 请总结本次实验的收获................................................................................. - 7 -
4.2 请给出对本次实验内容的建议..................................................................... - 7 -
参考文献................................................................................................................... - 8 -
第1章 实验基本信息
1.1 实验目的
熟练掌握Linux下调试器的反汇编调试跟踪分析机器语言的方法
1.2 实验环境与工具
1.2.1 硬件环境
X64 CPU;2GHz;2G RAM;256GHD Disk 以上
1.2.2 软件环境
Windows7 64位以上;VirtualBox/Vmware 11以上;Ubuntu 16.04 LTS 64位/优麒麟 64位;
1.2.3 开发工具
GDB/OBJDUMP;EDB;KDD等1.3 实验预习
了解实验的目的、实验环境与软硬件工具、实验操作步骤,复习与实验有关的理论知识。
请写出C语言下包含字符串比较、循环、分支(含switch)、函数调用、递归、指针、结构、链表等的例子程序sample.c。
用gcc –S或CodeBlocks或GDB或OBJDUMP等,反汇编,比较。
修改编译选项-O (缺省2)、Og、O0、O1、O2、O3、Og,-m32/m64。再次查看生成的汇编语言与原来的区别。
堆栈访问[rbp+-n]或[rsp+n]。-fno-omit-frame-pointer。
GDB命令详解 –tui模式 ^XA切换 layout改变等等
第2章 实验环境建立
2.1 Ubuntu下CodeBlocks反汇编(10分)
CodeBlocks运行hellolinux.c。反汇编查看printf函数的实现。
要求:C、ASM、内存(显示hello等内容)、堆栈(call printf前)、寄存器同时在一个窗口。
2.2 Ubuntu下EDB运行环境建立(10分)
用EDB调试hellolinux.c的执行文件,截图,要求同2.1
第3章 各阶段炸弹破解与分析
3.1 阶段1的破解与分析
密码如下:Crikey! I have lost my mojo!
1).先运行可执行文件bomb,随意输入一些东西,发现程序被引爆,通关密码错误。
3).一关一关来,进入edb调试界面,查看phase_1的汇编代码。首先先输入一个试测的答案,然后再通过edb单步进入的按键进入bomb! phase_1的子程序中,如截图所示。
3.2 阶段2的破解与分析
n n+1 n+1+2 n+1+2+3 n+1+2+3+4 n+1+2+3+4+5(n>=0)
1)、首先栈帧指针%esp、%ebp以及寄存器%esi、%ebx入栈,接着开了40字节(16进制的28等于10进制的48)的内存,栈帧结构中已经明确标出。
3.3 阶段3的破解与分析
这条指令根据输入的第一个参数,跳转到不同的地方。说明这是一个switch语句。推测有多个答案,第一个参数不同会导致跳往不同的地方。
于是我输入第一个参数为2,发现跳转的指令如下,并一步一步跟踪:
可以看出 第一个参数(2) +0x387-0x153+0x153-0x153+0x153-0x153=-227
再比较-227和第二个参数是否相同,如果不相同则爆炸,因此第二个参数为-227.
3.4 阶段4的破解与分析
破解过程:phase的汇编代码和func4的汇编代码如图所示
如图所示,可以看到首先在堆栈上给参数分配存储空间,参数1和参数2分别分配在rbp-8和rbp-4上。
从图中可以看出,把第二个参数赋值给寄存器eax,并分别和1和4进行比较,当eax小于等于1和大于4的时候都会bomb!!!说明第二个参数的值应该大于1小于等于4。
把第一个参数赋值给edi,把第二个参数赋值给ebx,然后分别把参数传给func4函数并调用func4函数。
分析func4第一条指令可知,如果第一个参数为0,则返回值为0
分析第二条指令可得,如果第一个参数等于1,则函数返回第二个参数即edi
当第一个参数大于1时,函数返回值为func4(第一个参数-1,第二个参数)+func4(第一个参数-2,第二个参数)+第二个参数。
3.5 阶段5的破解与分析
第几个元素 |
0 |
1 |
2 |
3 |
4 |
5 |
Ascall码 |
0x_9 |
0x_f |
0x_e |
0x_5 |
0x_6 |
0x_7 |
对应的字符 |
I,i,9,), |
/,?,O,_,o, |
,.,>,^,~ |
%,5,E,e |
&,6,F,f |
1,g,G |
循环的初始条件是eax=0,终止条件是eax>5,每次循环结束eax的值会自动加1 。
分析循环语句: rbp-0x17为首地址的数组用s来表示,0x4031b0位首地址的数组用r来表示。rbx为首的地址的数组用input来表示(数组元素均是输入的六个字符)
通过查看0x4031b0的地址内容可以得出数组r[19]=”maduiersnfotvbylWow”.
char r[19]="maduiersnfotvbulWow";void phase_5(char *input){char s[7];if(string_length(input)!=6)explode_bomb();elsefor (int edx=0;edx<5;edx++){int eax=(int )(input[edx]&0xf);s[edx]=r[eax];s[7]="\0"}if(string_not_equal(s,"flyers"))expolde_bomb();}
接下来,调用string_not_equal函数,判断esi和edi是否相等,不相等爆炸,相等直接返回值。查看esi的值为:flyers
第几个元素 |
0 |
1 |
2 |
3 |
4 |
5 |
Ascall码 |
0x_9 |
0x_f |
0x_e |
0x_5 |
0x_6 |
0x_7 |
对应的字符 |
I,i,9,), |
/,?,O,_,o, |
,.,>,^,~ |
%,5,E,e |
&,6,F,f |
1,g,G |
因此最后的密码就是 按上述顺序依次抽取每个元素位置对应的一种元素构成的组合即可。比如 9/>567 , )_^%&g , 等等验证如图:
3.6 阶段6的破解与分析
该指令是对输入的六个数据依次判别这六个数据是否有相等的数据,如果有,直接爆炸。说明输入的六个数据均不相等。
通过对剩下的指令分析可以得出:phase_6主要就是对链表的重新排序。通过用户输入的数据来对原来链表的数据按从小到大的顺序排列。
这个指令表明需要将地址为0x4052d0的数据赋值给edx。推测这就是所需要排序的链表的首节点。打印它的内容如下:
可以看到链表共有6个节点,大小关系为:node5<node6<node4<node1<node3<node2
因此输入的六个数据应该为5 6 4 1 3 2才可以将链表重新排序。
3.7 阶段7的破解与分析(隐藏阶段)
第4章 总结
4.1 请总结本次实验的收获
首先,通过本次实验学会了如何使用gdb和edb,能够自主的分析出汇编代码的意思,进而推断出c语言代码。会读懂汇编代码了。
4.2 请给出对本次实验内容的建议
建议老师可以多讲一些其他的edb指令的使用,还可以讲一下gdb的使用.
参考文献
[1] 林来兴. 空间控制技术[M]. 北京:中国宇航出版社,1992:25-42.
[2] 辛希孟. 信息技术与信息服务国际研讨会论文集:A集[C]. 北京:中国科学出版社,1999.
[4] 谌颖. 空间交会控制理论与方法研究[D]. 哈尔滨:哈尔滨工业大学,1992:8-13.
[5] KANAMORI H. Shaking Without Quaking[J]. Science,1998,279(5359):2063-2064.
哈工大计算机系统实验三——二进制炸弹相关推荐
- 计算机系统实验:二进制炸弹+缓冲区炸弹 (自我学习笔记)
本来没想写个博客,结果得知还要验收,发现自己全忘了,那就趁着复习的功夫再捋一遍吧>-< 一.使用工具:IDA-pro 简单使用方式: 1.打开IDA,open需要反汇编的exe. 选则wi ...
- 哈工大计算机系统实验二——DataLab数据表示
计算机系统实验二特别难,和上一届的实验不一样,没有学长的火炬,当时做的时候特别崩溃.幸好有一帮志同道合的伙伴们,一起慢慢把实验解决了. 把火炬传下去! 实验报告 实 验(二) 题 目 Data ...
- 哈工大计算机系统实验一:计算机系统漫游
计算机系统实验一:计算机系统漫游 寒假直接copy文档上传,有错误很正常(有对不上的地方请私聊我改正一下) 把火炬传下去把! 实验报告 实 验(一) 题 目 计算机系统漫游 专 业 ...
- 计算机系统基础实验——拆除二进制炸弹
实验简要介绍: 该实验是书籍深入理解计算机操作系统中最有趣的实验之一,主要使用 gdb来拆解二进制(或者说程序)的一个文件,了解其运行逻辑.我们对这个程序的了解有: 有六个关卡,分别是 ph ...
- 哈工大计算机系统实验六——高速缓冲器模拟
实验报告 实 验(六) 题 目 Cachelab 高速缓冲器模拟 专 业 xxxx 学 号 xxxx 班 级 xxxx 学 生 xxxx 指 导 教 师 x ...
- 山东大学 2020级计算机系统原理——拆解二进制炸弹
写在前面 第一次拿到这个实验还是有点慌!之前没见过,不过还是慢慢做过来了. 这是个需要耐心的过程,请一定静下心来哦! 环境及配置 环境:Ubuntu 20.04 + GDB 调试工具 可参考配置:GD ...
- 计算机系统实验三——buflab(缓冲区实验)
实验题目 buflab 实验目的 通过本次实验熟悉IA-32调用约定和堆栈组织. 学习缓冲区溢出攻击原理,对实验室目录中的一个可执行文件应用一系列的缓冲区溢出攻击. 通过实验获得使用通常用于利用操作系 ...
- 哈工大计算机系统实验七——微壳
实验报告 实 验(七) 题 目 TinyShell 微壳 专 业 计算机类 学 号 xxxx 班 级 xxxx 学 生 xxxx 指 导 教 师 xxxx ...
- 哈工大计算机系统实验四——链接
链接这一块呢,先看了李春凤老师的慕课,然后看一遍课本,然后来做实验,感觉真的懂了一样 把火炬传下去! 实验报告 实 验(四 题 目 LinkLab 链接 专 业 xxxx 学 ...
- 国外计算机课程lab,计算机系统实验之bomblab
今天刚刚验收CSAPP实验3,趁着余温,记录一下这个实验,顺便回顾下CSAPP课程的相关知识. 实验目的 1.使用gdb工具反汇编出汇编代码,结合c语言文件找到每个关卡的入口函数.然后分析汇编代码,分 ...
最新文章
- labview简易计算机实验报告,labview实验报告..doc
- 帝国cms75商城包含电脑端手机端h5微信小程序的界面功能演示
- C++ transform 浅析
- Python单元测试最佳实践
- VC函数中的延时操作
- C++17新特性之std::string_view
- 信息安全工程师笔记-综合知识冲刺(一)
- Bristol的第18篇密码学
- the art of seo(chapter seven)
- IP一键替换[非原创]
- 计算机系统操作权限,电脑修改系统时间提示没有操作权限的解决办法
- 深圳外贸企业出口退税申报办理流程,外贸企业出口退税申报流程
- 前端过滤特殊字符、表情包
- 中国新鲜杏子行业市场供需与战略研究报告
- CSFB和SRVCC概念解释
- 如何解决“无法连接到文件共享,因为它不安全。 此共享需要旧的 SMB1 协议”问题
- Window10下VS2019编译 Chromium
- 随机信号处理的一些归纳
- 千克 磅 磅 千克 的转换
- 机器视觉设计,如何正确的选择相机和镜头?
热门文章
- 转 C++异常机制的实现方式和开销分析 白杨 http://baiy.cn
- Ubuntu 查看系统版本
- TSP、MTSP问题遗传算法详细解读及python实现
- 学习日志day44(2021-09-08)(1、Ajax跨域操作 2、Ajax接收json数据 3、JQuery和Ajax 4、使用JavaScript模板简化操作)
- 【电信学】【2011.06】​基于空时空频编码的MIMO-OFDM通信信道估计与性能分析
- 主分区、扩展分区、逻辑分区和活动分区的区别
- chainlink2022年春季编程马拉松
- QThread 线程终止
- 野火指南者WiFi模块代码的简单改写,实现LED定时闪耀
- 佳能打印机imageRUNNER系列 2206AD驱动安装