zoukankan      html  css  js  c++  java
  • CSAPP第二個實驗bomblab

     

    文件和完整的word見github

    3.1 阶段1的破解与分析

    密码如下:I am not part of the problem. I am a Republican.

            破解过程:

    1.首先读主函数的汇编代码

    发现这里是用了以一个函数<phase_1>(后面每一个炸弹都是对应的一个函数,在主函数中调用的表现形式一致,后面就不赘述了)

    然后找到地址0x400e8d对应的函数<phase_1>

     

    发现这里里面是把将立即数0x402470复制到%esi,然后调用一个<判断字符串是否相等的函数>,那么我们可以推理出,判断字符串是否相等这个函数,那么这个字符串其实就放在0x402470里面,如此在GDB中使用x /s 0x402400查看0x402470内存单元中字符串的内容就可以找到密码了。

    3.2 阶段2的破解与分析

    密码如下:0 1 3 6 10 15

    破解过程:

    首先根据函数的名字<read_six_numbers>可以判断这是读入6个值,而且保存至从%rsi开始的地址。下面开始第一步就是判断第一个数和0是否相等,那么由此判断,第一个数是0.

    后面我们可以看见这里面设置了一个循环变量储存在%ebx里面,每循环一次加1操作,然后当等于6的时候跳出循环,而且每次循环的时候会把%ebd里面的值放如%eax,然后每次循环的时候进行累加,即每次都加上这个循环变量,那么第一个数是0,第二个是0+1 = 1,第三个是 1+2 = 3,第四个是3 +3 = 6 ,第五个是 6+4 = 10 ,第六个是 10 +5 = 15

     

     

     

     

    3.3 阶段3的破解与分析

    密码如下: 0  l 941

    破解过程:

    首先可以看到程序是要读入三个数,分别存0x14(%rsp),0xf(%rsp),0x10(%rsp)里面。根据压栈的顺序,我们知道第一个数存在0x10(%rsp),第二个数是0xf(%rsp),第三个数是0x14(%rsp)。

    %eax是读入数据的返回值即读入数据的个数,如果大于二跳转执行后面,否则进入下一条语句炸弹爆炸。

    然后第一步就是将第一个数和7比较,如果大于7的话炸弹爆炸,

    这里我们知道程序是使用了switch语句,利用跳转表跳到0x4024e0+ %rax * 8的位置,gdb地址使用p/x*(0x4024e0)命令查看当%rax的值为0时跳转地址。

    这样我们就知道第一个数据输入为0 时程序跳转到位置(同样的道理可以找到为1-7的地址)。

    然后我们知道循环里面是吧立即数6c存到了%eax里面,然后将第三个数和0x3ad进行比较,不相等则炸弹爆炸。那么我们就得出了输入的第三个数是0x3ad = 941

    在读这个switch语句的时候,我们可以发现,所有的第三个数正确之后都会跳转到同一个地址0x401059执行下一步

    这里%al是%eax最后一个字节,我们由是知道这是比较字符相等,此时里面是0x6c,我们查ASCII表得知,它对应的字符是小写字母l,得到第二个答案。

     

    3.4 阶段4的破解与分析

            密码如下: 6  6

    破解过程:

    首先我们知道,程序是要输入两个数据,

    第一个数据的要求是小于14的

    可以看到以上四条语句分别是:调用func4构造参数c,参数值为0xe;为调用func4构造参数b,参数值为0x0;为调用func4构造参数a,参数值为输入第一个参数值;执行func4

    后面我们知道是用func4的返回值和6进行比较,若是等于6,继续执行,否则炸弹爆炸。下一步就是把第二个数和6比较,等于6跳转。由此我们知道第二个数是6,至于第一个数,我们还需要看fun4函数

     

     

    我们知道这是一个递归调用的函数,写成C语言如下:

    我们需要检查0-14所有满足返回值为6的答案

    由此知道,第一个数为6

     

     

     

     

     

     

     

    3.5 阶段5的破解与分析

    密码如下:5 115

    破解过程:

         首先我们知道输入的数至少有2个

    然后我们输入的一个参数的二进制后四位不能为1111(15),也可以相称第一参数的值要小于15。

    后面我们知道这是是一个循环,寄存器edx初值定为0,每次循环加1,根据后面cmp 0xf, %edx 可以得出,循环必须执行15次;同时ecx寄存器不断的累加数,每次把一个数的值存到eax寄存器中 并且作为下次取值的索引。

    而最后我们最终ecx寄存器的累加值要和我们的第二个参数相同,不然炸弹则爆炸。

    那么我们来看看如何循环:首先看参与循环的数组,即首地址0x402520数组里面的值

    我们可以得到如下的一个表格:

    index

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    value

    10

    2

    14

    7

    8

    12

    15

    11

    0

    4

    1

    13

    3

    9

    6

    循环必须循环15次,同时循环终止的条件是eax寄存器的值为15.

    按照之前分析的:

    index为6时对应元素为15,最后一次加了15,那么上一次就加了6,依此类推加15次的结果为: 15+6+14+2+1+10+0+8+4+9+13+11+7+3+12 =115. 第一次的数是12,其index为5.那么由此答案就是5 115

     

    3.6 阶段6的破解与分析

    密码如下:2 4 3 6 5 1

    破解过程:

            首先我们知道这是读入六个数据,然后建立链表

           这里就是所有数减去一后小于等于5,那么就是所有数在1-6之间。

    现在我们要对表示地址的立即数敏感,我们推断,数据地址的首地址是0x6032f0

    用gdb查看得知正是1-6六个数

    将 %rax 指向 %rbx 下一个链表节点, 比较链表节点中第一个字段值的大小,如果前一个节点值小于后一个节点值,跳转。又此我们知道数据是根据每个节点中的第一个数升序排列。那我们可以得知,顺序是 2 4 3 6 5 1

     

     

     

     

    为完成本次实验你翻阅的书籍与网站等

    [1]  林来兴. 空间控制技术[M]. 北京:中国宇航出版社,1992:25-42.

    [2]  辛希孟. 信息技术与信息服务国际研讨会论文集:A集[C]. 北京:中国科学出版社,1999.

    [3]  赵耀东. 新时代的工业工程师[M/OL]. 台北:天下文化出版社,1998 [1998-09-26]. http://www.ie.nthu.edu.tw/info/ie.newie.htm(Big5).

    [4]  谌颖. 空间交会控制理论与方法研究[D]. 哈尔滨:哈尔滨工业大学,1992:8-13.

    [5]  KANAMORI H. Shaking Without Quaking[J]. Science,1998,279(5359):2063-2064.

    [6]  CHRISTINE M. Plant Physiology: Plant Biology in the Genome Era[J/OL]. Science,1998,281:331-332[1998-09-23]. http://www.sciencemag.org/cgi/ collection/anatmorp.

    [7]https://gitee.com/zhoulee/CSAPP/blob/master/bomb/phase_6.txt

    [8]http://xinqiu.me/2016/02/10/csapp-lab2-bomb/

    [9]http://www.jianshu.com/p/a3e13a4d8479

    [10]http://www.cnblogs.com/remlostime/archive/2011/05/21/2052708.html

  • 相关阅读:
    Liunx之django项目部署
    Liunx之nginx配置
    Liunx之基础学习
    Linux之防火墙【CentOS 7】
    Linux之各程序安装
    Linux之基础命令
    攻城狮必备神注释
    Django-rbac权限
    "/var/lib/mysql/mysql.sock"不存在解决办法
    72张三国历史演变地图
  • 原文地址:https://www.cnblogs.com/blairwaldorf/p/7783404.html
Copyright © 2011-2022 走看看