栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

2022年春季学期哈工大计算机系统实验二——二进制炸弹

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2022年春季学期哈工大计算机系统实验二——二进制炸弹

目  录

第1章 实验基本信息........................................................................................ - 3 -

1.1 实验目的....................................................................................................... - 3 -

1.2 实验环境与工具........................................................................................... - 3 -

1.2.1 硬件环境.................................................................................................... - 3 -

1.2.2 软件环境.................................................................................................... - 3 -

1.2.3 开发工具.................................................................................................... - 3 -

1.3 实验预习....................................................................................................... - 3 -

第2章 实验环境建立........................................................................................ - 7 -

2.1 Ubuntu下CodeBlocks反汇编(10分)..................................................... - 7 -

2.2 Ubuntu下EDB运行环境建立(10分)..................................................... - 7 -

第3章 各阶段炸弹破解与分析........................................................................ - 9 -

3.1 阶段1的破解与分析................................................................................... - 9 -

3.2 阶段2的破解与分析................................................................................... - 9 -

3.3 阶段3的破解与分析................................................................................. - 10 -

3.4 阶段4的破解与分析.................................................................................. - 11 -

3.5 阶段5的破解与分析................................................................................. - 12 -

3.6 阶段6的破解与分析................................................................................. - 13 -

3.7 阶段7的破解与分析(隐藏阶段)............................................................... - 15 -

第4章 总结...................................................................................................... - 19 -

4.1 请总结本次实验的收获............................................................................. - 19 -

4.2 请给出对本次实验内容的建议................................................................. - 19 -

参考文献............................................................................................................ - 20 -

第1章 实验基本信息

1.1 实验目的

熟练掌握计算机系统的ISA指令系统与寻址方式

熟练掌握Linux下调试器的反汇编调试跟踪分析机器语言的方法

增强对程序机器级表示、汇编语言、调试器和逆向工程等的理解

1.2 实验环境与工具

1.2.1 硬件环境

X64 CPU;2GHz;2G RAM;256GHD Disk 以上

1.2.2 软件环境

Windows7/10 64位以上;VirtualBox/Vmware 11以上;Ubuntu 16.04 LTS 64位/优麒麟 64位 以上;

1.2.3 开发工具

Visual Studio 2010 64位以上;CodeBlocks 64位;vi/vim/gedit+gcc

1.3 实验预习

第2章 实验环境建立

2.1 Ubuntu下CodeBlocks反汇编(10分)

CodeBlocks运行hello.c。反汇编查看printf函数的实现。

要求:C、ASM、内存(显示hello等内容)、堆栈(call printf前)、寄存器同时在一个窗口。

                                         图2-1  Ubuntu下CodeBlocks反汇编截图

2.2 Ubuntu下EDB运行环境建立(10分)

用EDB调试hello.c的执行文件,截图,要求同2.1

 

图2-2  Ubuntu下EDB截图

第3章 各阶段炸弹破解与分析

每阶段30分,密码10分,分析20分,总分不超过80分

3.1 阶段1的破解与分析

密码如下:There are rumors on the internets.

破解过程:

 

Esi的值是立即数0x403150,推测推测用户输入的字符串经过readline函数存储在edi,与stringnotequal比较,拆弹字符串救=就储存在地址0x403150

 

3.2 阶段2的破解与分析

密码如下:N,N+1,N+1+2,N+1+2+3,N+1+2+3+4,N+1+2+3+4+5

破解过程:

 

如图所示为p2的反汇编,易知函数申请了32的内存空间并调用了read six numbers函数,推测p2的参数为6个数字,指令 cmpl $0x0,(%rsp)参数和0比较小于0跳转,推测第一个传入的参数大于等于0;指令mov    $0x1,%ebx,add    $0x1,%ebx、cmp    $0x5,%ebx、jg     40144d ,推测为类似for(i=0;i<5;i++)的结构,ebx即是计数的i ;,edx是ebx-1是前一个的编号,利用地址可以得到(%rsp,%rax,4)为第i个参数用类似数组来表示,指令add    (%rsp,%rdx,4),%ecx表明后续参数的递推关系式为前一个参数加上当前的计数I(0到5),即对正整数N,二阶段炸弹拆弹字符串为N,N+1,N+1+2,N+1+2+3,N+1+2+3+4,N+1+2+3+4+5

3.3 阶段3的破解与分析

密码如下:0 472

破解过程:

 

与阶段二类似,eax为isco99sscanf的返回参数,比较eax小于等于1跳转到explode_bomb,因次传入参数的个数至少为2,且传入的参数应小于7由指令jmpq   *0x4031a0(,%rax,8)是一个间接跳转,地址0x4031a0储存着0x40148e,根据n的不同变差n*8个单位,恰好0x40148是一个命令使eax赋值为472,因此有一个0 472的拆弹密码

 

 

3.4 阶段4的破解与分析

密码如下:4 2和5 2

破解过程:

 

显然phase4接受两个数字,一个经过fun4返回值是2,另一个值为2,观察fun4函数发现传递三个变量,edi为传入的一个参数,eax,esi初始分别为14和0分别用a,b表示,函数的返回值是1/2*(signal(a-b)+a-b)+b,等于edi时退出,大于时b=1/2*(signal(a-b)+a-b)+b+1,再次调用fun4并返回结果的2倍+1,小于时a=(signal(a-b)+a-b)+b-1,调用fun4返回结果的2倍,已知结果是2,逆推猜测传入参数是4或者5,因此拆弹密码为4 2和5 2

3.5 阶段5的破解与分析

密码如下:5 115

破解过程:

 

指令and    $0xf, %eax取得第一个参数的后四位,且要求第一个参数不能是15,edx为计数器,ecx为累加,根据当次循环eax的值去寻址mov    0x4031e0(,%rax,4),%eax取到数组中的下一个不连续的元素,结束循环的条件是eax取到15时edx计数到15次,第二个参数与ecx相等。查看地址    0x4031e0(,%rax,4)的元素,观察数组有唯一确定的跳转表

 

5-12-3-7-11-13-9-4-8-0-10-1-2-14-6-15,累加和115因此得到拆弹密码5 115

3.6 阶段6的破解与分析

密码如下:5 2 4 6 3 1

破解过程:

 

观察phase6结构,调用了read_six_numbers推测输入为6个整数,首先ebp,ebx分别作为计数器形成双重循环的for结构判断输入的6个数字是否互不相同,如果有相同元素直接爆炸。

 

第二部分为将0x4052d0中储存的6个节点按照输入的1-6的6个数字编号的顺序顺次相连形成链表,这6个节点分别是:

 

第三部分为双层循环检查链表中元素是否为降序,如果非降序立刻爆炸,因次得到唯一降序的一组标号5 2 4 6 3 1为拆弹密码

3.7 阶段7的破解与分析(隐藏阶段)

密码如下:

破解过程:

 

观察phase_defused函数,发现有一个与0x403382地址储存的字符串匹配的步骤,怀疑这就是进入隐藏问题的密码。Gdb查看内存中的字符串,发现密码为DrEvil

 

 

观察secret_phase,要求输入的数字小于等于1001,且要求带入进fun7的输出结果为7

 

根据带入参数与rdi的大小关系带入rdi的左或右子树,若相等返回0,若小于返回fun7的2倍,若大于返回fun7的2倍加1.访问0x4050f0观察二叉树的结构。

 

 

将结果7分解为((0*2+1)*2+1)*2+1,故要求输入值是根节点的右子树的右子树的右子树,即1001为拆弹密码

第4章 总结

4.1 请总结本次实验的收获

更加深入理解了汇编语言的指令和不同c语句对应的在汇编语言下的形式,

学会了edb等工具的使用

4.2 请给出对本次实验内容的建议

Ppt里还是有打错的地方,有一些指令希望能有更详细的注释

注:本章为酌情加分项。

参考文献

为完成本次实验你翻阅的书籍与网站等

[1]  CSAPP大黑书

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/836849.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号