二进制炸弹–拆弹实验
这是我们学校计算机系统基础课程的大作业实验,以下是我总结的每一关的通关方法。对于汇编语言的了解还不够深入,解释不好的地方还请大家批评指正。
那,我们就出发吧~
大作业要求
该大作业为闯关实验,共需破解7关。下载以自己学号命名的<学号>.tar压缩文件,在Debian系统里进行解压缩(例:$tar -xvf 987654321.tar)后,通过对可执行文件bomb反汇编,分析汇编代码并获取相关线索,从而破解每一关的输入内容,完成闯关。
实验一. 字符串比较
phase_0
使用 objdump 生成 bomb 程序的汇编代码,下图将汇编代码定位在给出了第一关字符串 对比的地方<phase_0>。可以看出在调用<string_not_equal>函数前,现将要参与对比的两个 字符串压入栈中,push $0x804b18c 就是存放内置字符串的首地址,pushl 0x8(%ebp)是用户 输入字符串的首地址。
gdb 进行调试,断点设置在 b phase_0。这时根据汇编语句中发现的内置字符串首地址 0x804b18c,使用 examine 指令显示这个字符串为:All I/O devices are modeled as files.
单步或继续执行后续的代码时输入这个字符串,结果显示成功过关。
第零关很easy,细心一点输入正确就好啦hhh
实验二.浮点表示
phase_1
由 gdb 调试得知,在第二关需要输入的是两个整数。整数0x2e0f52aa使用单精度浮点数格式表达为0x4E383D4B,分别将高低位字节转换为十进制整数后为15691和20024。按照sscanf()指定的格式输入15691 20024后,回车。