• 逆向工程之二进制炸弹第一发


       down了二进制炸弹实验,名字就很酷是不是。简要介绍下,二进制炸弹是一个可执行文件,运行时,提示用户输入6个不同的字符串,如果其中的任何一个不正确,炸弹就会爆炸。初步判断有六个级别,难度逐级递增。这个实验需要学生通过对程序反汇编和逆向工程来判断是哪6个答案,从而拆除它的炸弹。

         文档里面提示用到了gdb和objdump,那么问题来了。第一步怎么做?

    照惯例我神游了一番,然后打开objdump –help翻看帮助,有个-t 参数,可以打印程序的符号表,据我所知符号表里面存储的是一些函数名和变量名,或许我可以从这里寻找一些有规律的符号找出线索。开干!

    objdump –t  bomb > 1
    

     

    浏览一遍,发现了线索,表里有phase_1到phase_6这类符号,正好和6个层级有点对应,话说这信息有点乱,咱grep一下

    很好,结果清晰了,但是这个invalid_phase和secret_phase是做什么的?不大明白。先不管,

    objdump – d bomb > 2 
    

    反汇编 bomb程序,导入文件2中,找到Phase_1部分

    Phase_1里面有调用explode_bomb,那现在确定了就 是这个。

    下一步----------->追踪Phase_1

    分析下Phase_1部分,逻辑很清楚。调用strings_not_equal,判断字符串是否相等,如果相等,咋跳转到leave语句,返回。不等,则调用explode_bomb,程序结束。

       咱跟进去分析一下strings_not_equal代码:

    关键部分我加了注释,strings_not_equal逻辑是这样:

             调用string_length计算用 户输入的字符串长度,然后和密钥长度对比,如果不等,则直接爆炸,相等,则进一步进行比较。

    String_length子部分:

    好了,关键代码分析的差不多,咱捋一遍,简略画个框图。

    phase_1第一个炸弹逻辑:

    String_not_equal子模块分析:

    好了,迫不及待拆蛋蛋了。

    下一步----------->添加断点,利用GDB调试工具单步跟进

    在strings_not_equal函数入口处添加断点,其实我想说这里就可以得出密钥了,因为炸弹一的逻辑很简单,传递字符串参数比较嘛,

    那么调用函数之前,肯定要将比较值压入栈,例如这条指令:

    0x8048b22:   68 78 96 04 08          push   $0x8049678
    

    就很可疑。

    咱试试打印出来:

    果然有戏。:-D

    但是这样快就拆掉太没意思了,咱还是跟进去细细分析下吧~

    提个问题?如果想知道密钥的长度咱该怎么办?

    分析:咱们在string_not_equal函数里面调用了string_length函数来计算长度,函数的结果利用eax寄存器传递出来,那么很简单啦,直接在传递过密钥的string_length函数后面加个断点,然后打印寄存器eax的值就可以了啊!

    咱们在string_length函数后面0x8048f49 设定一个断点,打印,怎么样,出来了,密钥长度35!不信一会你数数:-D

    那么再问一个问题,我想知道用户输入的数据是什么,应该怎么办???

    上面看懂我分析的代码的肯定知道,传递参数无非就是压栈,利用桢指针加上偏移量就求出来了!很快定位到地址0x8048f38,加断点,打印esi寄存器值,bingo!!

    I have a dream! 酷绚!

    这里在告诉大家利用C程序格式化输出字符串的技巧,这个是调试java虚拟机时候,廖博教给我的。

    我们刚求出了字符串长度为35,那么我们利用GDB把字符串存储的首地址后35个字符打印出来。

    然后写一个C程序:

    OK,就是这个。

    话说炸弹还没有拆呢,最后运行bomb程序,输入密钥: “ The futre will be better tomorrow.”

    至此,炸弹一拆除完毕。

    第二个我还没分析,回头继续直播!

  • 相关阅读:
    Redis面试题(46题)
    公共组件及脚手架webpack模板
    css3中@font-face模块自定义字体
    字段加密实践(django-fernet-fields)
    django导入导出excel实践
    vue-loader和单页组件介绍
    Axios介绍和使用
    微服务架构理解及微服务架构局限性
    v-model的双向数据绑定(表单)
    eureka集群
  • 原文地址:https://www.cnblogs.com/JohnnyShy/p/4162762.html
Copyright © 2020-2023  润新知