计算机系统原理 Bomb实验 炸弹一/phase_1

Bomb 日志

实验准备:

打开bomb.c文件,发现文件中只有主函数,没有我们需要闯关的具体代码,所以考虑如何通过bomb文件得到六关的具体代码,在linux中通过反汇编得到bomb的汇编代码,从第一关开始阅读汇编代码,找出闯关的关键代码。

具体过程:

打开下载的文件,通过反汇编得到bomb.s反汇编文件:

计算机系统原理 Bomb实验 炸弹一/phase_1_第1张图片

通过vi指令打开反汇编文件bomb.s:

 

查看bomb.s文件:

计算机系统原理 Bomb实验 炸弹一/phase_1_第2张图片 

找到关卡1的反汇编代码:

计算机系统原理 Bomb实验 炸弹一/phase_1_第3张图片 

分析此段代码:

push    %ebp                       将ebp寄存器中的内容入栈
mov     %esp,%ebp                  将esp中的内容复制到ebp中
sub     $0x18,%esp                 分配16进制18即24个字节的空间
movl    $0x804a15c,0x4(%esp)       将$0x804a15c处值存入esp+4地址处

mov     0x8(%ebp),%eax             将ebp+8处的值存到eax中
mov     %eax,(%esp)               将eax中的值传递给esp
call    8048fab

通过8048fab函数判断esp+4和esp中的值是否相等test   

%eax,%eax                  判读eax值是否为0

je      8048f83     若eax为0则跳转到8048f83处

计算机系统原理 Bomb实验 炸弹一/phase_1_第4张图片

call    80490d1      跳转到80490d1通过函数引爆炸弹

计算机系统原理 Bomb实验 炸弹一/phase_1_第5张图片


leave                              结束,eax为0时进入下一关
ret

 

本题的栈帧结构如下图所示:

计算机系统原理 Bomb实验 炸弹一/phase_1_第6张图片

拆除炸弹一即不让第一段程序进入爆炸。分析代码,整段代码就是先将存有目标字符串的地址$0x804a15c先存入了当前帧,再将外部输入的字符串存入到ebp+8的位置,即上图所示的参数一,再通过eax将参数一传递到esp中,通过函数调用比较esp与esp+4中的字符串是否相等,如果相等,返回值为0,程序跳转到leave,进入下一进程,反之不相等则引起爆炸,所以我们只需要查看地址$0x804a15c处的值就能解除炸弹危机了。

 

 如下图所示,使用GDB查看指定地址存储的数据:

 计算机系统原理 Bomb实验 炸弹一/phase_1_第7张图片

所以易知:

第一关炸弹可使用字符串“We have to stand with our North Korean allies”来进行拆除。

 

 

 

 

 

 

你可能感兴趣的:(计算机系统原理,Bomb)