zoukankan      html  css  js  c++  java
  • 二进制炸弹实验(持续更新)

    二进制炸弹实验(持续更新)

      一、前期准备

    首先,既然这是CSAPP这本书上的实验,我们就得想办法找到书上的实验素材,不能随便自己编炸弹。这里课本上给了一个卡内基梅隆大学的edu网址csapp.cs.cmu.edu,然而,防火墙阻挡了我们的脚步。这里给大家两种解决思路:

     

    (一)多费点时间精力,CSDN博客园上有少量博主曾在博客里共享过CSAPP的实验资源,例如这一个,亲测可下载:

     

      (二)直接选择科学上网工具,搭梯子即可。

     

     

    因为二进制炸弹实验网上有很多破解教程,所以写这个炸弹素材的人就很坏,我发现他隔几个月就会发布一版更新炸弹,答案完全不同、解题思路变幻多端。我下载了最新版的炸弹,但目前只破解出了最简单的第一环节(一共六个环节),这篇博客会持续更新的。

    二、实验过程

    二进制炸弹实验主要考察的就是对反汇编代码的理解能力。题中给出了一个二进制文件(可执行文件),共6个关卡,每关要输入一个密码才能过关,就像解谜游戏一样,还是很有意思的,同时对于程序(函数,返回值,堆栈的组织)如何运行的有更深的理解。

     

    破解唯一可用的线索就只有这个二进制文件了。这题是对于反汇编能有更深入练习,加上还能熟悉gdb,objdump这类调试工具和反汇编工具。每一关的考察点也是由浅入深。

    最近娄老师让我们写过的一篇gdb调试堆栈的博客也能更好地帮助我们""

     

    好了,下面进入gdb调试界面开始拆弹把。

     

    在这里对我们提出了警告,题目很调皮。

    没有输入拆弹密钥任意往下执行,果然爆炸了。从头再来吧。

    我们先反汇编一下这个二进制文件的第一部分:

     

    密钥应该藏在哪里呢?

    我们注意看一下地址0x08048b3b,就是在这一步调用(call)引爆了炸弹<explode_bomb>。

    可以看到0x8048b22和0x8048b27指令中分别放入了两个字符串,一个在地址0x8049678中,另一个在0x8(%ebp)中。

    而0x8(%ebp)是函数phase_1的参数,而0x08048b2a很明显是在判断上面push的两个字 符串是否相等。

    所以依此可以判断0x8(%ebp)的内存地址中的值是我们输入的字符串,而0x8049678则可能是程序中硬编码的一个字符串。

    那么,找到这个内存地址中的字符串便能解决问题了。

     

    这时候还是要用到gdb来查看内存和寄存器终的值,在这里我们在0x8048b22处设个断点,然后打印0x8049678地址中的值。

    解决了!赶快输进去这个拆弹密码试试,第一个炸弹被排除啦。

    这是另一个版本的炸弹,第一环节很像,拆弹结果是这样。

     三、问题与解决

      暂时还没有,有了再写嘻嘻~

  • 相关阅读:
    struts2 标签
    Ubutu命令 笔记积累
    虚拟机VirtualBox和Ubutu
    更新PostgreSQL数据
    向PostgreSQL插入数据
    PostgreSQL表依赖性跟踪
    PostgreSQL外部数据
    PostgreSQL分区介绍
    PostgreSQL继承详解
    PostgreSQL模式介绍
  • 原文地址:https://www.cnblogs.com/xxy745214935/p/6159964.html
Copyright © 2011-2022 走看看