计算机系统基础二进制炸弹实验报告,西北工业大学_计算机系统基础_实验报告_第2次...

西北工业大学数据库实验报告

计算机系统基础实验课第二次实验报告

对二进制炸弹求解过程的详细描述

首先使用objdump命令对bomb程序进行反汇编,并将汇编代码输出到asm.txt中。

1-309-png_6_0_0_0_0_0_0_892.979_1262.879-893-0-0-893.jpg

阶段一、字符串比较

打开asm.txt文件,搜索到phase_1函数,可以看到以下代码。

08048b33 :

8048b33: 83 ec 14 sub $0x14,%esp

8048b36: 68 7c a0 04 08 push $0x804a07c

8048b3b: ff 74 24 1c pushl 0x1c(%esp)

8048b3f: e8 3e 05 00 00 call 8049082

8048b44: 83 c4 10 add $0x10,%esp

8048b47: 85 c0 test %eax,%eax

8048b49: 74 05 je 8048b50

8048b4b: e8 29 06 00 00 call 8049179

8048b50: 83 c4 0c add $0xc,%esp

8048b53: c3 ret

可以看出,用户输入字串指针保存在0x1c(%esp),然后调用,待返回后,测试返回值,若equal则进入下一phase,否则,从可知该函数用于比较两函数的值,因此需要两个字串作为输入,上面代码中,pushl 0x1c(%esp)用于传递用户字串指针,则push $0x804a07c自然是传递比较字串的指针了。打开gdb,x/s 0x80497c0, 可以直接查看到该指针指向的子符串: