计算机系统基础实验课第二次实验报告
对二进制炸弹求解过程的详细描述
首先使用objdump命令对bomb程序进行反汇编,并将汇编代码输出到asm.txt中。
阶段一、字符串比较
打开asm.txt文件,搜索到phase_1函数,可以看到以下代码。
08048b33
8048b33: 83 ec 14 8048b36: 68 7c a0 04 08 8048b3b: ff 74 24 1c 8048b3f: e8 3e 05 00 00 8048b44: 83 c4 10 8048b47: 85 c0 8048b49: 74 05 8048b4b: e8 29 06 00 00 8048b50: 83 c4 0c 8048b53: c3
sub $0x14,%esp push $0x804a07c pushl 0x1c(%esp)
call 8049082
je 8048b50
可以看出,用户输入字串指针保存在0x1c(%esp),然后调用
所以第一个炸弹的拆弹指令为:
I turned the moon into something I call a Death Star. 阶段二、循环
在asm.txt文件中可以找到phase_2函数代码如下:
08048b54
8048b54: 56 8048b55: 53 8048b56: 83 ec 2c 8048b59: 65 a1 14 00 00 00 8048b5f: 89 44 24 24 8048b63: 31 c0 8048b65: 8d 44 24 0c 8048b69: 50 8048b6a: ff 74 24 3c 8048b6e: e8 2b 06 00 00 8048b73: 83 c4 10 8048b76: 83 7c 24 04 01 8048b7b: 74 05 8048b7d: e8 f7 05 00 00 8048b82: 8d 5c 24 04 8048b86: 8d 74 24 18 8048b8a: 8b 03 8048b8c: 01 c0 8048b8e: 39 43 04 8048b91: 74 05 8048b93: e8 e1 05 00 00 8048b98: 83 c3 04 8048b9b: 39 f3 8048b9d: 75 eb 8048b9f: 8b 44 24 1c 8048ba3: 65 33 05 14 00 00 00 8048baa: 74 05
push %esi push ?x
sub $0x2c,%esp mov %gs:0x14,êx mov êx,0x24(%esp) xor êx,êx
lea 0xc(%esp),êx push êx
pushl 0x3c(%esp)
call 804919e
je 8048b82
cmp êx,0x4(?x)
je 8048b98
jne 8048b8a
je 8048bb1
8048bac: 8048bb1: 8048bb4: 8048bb5: 8048bb6: e8 df fb ff ff call 8048790 <__stack_chk_fail@plt> 83 c4 24 add $0x24,%esp 5b pop ?x 5e pop %esi c3 ret
根据call 804919e
cmpl $0x1,0x4(%esp)可以推断,输入的第一个数字是1;jne 8048b8a
测试发现结果正确。
阶段三、条件/分支 Phase_3代码如下: 08048bb7
8048bb7: 83 ec 28 sub $0x28,%esp 8048bba: 65 a1 14 00 00 00 mov %gs:0x14,êx 8048bc0: 89 44 24 18 mov êx,0x18(%esp) 8048bc4: 31 c0 xor êx,êx
8048bc6: 8d 44 24 14 lea 0x14(%esp),êx 8048bca: 50 push êx
8048bcb: 8d 44 24 13 lea 0x13(%esp),êx 8048bcf: 50 push êx
8048bd0: 8d 44 24 18 lea 0x18(%esp),êx 8048bd4: 50 push êx
8048bd5: 68 da a0 04 08 push $0x804a0da 8048bda: ff 74 24 3c pushl 0x3c(%esp)
8048bde: e8 2d fc ff ff call 8048810 <__isoc99_sscanf@plt> 8048be3: 83 c4 20 add $0x20,%esp 8048be6: 83 f8 02 cmp $0x2,êx
8048be9: 7f 05 jg 8048bf0
8048bf5: 0f 87 fc 00 00 00 ja 8048cf7
8048bff: ff 24 85 ec a0 04 08 jmp *0x804a0ec(,êx,4)