Tan's Blog.

201Challenge

字数统计: 774阅读时长: 2 min
2019/04/15 Share

想说一下,由于明天要中期答辩,再加上我们专业搞的工程认证项目,所以这次检查极为严格。其实之前已经准备的差不多了,但好无奈今天又一堆通知文件发下来,劈头盖脸地又是一通填,一通改,还要签字盖章,心态崩了。所以今天并没有怎么学习测试内容,只是抽空简单看了一下第二阶段的内容。

二进制拆弹

题目描述

第二阶段的主要内容是逆向工程拆除二进制炸弹,总共有6个阶段,炸弹运行各阶段要求输入一个字符串,若输入符合程序预期,该阶段炸弹被拆除,否则爆炸。

文件

题目文件包含两个文件:bomb的可执行文件和bomb.c

使用工具

objdump工具

objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍:
objdump -f test
显示test的文件头信息
objdump -d test
反汇编test中的需要执行指令的那些section
objdump -D test
与-d类似,但反汇编test中的所有section
objdump -h test
显示test的Section Header信息
objdump -x test
显示test的全部Header信息
objdump -s test
除了显示test的全部Header信息,还显示他们对应的十六进制文件代码

gdb调试器

一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
gdb最常见的几个用法:

  1. 调试程序。有几种方法可以在gdb下运行你的程序:
    1)    gdb ${你的程序} 进入gdb后,输入run(简写r) ${arg1} ${arg2} … ${argN}
    2)    gdb --args ${你的程序} ${arg1} ${arg2} … ${argN} 进入gdb后,运行run。
    3)    gdb进入gdb后,输入file ${你的程序}。然后使用set args  ${arg1} ${arg2} … ${argN} 设定好你的程序参数,再运行run。
    
  2. 调试正在运行的程序:
    gdb ${你的程序} ${程序pid}
    
  3. 查core:
    gdb ${你的程序} ${core文件}
    

gdb常用命令:

1. backtrace:显示栈信息。简写为bt。
2. frame x 切换到第x帧。其中x会在bt命令中显示,从0开始。0表示栈顶。简写为f。
3. up/down x 往栈顶/栈底移动x帧。当不输入x时,默认为1。
4. print x打印x的信息,x可以是变量,也可以是对象或者数组。简写为p。
5. print */&x 打印x的内容/地址。
6. call 调用函数。注意此命令需要一个正在运行的程序。

查看bomb程序的汇编代码

输入命令 objdump -d bomb>aaa.txt
得到

CATALOG
  1. 1. 二进制拆弹
    1. 1.1. 题目描述
    2. 1.2. 文件
    3. 1.3. 使用工具
      1. 1.3.1. objdump工具
      2. 1.3.2. gdb调试器
    4. 1.4. 查看bomb程序的汇编代码