- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二进制炸弹实验报告
实验目的:
通过二进制炸弹实验,熟悉汇编语言及其机器码表示,熟悉GDB调试工具。
实验简介:
这个实验是一个过关游戏,共有6关。在一台Linux服务器上有一个可执行的炸弹文件,运行它游戏就开始了。每一关相当于是一扇门,要求你输入密码,只有密码正确才能通过,进入下一关,否则它会“爆炸”,每输入错误一次就会“爆炸”一次,服务器会记录你“爆炸”的次数,“爆炸”次数越多扣分越多。你是一位“黑客”,你所拥有的所有资源就是这个可执行的炸弹文件,你需要破译这个炸弹文件,从中找出每一关的过关密码,如果破译错误,你需要付出相应的代价。
实验流程:
使用PuTTy登录并修改密码
PuTTY 是一套免费的SSH/Telnet 程序,相当于一个跨平台的远程登录工具,通过它登录远程Linux主机进行实验操作。
登录后通过passwd username指令修改密码。
反汇编并利用winscp工具下载反汇编代码
通过ls指令显示当前目录下的文件,找到压缩包bomb56.tar,即目标炸弹。通过tar xvf bomb56.tar解压此压缩包,然后再通过ls显示解压出的文件:bomb、bomb.c和README。
通过objdump –d bomb bomb.txt将炸弹程序反汇编并重定向到bomb.txt,通过ls显示反汇编出的代码文件bomb.txt。
打开winscp工具,登录到远程主机,将远程主机上的文件下载到本机上,便于查看。
查看目标文件并做好调试准备
文件介绍:
bomb.txt:反汇编得到的代码文件,也是主要研究的目标文件。
bomb.c:主函数,通过调用每一关的函数实现,未显示每关的具体代码。
bomb:炸弹程序,当调试得出每一关的密码后打开程序运行来拆炸弹。
通过gdb bomb指令进入gdb调试环境。
大致浏览反汇编代码,可以观察到整个程序一共有六关,分别为phase_1到phase_6,并有一关隐藏关secret_phase,每次输入错误时会调用引爆函数explode_bomb,因此为避免调试时引爆炸弹,需要首先在引爆函数前设置断点,即break explode_bomb。
第一关炸弹拆除
08048c10 phase_1:
8048c10: 83 ec 1c sub $0x1c,%esp
//取0x8049a04处的内容存入%esp+4
8048c13: c7 44 24 04 04 9a 04 movl $0x8049a04,0x4(%esp)
8048c1a: 08
//取用户输入的内容存入%esp
8048c1b: 8b 44 24 20 mov 0x20(%esp),%eax
8048c1f: 89 04 24 mov %eax,(%esp)
//调用字符串比较函数
8048c22: e8 1d 04 00 00 call 8049044 strings_not_equal
//判断%eax是否为0,为0跳转,不为0引爆
8048c27: 85 c0 test %eax,%eax
8048c29: 74 05 je 8048c30 phase_1+0x20
8048c2b: e8 a3 09 00 00 call 80495d3 explode_bomb
//撤销栈桢,返回
8048c30: 83 c4 1c add $0x1c,%esp
8048c33: c3 ret
程序流程:
取内存地址0x8049a04处的内容;
取用户输入的内容(即密码);
比较两者的值,相等则%eax置为0,进入下一关,不相等则调用引爆程序引爆炸弹。
破解思路:
通过p (char *) 0x8049a04指令取出该地址的字符串,得到:
因此第一关的密码:For NASA, space is still a high priority.
第二关炸弹拆除
08048c34 phase_2:
8048c34: 53
文档评论(0)