欢迎来到天天文库
浏览记录
ID:11733046
大小:129.80 KB
页数:25页
时间:2018-07-13
《二进制炸弹实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、二进制炸弹实验报告实验目的:通过二进制炸弹实验,熟悉汇编语言及其机器码表示,熟悉GDB调试工具。实验简介:这个实验是一个过关游戏,共有6关。在一台Linux服务器上有一个可执行的炸弹文件,运行它游戏就开始了。每一关相当于是一扇门,要求你输入密码,只有密码正确才能通过,进入下一关,否则它会“爆炸”,每输入错误一次就会“爆炸”一次,服务器会记录你“爆炸”的次数,“爆炸”次数越多扣分越多。你是一位“黑客”,你所拥有的所有资源就是这个可执行的炸弹文件,你需要破译这个炸弹文件,从中找出每一关的过关密码,如
2、果破译错误,你需要付出相应的代价。实验流程:一、使用PuTTy登录并修改密码lPuTTY是一套免费的SSH/Telnet程序,相当于一个跨平台的远程登录工具,通过它登录远程Linux主机进行实验操作。l登录后通过passwdusername指令修改密码。二、反汇编并利用winscp工具下载反汇编代码l通过ls指令显示当前目录下的文件,找到压缩包bomb56.tar,即目标炸弹。通过tarxvfbomb56.tar解压此压缩包,然后再通过ls显示解压出的文件:bomb、bomb.c和README。
3、l通过objdump–dbomb>>bomb.txt将炸弹程序反汇编并重定向到bomb.txt,通过ls显示反汇编出的代码文件bomb.txt。l打开winscp工具,登录到远程主机,将远程主机上的文件下载到本机上,便于查看。一、查看目标文件并做好调试准备l文件介绍:bomb.txt:反汇编得到的代码文件,也是主要研究的目标文件。bomb.c:主函数,通过调用每一关的函数实现,未显示每关的具体代码。bomb:炸弹程序,当调试得出每一关的密码后打开程序运行来拆炸弹。l通过gdbbomb指令进入gd
4、b调试环境。l大致浏览反汇编代码,可以观察到整个程序一共有六关,分别为phase_1到phase_6,并有一关隐藏关secret_phase,每次输入错误时会调用引爆函数explode_bomb,因此为避免调试时引爆炸弹,需要首先在引爆函数前设置断点,即breakexplode_bomb。二、第一关炸弹拆除08048c10:8048c10:83ec1csub$0x1c,%esp//取0x8049a04处的内容存入%esp+48048c13:c7442404049a04movl$
5、0x8049a04,0x4(%esp)8048c1a:08//取用户输入的内容存入%esp8048c1b:8b442420mov0x20(%esp),%eax8048c1f:890424mov%eax,(%esp)//调用字符串比较函数8048c22:e81d040000call8049044//判断%eax是否为0,为0跳转,不为0引爆8048c27:85c0test%eax,%eax8048c29:7405je8048c308
6、048c2b:e8a3090000call80495d3//撤销栈桢,返回8048c30:83c41cadd$0x1c,%esp8048c33:c3ret程序流程:1.取内存地址0x8049a04处的内容;2.取用户输入的内容(即密码);3.比较两者的值,相等则%eax置为0,进入下一关,不相等则调用引爆程序引爆炸弹。破解思路:通过p(char*)0x8049a04指令取出该地址的字符串,得到:因此第一关的密码:ForNASA,spaceisstillahighpri
7、ority.一、第二关炸弹拆除08048c34:8048c34:53push%ebx8048c35:83ec38sub$0x38,%esp8048c38:8d442418lea0x18(%esp),%eax8048c3c:89442404mov%eax,0x4(%esp)//取用户输入的内容,存入%esp8048c40:8b442440mov0x40(%esp),%eax8048c44:890424mov%eax,(%esp)//调用函数read_six_numbers8048
8、c47:e88c0a0000call80496d8//比较第一个输入的的数是否为18048c4c:837c241801cmpl$0x1,0x18(%esp)//若为1则跳转下一步,否则引爆8048c51:7405je8048c588048c53:e87b090000call80495d3//设置循环变量初始值%ebx=18048c58:bb01000000mov$0x1,%ebx//循环开始//保存当前循
此文档下载收益归作者所有