CSAPP 逆向工程试验 bomb

四、实验步骤和结果

1.        输入反汇编命令查看汇编代码(保存在1.txt文件中):

图1

2.        首先找到main函数,发现它调用了从phase1到phase6这六个函数:

图2

由反汇编代码可以知道phase_1为字符串比较,根据下图3打印出0x80497c0得到下图4,故可以得到答案“Publicspeaking is very easy.”:

   

图3

测试成功

 

图4

3.        再看phase_2,进入到08048fd8 <read_six_numbers>中,看到图5的语句,打印出来得到图6,即可知需要输入6个数,然后由0x8048b63可知第一个数为1,再由下面的循环语句可得到后面的5个数,见图7,检测后得到图8,答案正确:

图5

图6

图7

图8

4.        继续看phase_3,如下图,由0x8048bb1的打印结果知道要输入两个整形数和一个字符,如图9。然后由0x8048bd6可推测为switch语句,由0x8048bc9知跳转范围为0~7,图10列出了跳转0、1的情况,2~7类似,图11为所有可以通过的情况,图12为测试结果:

图9

图10

图11

图12

5.        继续看phase_4:

1)       由图13和图14知需要输入一个整数:

图13

图14

2)       phase_4调用了func4函数,图15为func4函数和函数解析,由此可知为斐波那契数列:

图15

3)       再看phase_4的主体,见图16,可知调用斐波那契数列后%eax的值为37,为第9项,故需要输入的数为9:

   

图16

4)       测试结果:

图17

6.        继续看phase_5:

1)       打印出代码中有特征的地址:

图17

2)       这是字符串问题,将输入字符的低四位作为“isrveawhobpnutfg”下标,得到字符串后与“giant”相比。输入的字符串低四位需为15 0 5 11 13 1,故而选择输入“opekma”:

图18

3)       测试结果,图19:

图19

7.        看phase_6:

1.        代码出现了read_six_numbers,故而我首先输入“3 4 5 6 7 8”作为测试,但是经过调试后在0x8048dc7发生了爆炸,由下面代码知输入的整数需<=6,故而改为“1 2 3 4 5 6”测试:

  

图20

2.        调试过程中打印0xbffff0a4起始的十个int型数据还有一些调试中相关的值,图21后面的5张图为1 2 3 4 5 6 对应的值,地址为0x8004b26c、0x8004b260、0x8004b254、、、、、、:

图21



3.        “1 2 3 4 5 6”也爆炸了,故而换“6 5 4 3 2 1”尝试,6 5 4 3 2 1映射的地址,保存的值为432 212 997 301 725 253:

图27

4.        由图28知需要将对应值432 212997 301 725 253从大到小排列,即得到4 26 3 1 5:

图28

5.        结果:

 

 

五、实验总结与体会


1.        了解了gdb的使用,例如查看寄存器的值,或者查看内存中的几个值:


2.        一些可能对拆弹过程有作用的知识:

1)       函数的调用:

 


 

2)  函数的返回:


3)       寄存器的使用:

 

3.        调试时要看整个过程,不要纠结于细节;

 

4、参考:http://www.2cto.com/kf/201605/504503.html

注:加油加油加油~!~!~!~!。知识从来不会欺骗你,博客从来不会欺骗你;

         加油加油加油~!别人时代的悲哀成为你的悲哀!~~!~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值