深入理解计算机系统LAB2_第1页
深入理解计算机系统LAB2_第2页
深入理解计算机系统LAB2_第3页
深入理解计算机系统LAB2_第4页
深入理解计算机系统LAB2_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、深入理解计算机系统L AB2作者:日期:LAB 1实验报告实验目的:使用课程知识拆除一个“ Bi n ary Boot s”来增强对程序的机器级表示、 汇编语言、调试器和逆向工程等理解。实验简介:?一个“Bi na r y BombS'(二进制炸弹,简称炸弹)是一个L inu x可执行C程 序,包含phaselphase6共6个阶段。炸弹运行各阶段要求输入一个字符串,若 输入符合程序预期,该阶段炸弹被“拆除”,否则“爆炸”。实验目标是你需要拆 除尽可能多的炸弹。运行结果:?通关密码储存在001 3 1 .tx t文件中。成功运行结果截图:zhnxx口目匕巳力工aru丄$ - /bomb

2、 solutionWelcome to my fiendishbonb You have b phases withwhich to blow yourself up. Have a nice dayPhase 1 defused How about the next one?That1 s nuniber 2 . Keep going !Halfway there!So you gotone» fry this one.Ciood work! On to the next.Curses t you1ve found the secret phaaeIBut finding 二/t

3、and solving itqnite different.-Vflow1 You1ve defused th© secret stage ICongratulations! You'vo defused the bomb I?实验中的六组密码:1 The future will be better tomorrow*2 X 2 4 8 16 323 5 -745<1 10 37 DrEvil5 5 1156 1 2 1 3 57 200PH ASE 1:字符串比较?本关比较简单,根据课件中的提示用GDB将最先压栈的那个字符串常量打印出来,然后将其作为密码输入,比较成功

4、后即通关2>t _equa l >08048ab2 < p hase _1>:8 04 8 ab 2: 8?3 e c 14804 8 ab5: 6?8 0 49 f 040 8804 8 ab a: ?f 742 4 1 c804 8 ab e:宅8 4d 04 00 00s u b $0x14, %es ppush $ 0 x804 9 f04?)us hl 0 x1 c(%esp)Zal l 8048f10< s trings_no?各地址Ox 8049f 0 4中的值打印出来:Breakpoint lf 0x0808ab5 in phase 1 仃fqdb

5、) p *0xB049f04$1 = 543516756(gdb) p (ch厂 *)0x8049f0$2 - Dx9D49fO4 "The future will be better tomorrow*即“ The future w i ll be b et ter tomorrow .PHA SE2循环在查看汇编语言的时候,会看到有调用一个read si x number函数,猜测此题是让输入六个数字。08048ad3 vpha s e_2>:8048a d3: ?5 6p us h% esi8048a d 4: 53?p u s h%ebx804 8 ad 5: 83?e

6、 c 2c?>ub$0x2c, %esp80 4 8ad8: 8d 4 4 24 1 0lea0x10( % e s p) , % e a x80 4 8 adc: 50?pus h %eax80 48a dd :? f 742 43 c?pu sh l0x 3c (%esp)8048a e 1: e8 4 6 05 0 0 00cal l8 0490 2 c <re a d_ six_nu mbers>8 048 ae 6: 83? c410a dd$ 0x10, %e sp80 4 8ae9: ?8 3 7c 2 4 0 80 1Zmp l$0x1 , 0 x 8 (%e

7、sp)-判定是否为18048aee:7 41 e?e 8048b0e <pha s e2+ 0x3b>8 0 48af0: e8 1 20 5 00 00?c all 8049007 <explo debom b>8048a f 5: e b 17jmp80 48b0 e <phas e _20 x3 b >80 4 8 af 7 : ?8 b 0 3?mov(%ebx ) ,%ea x8 04 8 a f 9:0 ?1 c0?ad d% e ax,%eax 进行自加,扩大两倍8 0 48afb: 3943 042mp%eax,0x 4 (%ebx)8 04

8、8 a f e : 0 74?5+j e 8 04 8 b05 <p has e _2+0x 38048b 0 0 :?e 8 02 05.0 0 008 0 48b05: 83? c3 0 48048b08:39 f 38048 b 0a : 7 5 e bx 24 >8 0 4 8 b0 c : eb 0ae _2+ 0x45>8 0 4 8b0e: 81d 5c 24088 048 b 12: ?8d 7 424 1c8048b1 6 : eb df循环8 0 48b18: 83 c4 2 480 4 8b1b: ?5 b8 04 8 b1c: 5e804 8 b 1d

9、: Z3jmp8 0 48b18 V pha s有汇编语言进行分析,不难看出,这道题目要求输入六个数字,并且要求第一call 8 049007< ex plode_b o mb>add $ 0 x4, %ebx?c mp %e s i,% e bx? ne8 0 48 a f7 V ph a s e _2 + 0 l e a 0 x 8 (% es p), %eb x?e a 0x 1 c (%es p), %e sij mp 8048 a f7 <pha s e_2 + 0 x24>?3dd$ 0 x 2 4, % e s ppop%ebx?)op %esi? e t

10、个数字为1,之后跳入一个循环,将第一个数字加倍和已有的数字进行比较,所以不难看出所需要的密码是1, 2 ,4,8,16,32 这六个数字PH ASE3 :条件分支语句范道题的汇编语句明显变长了 ,但是由于PPT中已经提示这是条件分支语句,以此为切入点,此题也不难分析08 0 4 8 b1 e <pha s e_3>:8 048b1e: 83?ec 1c8 0 4 8b2 1 :8d 44 24 088 0 4 8b 2 5:508048b26:迟d 4 4 241 08048b2a: 5080 4 8 b2b:68 ? 0 f a 104 0 8为 ”d%l ”8048b 3 0:

11、 ff 7 4 2 4 2c8 0 48b 3 4: e8 87 f c ff ff_ssca nfplt>?>ub$0 x 1 c ,%esp?e a 0x 8 (%es p ),%eaxpush % eaxlea 0x 1 0 (%esp ),%ea xp u sh %ea x®ush $0 x 804a10f 打印该值中 u shl 0x2 c( %esp? al l 804 8 7 c0 <_ i soc9 9上面这一段调用了一个函数sscanf(),查询可知这个函数的原型为:in tadd c m p8 048b39:83 c4 108 048b3 c :

12、 ?8 3 f8 01ss c anf (const c h ar *b uf fer, c o n st c h ar * f o rm at , ar g ument .);即读取输入的字符串,并以指定的格式赋给参数。其中一个参数在地址0x80 4 a10f中。可知需要输入两个整数。$0 x 1 0 ,%e s p $0x 1, %eax?g8 0 48b4 6 vphase_3+08 0 48b 3 f :7f 05x 28>8 0 4 8 b41:宅 8 cl 0 40 0 00o mb >804 8 b46: 83 7 c 2 4 0c 07- 不大于78 0 48 b

13、4b: 77 6 6否则引爆有这些可以得知第一个参数的信息call 8049007 < e xplo de b2mpl $0 x 7,0 x c(% es p)?a80 4 8 bb3 <pha s e_3+0x9 5 >-,可以看出这是一个不大于7的数,因此缩小了选择,不难猜出可能是分支条件8048 b 4d: 8?4 4 240 cmo vr0x c(%es p ) , %s a x804 8 b 5 1:?f2 4 8 58 09 f0 4 0 8?m p*0x 80 4 9 f80(,%eax,4)80 4 8b58:b80 c 0 3 00 00?no v$0x 3

14、0 c ,%eax80 4 8b5d:宅b 05jmp80 48b 6 4< p hase_3+ 0 x 4 6>80 4 8 b5f:?b80 0 00 00 0 0m ov$0x0,%e ax8048 b64:2 dd 503 0 000sub$0x3d5, %ea x8 0 48b6 9 :eb0 5jmp8 0 4 8 b70 <p h ase_3+0 x5 2>8048 b 6b:b800 00 0 00 0?mo v$0x0, % e a x8 048b70:05 3 50 100 00add$0 x 13 5,%e a x804 8 b75:宅b 05?m

15、p8 0 4 8b7 c <phas e _3+ 0 x5e>804 8 b7 7 :? 800 0 0 0 0 00m ov $0x0,% e ax80 4 8b 7 c:2?e 902 0 000?s ub$ 0x2e9, % e a x80 4 8b 8 1:宅b05jm p8 0 48b8 8 <phas e _3+ 0x6 a >80 4 8b 83:b80 0 00 00 00?n ov$0x0, %eax80 4 8b88: 05?e9 0200 00add$ 0x 2e9,%eax80 48 b8d1:宅b 05?mp8 0 4 8 b94 <ph

16、a s e_3 + 0x76>8048b 8 f:b8 000 00 0 00?nov $0x0,% e a x8048b 9 4:2d e902 00 0 0s ub$ 0 x2e9,% e ax8048 b 99:?e b 05?m p8048b a 0 <p ha se_3+0x 8 2>8048b 9 b:?b8 0 00 0 00 00?mov$ 0x 0,% e a x80 4 8b a 0:0 5 e9 0 2(00 00add$ 0x2 e9,%ea x8 04 8 ba5:宅b 05j mp 8 0 48 ba c <ph a se_3+0x8e>

17、;8048ba7: ?)8 0000 00 00?mo v$ 0 x0,% e ax8 048 b ac:2 d e 9020 000u b $ 0x 2e9,%e ax80 4 8b b 1:宅b0aj mp8 04 8 b b d <p h as e_3+0x9f>8 0 48bb3:e 8 4f 04 000 0ca 1l8 0 49007 <explo d e_b o mb >面是各种分支情况,看起来比较复杂,先放一放$0x 0, %eax8048bb8 : b 8 0000 000 0?n ov804 8 bbd: ?8 3 7c .2 4 0 c 0 5 能

18、大于580 4 8 b c2: ?7 f 0680 4 8b c 4:3 b 44 24 088048b c8 : 7?40 58048bca:宅 83804 00 0 0mb>8 0 4 8bcf: 83?c4 1cadd8 048 bd2 : c 3cmpl $0x5, 0 x c (%esp )- 参数不?j g 80 48 b ca < pha se_3+0xac>?cmp0x8( % esp), % e a x?e 8 0 48bcf <phase_3+0xb1> c al 18 049 0 07 vex p 1 ode bo$0x1c,%espre t

19、可以看出参数不能大于五,因此这道题可能有多组解,不过结合分支语句, 不难看出当第一个参数比较大的时候,计算量比较小,所以我选择了第一个参数 为5,代入进行逐步计算,可以得到此时的值为-745。PHAS4 :递归调用栈这一步是递归调用栈,所以有两部分汇编代码 ,其中一个是被调用的函数,简单地看一下代码,应该是一个递归的函数。先分析主程序部分的代码,其中也 有ssca n f函数:0 8 04 8 c2c < p has e _4>:8048c2c: ?3 3 ec 1 c?su b $ 0 x1 c ,%esp8048 c2f :8? 4 4 2 4 08l e a 0x 8( %e

20、sp ),% e ax804 8 c33: 50?Push % e a x8 048c34:8d 44 2410lea0x10(%esp ) , %ea x8 048c38: ?5 0?p us h%eax804 8 c39:68 0f a1 04 08?pu s h$0 x8 0 4 al 0 f - 输出为”d %d'80 4 8 c3e:ff 742 4 2c?p ush 10 x 2c(%esp)804 8c4 2:宅8 79 fb f f f fcall 80 48 7 c 0 <iso c 99 sscan f p lt>8048c 4 7:83 c 41 0a

21、dd$0x 1 0,%esp80 4 8 c4a:83 f8 0 2?c mp$0x2, %eax 返回值为2从上面这部分看出我们需要输入两个参数,且两个都是整数型的804 8 c4d:75? 07j ne8048 c 56 v phase_4+0x2a>8 0 4 8c4f:83 7 c 24 0c 0ec mpl$ 0 x e,0x c ( %e sp)第个参数不大于148048c 54 :76 05j be 8048 c 5b <p h a s e_4 + 0x2f>8048c56:宅8 a c 03 00 00cal 18 0 4 9007 <exp lode_

22、b omb>8 0 48c 5 b:83 e c 0 4?5 u b$ 0x4,%es p8 048 c5e: 6?a 0ePush$0 x e8 0 48 c60: 6a 00?p ush$0x 08048 c 62: ff 74 2418pus h10 x 18(% e sp)8 0 4 8c6 6:宅8 68ff f f ffEl8 048bd3 v func4>8048 c 6b : 83 c 4 10add$0x10,%esp8048 c 6e: 83? f 82 5cmp $ 0 x25,%e ax8 0 4 8 c71 : 7?507?j ne804 8c7a v p

23、ha se_4+0x4 e>8048 c 73:8 37c 24 08 25?c mp 1$0 x 2 5 ,0 x 8(%esp )-第二个参数为3 78 0 4 8c7 8 :?7 405?e8048c7f <p h as e _4+ 0 x 53>8 0 48 c 7a:宅8 88 03 00 00c a 1 l80490 0 7 <explode_bomb>8 0 48c7 f : 83?c4 1cad d$0x 1 c,% esp80 4 8 c 8 2:c3e t从上面这些可以看出,虽然输入了两个参数,但是只有第一个参数被传递给 了 func4另外一个

24、没有变化,而且可以知道等于3 7。同时,第一个参数还不大 于1 4。这样可能的情况就少了。考虑到f unc4本来就是一个递归函数,即使反 汇编出来,也需要一步一步代入,不如直接进行尝试,枚举法得到第一个参数是1 0。PHAS E5 :指针这一道题的提示比较模糊,毕竟汇编程序里到处都有指针0 8 04 8 c 8 3 <pha se._5>:8 0 4 8 c83:83e c 1c?sub $0x 1c,%e sp8 0 48c8 6 :8d4 4240 8?e a0 x 8 ( %esp),%eax80 4 8 c8a : 50?p u sh%eax8 048c 8b: 81d 4

25、4 241 0le a0 x10(%esp) ,%e a x80 4 8 c8f: ?5 0Rush% e ax8048 c 9 0:68 ?0 f a10 4 0 8push $0x804 a10 f - 地址参数804 8 c9 5 :ff74 2 4 2cpu s h 1 0x2c (%esp)80 4 8c99: ? 82 2 f b f f f fcall 8048 7 c0 <_ i s o c9 9_ssca nf pl t >同样函数sscanf,其中有两个参数,有一个是地址 0x 804 a10f,先记下等会可能会用到8048c9e : ?8 3 c 410?ad

26、d$0x10 ,%esp804 8 ca1: 83 f8 01Zmp$0 x 1,%e ax8 048ca4: 7f 0 5? g804 8 c ab v p ha se_5 + 0x 2 8 >8 0 48ca6: e8 5 c 03 00 00ca1 l 8049 0 07 v exp 1 ode_ b omb>8048ca b: 8b 4 42 40 c?mov0xc( %esp), % e a x8048 ca f:8 ?3 e 0 0fa n d$0xf , %eax取低四位8048cb2:8 9 4 4.2 4 Oc8 O 48cb 6: 83?f 8 Of于158 0

27、4 8 cb9: 7?4 2e6>80 4 8cb b: ?b90 00 0 00 008 048cc0: b a0 000 00 008048cc5:83 ?c201- 计数用的8048cc8 : ?8b0485 c0 9f 044), %eax 寻址804 8 cc f: 0 1c18048cd1 :83f 8 0f8 0 4 8 cd4:75 ef4 2>8048 cd6 : Z7 4 4 24 0c 0f 00 0080 4 8cd d: 0?08 0 48 c de:83 fa0f到15跳出8048ce1 :75 068048ce3: ?3b 4c:2 40 88048

28、ce 7: 740 5b >8048 ce 9:e 8 190 3 0 000mov %eax,0xc(%esp)?:mp $0xf,%ea x-不能等j e8048 c e9 < ph ase._5+0x 6?nov$ 0x0,%ecxmov$ 0x0,%edxadd$ 0x1, % edx-08 ?mov0x 8 049 f c0( ,%ea x,a d d %ea x,%ecx求和用的Zmp$ 0x f,%e axjne8048 c c5 < p hase_5+ 0 xlod e _b o mb >8048 ce e: 8 3 c4 1c8 0 4 8cf1: c

29、 3?movl$ Oxf ,0x c( % esp)?cmp | $ Oxf, %e dx?j ne 80 4 8ce9 vpha s e 5 +0x 6 6> cmp 0 x8 (%esp) , %ecxj e80 4 8cee vph a s e _ 5 + Ox 6ca l l 8 0 4 9 0 0 7 <e xpad d $0x 1c,%esp?e t?个别地方不是太清楚,不过已经基本可以猜出来程序的目的,设置一个计数器 进行计数,每次按照变量的偏移寻址,找到之后变成新的变量,之后按照新的变量 进行寻址,如此循环。没找到一个变量,求和。当变量刚好等于15的时候跳出, 不过

30、跳出的时候还需要看一下计数器有没有达到1 5,也就是说要循环15次才可以跳出,这为我们猜测其值提供了方便。所以我们需要做的是找到初始的变量和以这个变量开始循环所得到的总和。?根据G DB输出的情况,我做了一个表格:01234567118910411 33965其中首行是相对于首地址便宜的字节,下面是其对应的常数。当变量为15的 时候跳出,那么我们可以从1 5向后推:1 5 61 4211 008 4 913 1173125不难看出1 5个循环之后是5,因此第一个参数是5。之后把这十五个参数的 值相加。最开始的时候,我犯了个错误就是直接把这十五个数相加,后来不通过,经过分析发现是1 5个偏移量对

31、应的地址中的常数,所以为1 1 5。PHA SE6链表/指针/结构?这一关看提示就觉得很难,首先对这三个词进行联想,“链表+结构”这个比较好 联想,应该使用结构体定义了一个链表结构。至于“指针”,这个我猜测应该是 和上一关所说的意思可能有相似之处,应给就是不停地变换地址比较之类的。?这一关的汇编语言比较长,其中有一大部分都是对结构体的定义,所以这里只摘 录要点进行解释说明。0 8 0 48cf 2 <p h ase_6>:8 0 48cf 2 : 5?6?p ush%esi8 0 4 8c f3:53pus h%eb x8048cf 4: 83? e c3cs u b$0x3c,%

32、es p8 0 48cf 7 :8d 4 424 2 0? e a0x 2 0(%es p),% e ax804 8 c f b:50pu sh%eax804 8 cfc: ff 74 2 44cpushl 0x 4c(% e s p )8 048d 0 0:宅8 27 030 0 00cal 18 04 90 2 c vread _si x_ nu mb er s>又是这个参数,这道题还是让你输入六个数80 4 8d05:8?3 c4 10add$0x10 ,%e s p8 0 48d08: be 00 0 00 0 0 0mov$ 0 x0, % e s i80 4 8d 0d: 8

33、?b 4 4 b4 18mov 0x18 ( %e s p ,%esi,4),%ea x8 0 4 8 d11: ?8 3 e 80 1?sub $0x1, %eax8048d14:83 f8 0 52mp$0x5,% eax8 0 4 8d1 7 : 7?6 05?jbe8 0 48d 1e vpha s e_6 + Cx 2c>8048d1 9:宅8 e9 02 00 00Zal 1804900 7 Ve x pl ode_bomb >8 04 8 d1 e :83 c 6 0 lad d$0x 1 ,%e s i8048d2 l :83?f e 06?:mp$0 x 6,%e

34、si8048d 2 4: 7?4 1bje 80 48d41 V ph ase_6+0 x 4f>8 0 48 d26:89 f 3mov%es i ,%eb x8 0 48 d 28: 8?b 44 9c 18mov0 x 18(%es p,%ebx, 4 ),%eax8048d2c : 39? 44 b 4 1 4cmp%e ax,0x1 4 (%esp , %esi,4 )8 048d30: 7?50 5j n e804 8 d3 7 <pha se_6+0x45>80 4 8d 3 2 :宅8 d0 020 0 00?c a 1l 8049 0 07 V ex p l

35、 o d e bom b>8 0 48 d 3 7 :8 3 c 3 01add $0x1,%eb x8 0 48 d 3a: 83 f b 0 5cmp$ 0x 5, %ebx80 4 8d 3 d: 7?ee 9? 1 e8048d28V phase_6+0x36>80 4 8d3f : e b ccj m p8048 d0 d <p ha s e _6+0x1b>8 0 48d41: 8d 44 2 418? e a0 x18(%esp),% eax到这里为止,是一个循环,是对输入的六个数字进行判定,从这里可以看出,要求是0到6这几个数字符合要求,是这六个数字的一

36、种组合。80 4 8 d45:81d 5 c 2 43 0?1ea 0x 3 0 (%esp),% e bx804 8 d49:巾9 070 0 00 0 0mov $0x7, %e cx8 048d4e:8?9 c amov%e cx,%edx8 0 4 8 d50: 2巾 1 0?>ub(% eax),%e dx8 0 4 8d52:8 9 1 0mo v%ed x ,(%eax)804 8 d5 4:83? c 0 04a d d$0x4,%e ax80 48d 5 7:?3 9 d8c mp%ebx, % e ax8048d59 : 75?f3jne8 0 48d 4 e <

37、;phas e _6+0x 5c>这一段很重要,第一次读的时候不明所以,不知道是在做什么,之后忽视去看后面的,发现结果怎么输入都不对。回过头来看,发现问题在这里,假如输入的是X ,这里是将其变为7- X。即这个循环是做了一个置换,将我们所输入的数 字置换了。4 8d8a: 7? d6?e 8 0 48d8e vphase_6+0 x 9c> m ov%eb x,%esimov 0x18(%esp,% eb x ,4),%ec x?mov$ 0 xl ,%eaxmo v|$0x 8 04b23c, % edx?c mp$ 0x 1, % e cx804 8 d75: 74 1780

38、4 8 d77: 8 9 de8 0 4 8 d79: ?8 b 4c 9 cl 8804 8 d7d:b8 01 00 00 008 0 4 8d 8 2: ?ba 3 c b2 04 0880 4 8d8 7: 83?f 9 018 08048d6 2 <phas e _ 6 +0x70>这是结构体中的一段,其中有地址常量,这个应该是结构体链表的首地址,不防输出进行查看(gdb) x /3 0x804b23cDx804b23c<nodel>:7061134525512(gdb)Dx804b248<n.ode2>:622134525524(gdb)0x80

39、4b254<n.ode3>:4913134525536(gdb)0x804b260<n.ode4>:1914134525548(gdb)0x804b26c<node5>:5545134525560(gdb)0x8O4b278<node6>:90960(gdb)0x8O4b284<bomb id>:1514201310 0?可以看出,这是由学号生成的一个有着六个元素的链表,元素分别是:123456754909cmp %eax , (%e bx)?g e8 04 8 d c2 vphas e _6+ 0x? a II 8 04900 7

40、vexplod e _borrb > ?mov 0x8 (bx ),%ebxs u b $0x1,%esij n e 8048db4 <phase_ 6 +0 x c2> add $0 x3 4 ,%esp?)op % ebx8 04 8 daf: b e 050 0 00 0080 4 8d b4 : 8b 4308804 8 d b 7 : ?8 b 0080 4 8d b9: 3?9 038048dbb:7d 05d0>8048dbd :宅8 4 5 0 20 000804 8 d c 2: ?8 b 5b 0 88048dc5: 83? e e 018048dc

41、8: ?7 5 ea80 4 8dc a: ?8 3 c4 34804 8 dcd: ?5bm o v $0x5,% e s i?mov0x8 (% eb x ),% e ax?mov(%ea x ),% e ax8048 d ce : 5 epop %esi8048dc f : c 3ret这一段又是一个循环,是对链表的一个排序,到这里就分析的差不多了,也就是说我们输入的是链表的次序,不过这个次序要被7减。?比较大小,有:?16 2 43 5隐藏关卡:?这个如果没有提示应该是看不出来了。不过当时在分析PH ASE6的时候看到下面有一个f unc7。但是PHASE6并没有用到,觉得很奇怪,看到

42、提示后,又向后翻了翻,发现了 fun c 7是被s ecret ph as e调用的。但是程序运行从开始 到结束都没有进入这里。我检索了一下 s ecr et_ph a s e关键字,找到了调用它 的函数。0804916 0 v phasedefu sed> :8049 l 60 :8 33 d e 8b4 0 408 0 6?c mpl$0x6,0x8 04b4e880 4 9 1 6 7: 7375?jne 80491dc < pha se_de f u sed+ 0 x 7 c>8 0 4 9 169:8 3 ec 7 8?>ub $0 x 7 8 ,%esp80

43、 4 9 l 6c :8 d 4424 1 cle a 0 x 1c(%esp) ,%ea x804 9 170 : 50?Rush %eax8 0 49171: 8d 442 4 18le a0 x1 8 (%esp ),% e ax804 9 175:50push%ea x8 0 491 7 6:8d 4 4 24 20? ea0x 2 0( % esp),% ea x8 0 4917a: 50?p u s h%eax804 9 1 7 b:68 ?6 9 a l04 08p us h$ 0 x804a1 6 9 ”d % d %s ”8 0 49180:6 ?8f 0 b 504 0 8

44、p u s h$0x804 b5f 0 - ”0 37 ”80491 8 5 : e8 36 f 6 ff f f2 a II8 0487c0 <_ i so c 99_ ss can fpLt >8 04918a:8 3(c4 20?3dd$0x 20,%esp80 4 9 l 8d: 8 3 f8 03?:mp$0 x 3 , % eax-有三个参数8 0 4 9 190:75 3 aj n 'e8 0 4 91c c <pha s edefus ed +0 x 6c >从这里可以看出只有通过了第六关才能到达隐藏关口,而且隐藏的关口需要收入三个参数,从提示中

45、可以知道这三个参数是从第四行读取的,所以需要再在第四行添加一个字符串,至于这个字符串是什么,需要打印相应的地址查看。804 9 19 2: ?8 3 e c 088049195: 6?8 72 a1 0 4 088 0 4919a:8d 4 4 24 1 cp), %eax8 0 49 19e: 50?804919f:e8 6 c fd f f ffl8 0 491a 4 : 83?c 4 1 080 4 91a7: 85?c0s u b $0 x8, %e sppush $ 0 x 8 04a172le a0 x 1c(% es中 u s h % eax?:all 8048f10 <s

46、 t ri n gs not eq uaadd $0 xl 0,%e s p?es t %e a x,%eax8 0 491a9: 2 75?1?n e 804 9 1 cc vphase defused+ 0x 6 c >80 4 9 1 ab: 83? ec 0csu b $ 0x c ,%esp8 0 491 a e:38 68? a 0 0408pu sh $0x804 a 038804 9 1b3: ?28 a8f5 f f 1f f?cal l80 4876 0 <putsplt>80 4 9 1b8: ? 70 4 24 60a0 0408 ?m o v l$0

47、 x 804a06 0 ,(%esp)804 9 1bf: e 89 c f 5 ff ffcall 804876 0 v pu t spl t>8 0 491c4:宅8 58 fcf f f fc a ll8048 e2 1 <se c ret_pha s e>80 4 91 c9 :83 c4 10?add$0x 1 0 , % esp80 4 9 1 c c: 83? ec 0c?>ub $0xc,% e s p8 0491cf: ?6 8 98 a 0 04 08push$0x80 4a09880 4 9 1d4:e887 f5ff ffcall804 8 76

48、0 vp u tspl t>8 0491 d 9: 83 c4 7cadd $0 x7c,%es p80491dc:f 3 c 3?re pzre t面这些是判定字符是否相等,之后输入一些信息,并且进入函数fu nc7。打 印相关地址:(gdb) p (char 士) 0x904al69SI 1 =69 "%d %d(gdb) p (chdr +J 0x804b5f0$12 = 0xS04b5f0 <input_3tringsi-240> pt10 37,r(gdb) p (char 0x804al72$13 = 0x804al72 '"DrEvil"(qdb) p (char *) 0x804a038$14

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论