精华内容
下载资源
问答
  • BinaryBomb 实验 二进制拆弹实验 BinaryBomb 实验 二进制拆弹实验 前言 学校实验,binarybomb实验,做到phase_4的时候卡住了实在搞不懂那个递归是什么东西,有没有大佬能帮帮忙求一下,非常感谢 一、bomb.exe 二、...

    BinaryBomb 实验 二进制拆弹实验

    BinaryBomb 实验 二进制拆弹实验


    前言

    学校实验,binarybomb实验,做到phase_4的时候卡住了实在搞不懂那个递归是什么东西,有没有大佬能帮帮忙求一下,非常感谢,大概就是输入两个整数,传入func4递归函数中,经过运算令得传回来的经过等于203,但这两个数我死活算不出来,希望有大佬救救命,没玩过拆弹实验的也可以试一下
    还挺好玩的,只不过我太菜了,哈哈哈

    一、bomb.exe

    二、phase_4的汇编代码

    080496cd <phase_4>:
    80496cd: 55 push %ebp
    80496ce: 89 e5 mov %esp,%ebp
    80496d0: 57 push %edi
    80496d1: 56 push %esi
    80496d2: 53 push %ebx
    80496d3: 81 ec dc 00 00 00 sub $0xdc,%esp
    80496d9: 8d 85 2c ff ff ff lea -0xd4(%ebp),%eax
    80496df: bb 20 b2 04 08 mov $0x804b220,%ebx
    80496e4: ba 2e 00 00 00 mov $0x2e,%edx
    80496e9: 89 c7 mov %eax,%edi
    80496eb: 89 de mov %ebx,%esi
    80496ed: 89 d1 mov %edx,%ecx
    80496ef: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
    80496f1: 8d 85 24 ff ff ff lea -0xdc(%ebp),%eax
    80496f7: 50 push %eax
    80496f8: 8d 85 28 ff ff ff lea -0xd8(%ebp),%eax
    80496fe: 50 push %eax
    80496ff: 68 e9 b1 04 08 push $0x804b1e9
    8049704: ff 75 08 pushl 0x8(%ebp)
    8049707: e8 c4 f9 ff ff call 80490d0 __isoc99_sscanf@plt
    804970c: 83 c4 10 add $0x10,%esp
    804970f: 89 45 e4 mov %eax,-0x1c(%ebp)
    8049712: 83 7d e4 02 cmpl $0x2,-0x1c(%ebp)
    8049716: 74 0f je 8049727 <phase_4+0x5a>
    8049718: e8 db 07 00 00 call 8049ef8 <explode_bomb>
    804971d: b8 00 00 00 00 mov $0x0,%eax
    8049722: e9 bc 00 00 00 jmp 80497e3 <phase_4+0x116>
    8049727: 8b 95 24 ff ff ff mov -0xdc(%ebp),%edx
    804972d: 8b 85 28 ff ff ff mov -0xd8(%ebp),%eax
    8049733: 83 ec 04 sub $0x4,%esp
    8049736: 52 push %edx
    8049737: 50 push %eax
    8049738: 8d 85 2c ff ff ff lea -0xd4(%ebp),%eax
    804973e: 50 push %eax
    804973f: e8 16 ff ff ff call 804965a
    8049744: 83 c4 10 add $0x10,%esp
    8049747: 3d cb 00 00 00 cmp $0xcb,%eax
    804974c: 74 0f je 804975d <phase_4+0x90>
    804974e: e8 a5 07 00 00 call 8049ef8 <explode_bomb>
    8049753: b8 00 00 00 00 mov $0x0,%eax
    8049758: e9 86 00 00 00 jmp 80497e3 <phase_4+0x116>
    804975d: 8b 85 28 ff ff ff mov -0xd8(%ebp),%eax
    8049763: 85 c0 test %eax,%eax
    8049765: 7e 36 jle 804979d <phase_4+0xd0>
    8049767: 8b 85 24 ff ff ff mov -0xdc(%ebp),%eax
    804976d: 8b 95 28 ff ff ff mov -0xd8(%ebp),%edx
    8049773: 83 ea 01 sub $0x1,%edx
    8049776: 83 ec 04 sub $0x4,%esp
    8049779: 50 push %eax
    804977a: 52 push %edx
    804977b: 8d 85 2c ff ff ff lea -0xd4(%ebp),%eax
    8049781: 50 push %eax
    8049782: e8 d3 fe ff ff call 804965a
    8049787: 83 c4 10 add $0x10,%esp
    804978a: 3d cb 00 00 00 cmp $0xcb,%eax
    804978f: 75 0c jne 804979d <phase_4+0xd0>
    8049791: e8 62 07 00 00 call 8049ef8 <explode_bomb>
    8049796: b8 00 00 00 00 mov $0x0,%eax
    804979b: eb 46 jmp 80497e3 <phase_4+0x116>
    804979d: 8b 85 24 ff ff ff mov -0xdc(%ebp),%eax
    80497a3: 83 f8 2c cmp $0x2c,%eax
    80497a6: 7f 36 jg 80497de <phase_4+0x111>
    80497a8: 8b 85 24 ff ff ff mov -0xdc(%ebp),%eax
    80497ae: 8d 50 01 lea 0x1(%eax),%edx
    80497b1: 8b 85 28 ff ff ff mov -0xd8(%ebp),%eax
    80497b7: 83 ec 04 sub $0x4,%esp
    80497ba: 52 push %edx
    80497bb: 50 push %eax
    80497bc: 8d 85 2c ff ff ff lea -0xd4(%ebp),%eax
    80497c2: 50 push %eax
    80497c3: e8 92 fe ff ff call 804965a
    80497c8: 83 c4 10 add $0x10,%esp
    80497cb: 3d cb 00 00 00 cmp $0xcb,%eax
    80497d0: 75 0c jne 80497de <phase_4+0x111>
    80497d2: e8 21 07 00 00 call 8049ef8 <explode_bomb>
    80497d7: b8 00 00 00 00 mov $0x0,%eax
    80497dc: eb 05 jmp 80497e3 <phase_4+0x116>
    80497de: b8 01 00 00 00 mov $0x1,%eax
    80497e3: 8d 65 f4 lea -0xc(%ebp),%esp
    80497e6: 5b pop %ebx
    80497e7: 5e pop %esi
    80497e8: 5f pop %edi
    80497e9: 5d pop %ebp
    80497ea: c3 ret

    三,func4的汇编代码

    0804965a :
    804965a: 55 push %ebp
    804965b: 89 e5 mov %esp,%ebp
    804965d: 83 ec 18 sub $0x18,%esp
    8049660: 8b 55 0c mov 0xc(%ebp),%edx
    8049663: 8b 45 10 mov 0x10(%ebp),%eax
    8049666: 01 d0 add %edx,%eax
    8049668: 89 c2 mov %eax,%edx
    804966a: c1 ea 1f shr $0x1f,%edx
    804966d: 01 d0 add %edx,%eax
    804966f: d1 f8 sar %eax
    8049671: 89 45 f4 mov %eax,-0xc(%ebp)
    8049674: 8b 45 0c mov 0xc(%ebp),%eax
    8049677: 3b 45 10 cmp 0x10(%ebp),%eax
    804967a: 7c 13 jl 804968f <func4+0x35>
    804967c: 8b 45 10 mov 0x10(%ebp),%eax
    804967f: 8d 14 85 00 00 00 00 lea 0x0(,%eax,4),%edx
    8049686: 8b 45 08 mov 0x8(%ebp),%eax
    8049689: 01 d0 add %edx,%eax
    804968b: 8b 00 mov (%eax),%eax
    804968d: eb 3c jmp 80496cb <func4+0x71>
    804968f: 83 ec 04 sub $0x4,%esp
    8049692: ff 75 f4 pushl -0xc(%ebp)
    8049695: ff 75 0c pushl 0xc(%ebp)
    8049698: ff 75 08 pushl 0x8(%ebp)
    804969b: e8 ba ff ff ff call 804965a
    80496a0: 83 c4 10 add $0x10,%esp
    80496a3: 89 45 f0 mov %eax,-0x10(%ebp)
    80496a6: 8b 45 f4 mov -0xc(%ebp),%eax
    80496a9: 83 c0 01 add $0x1,%eax
    80496ac: 83 ec 04 sub $0x4,%esp
    80496af: ff 75 10 pushl 0x10(%ebp)
    80496b2: 50 push %eax
    80496b3: ff 75 08 pushl 0x8(%ebp)
    80496b6: e8 9f ff ff ff call 804965a
    80496bb: 83 c4 10 add $0x10,%esp
    80496be: 89 45 ec mov %eax,-0x14(%ebp)
    80496c1: 8b 45 ec mov -0x14(%ebp),%eax
    80496c4: 39 45 f0 cmp %eax,-0x10(%ebp)
    80496c7: 0f 4d 45 f0 cmovge -0x10(%ebp),%eax
    80496cb: c9 leave
    80496cc: c3 ret

    总结:bomb文件传不上来,只能发一下phase_4和func4的代码了,希望能有大佬帮忙解决一下这个大麻烦,头都要炸了

    展开全文
  • 二进制拆弹 binary bombs 教你最快速解题,成功拆弹最近计算机基础课,的实验lab2,二进制拆弹,可以说是拆的我很快乐了(sub n, %hair)此处头发减n我刚开始做的时候很是懵逼,首先对linux不熟悉,其次汇编嘛,本来就不简单,...

    二进制拆弹 binary bombs 教你最快速解题,成功拆弹

    最近计算机基础课,的实验lab2,二进制拆弹,可以说是拆的我很快乐了(sub n, %hair)

    此处头发减n

    我刚开始做的时候很是懵逼,首先对linux不熟悉,其次汇编嘛,本来就不简单,(Python是世界上最好的语言)

    首先在开始之前呐,先向大家推荐一个linux下的绘图软件 kolourPaint 这个有什么用,看我下面的图就知道了

    把相同的地址标出来,方便自己查找.

    还有推荐几个GDB 常用命令

    x/nfq adress //查看地址 n是查看的个数 f 是格式 常用 x 16进制 u 10进制无符号 s 字符串 q 是查看几个字

    b表示单字节,h表示双字节,w表示四字节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,

    读写指定字节,并把其当作一个值取出来。

    b //设置断点 这个很重要

    ni 单步执行

    info reg //查看寄存器的值

    这是用的比较多的 ,这个链接有更详细的 推荐大家学习一下

    https://blog.csdn.net/delbboy/article/details/8080738

    再来说一下拆弹的几个小技巧

    1.先看代码里的明码地址,查看一下说不定就是结果

    2.然后找比较指令,尤其是什么像0xc(%ebp) 0x8(%ebp) 比较你输入的数的指令,有可能这个地方就告诉你结果了呐

    3.再找输入判断指令,就是判断你输入的是不是符合要求,这样能缩小你要输入的值的范围,就算你不懂,拆答案也方便了

    4.然后使跳转指令,要跳转到,bomb的指令,前面一般都会有比较指令,这个时候,就能查看相应的内存的数据,查到自己的结果

    好了接下来进入正题

    phase_1  :字符串比较

    这个实验是输入一个字符串,比较与程序里的是否相同,查询明码地址0x8049ea4

    得到字符串When I get angry, Mr. Bigglesworth gets upset.

    输入后结果正确

    这个实验比较简单,就不细说了

    03e86704ac518874f64c454ddc0d7a12.png

    phase_2:  循环(图片使用linux下的KolourPaint制作)

    6a0bae64d4a2c942012d073eeb148152.png

    phase_3:条件分支

    1a35f1003bb373a04194b3738452c256.png

    phase_4: 递归

    df98d754437df9a727f6d9254140004c.png

    查询地址

    0x804a06f

    所以要输入两个参数

    fcc5fb6b8db4895bc99f00514f3d9321.png

    phase_5 : 指针

    f60c4e732b279a71a98423f2e6d11b89.png

    查询地址0x8049f20 得到数组元素

    801c7ee95061d478f6c2df2432b72135.png

    phase_6: 链表指针结构

    做前几关的时候还算比较顺利,可以说是运气比较好吧

    但是在这一关,看到这个汇编代码几乎没有头绪

    好不容易查出了 ,六个结构体,于是猜测,可能要输入的六个数应该是按照

    节点值的大小进行排序的结果;

    可是我降序排列,升序排列输入了好几次都不对,???还有什么可能那

    于是仔细查看了一下代码,发现有一个地方,把输入的数7-

    5变成2 6变1

    这就是这个的坑所在啊!

    于是又把之前输入的数 7- 了一次 果然对了;

    2044d98d90d119f079ce957a052095f4.png

    到这里我们可以猜出结构体应该是这样的

    1 strutc asm{2

    3 int num; //该处的值

    4

    5 int no; //当前结构体的编号

    6

    7 int *next; //指向下一个元素

    8

    9 }

    b448946a1888fa8f5e7460e329f36e7e.png

    查询地址得到

    aaa27e2c2959d5a57d5381d79b91c216.png

    降序排列 5 2 1 4 6 3 分别7-得到2 5 6 3 1 4

    隐藏关

    这里终于迎来了我们的大BOSS

    先来看看怎么进入吧

    e04b7c7fce1c56e2b8c124a167d530a2.png

    进入phase_defused 查看

    调用了一个判断输入了几个参数的输入函数,为3且第三个参数正确就进入了隐藏关

    376f2ae09d652282e03dbcf9348df038.png

    查询得知 要在第四关 的后面附加的字符串

    999e23cdf2a2c4b39b50e680442b3145.png

    于是得到结果0x32 = 50

    输入后结果正确

    1b4df1e0fefaee0e6beb21c56db5b344.png

    至此我们终于解决了我们的大boss,干杯 ,哈哈哈

    最后说一下解题最强法宝------你的计算机基础课本

    为什么那, 这是你课程的实验,肯定和你所学相关,据我所知用这本书的都有这几个实验,可以说这个实验

    和这门课这本书是配套的, 书中自有它的解题之道!

    好好看看第三章前40页,你再来做这个实验就会恍然大悟原来是这样啊!

    最后希望大家好好学习,取得好成绩 ,一起加油吧!!!

    本人水平有限

    如有问题,欢迎指正

    原文出处:https://www.cnblogs.com/Cherrison-Time/p/10085616.html

    展开全文
  • 二进制拆弹bomb实验第二弹

    千次阅读 2015-06-09 15:18:28
    二进制拆弹bomb实验第二弹

    著名的bomb拆炸弹实验第二关:

    程序运行在linux环境中。程序运行中有6个关卡(6个phase),每个phase需要用户在终端上输入特定的字符或者数字才能通关,否则会引爆炸弹!那么如何才能知道输入什么内容呢?这需要你使用gdb工具反汇编出汇编代码,结合c语言文件找到每个关卡的入口函数。然后分析汇编代码,找到在每个phase程序段中,引导程序跳转到“explode_bomb”程序段的地方,并分析其成功跳转的条件,以此为突破口寻找应该在命令行输入何种字符通关。

    第二弹正式开始!上代码!

    08048d6a <phase_2>:   //测试得到答案:0 1 1 2 3 5

     8048d6a:  55                   push   %ebp

     8048d6b:  89e5                mov   %esp,%ebp

     8048d6d:  56                   push   %esi

     8048d6e:  53                   push   %ebx

     8048d6f:  83ec 30                 sub    $0x30,%esp

     8048d72:  8d45 e0                 lea  -0x20(%ebp),%eax//猜测-0x20(%ebp)放的是第一个参数,-0x1c(%ebp)放第二个参数,以此类推

     8048d75:  8944 24 04              mov    %eax,0x4(%esp) 

     8048d79:  8b45 08                 mov    0x8(%ebp),%eax

     8048d7c:  8904 24                 mov    %eax,(%esp)

     8048d7f:  e887 03 00 00           call   804910b<read_six_numbers>

     8048d84:  837d e0 00              cmpl  $0x0,-0x20(%ebp)  //-0x20(%ebp) 我猜想应该是第1个参数位置,ebp要不等于0,就跳到爆炸

     8048d88:  7506                    jne    8048d90<phase_2+0x26> //就爆炸

     8048d8a:  837d e4 01              cmpl   $0x1,-0x1c(%ebp) //第二个参数要等于1,就跳过bomb

     8048d8e:  7405                    je     8048d95<phase_2+0x2b>    

     8048d90:  e83c 03 00 00           call   80490d1 <explode_bomb>

     8048d95:  8d5d e8                 lea    -0x18(%ebp),%ebx //第三个参数给ebx i的初始值为3

     8048d98:  8d75 f8                 lea    -0x8(%ebp),%esi //把第六个参数给esi

     8048d9b:  8b43 fc                 mov    -0x4(%ebx),%eax //第二个参数给eax

     8048d9e:  0343 f8                 add -0x8(%ebx),%eax  //eax=eax+(ebx-0x8)  (ebx-0x8)是第一个参数a[i]=a[i-1]+a[i-2];

     8048da1:  3903                    cmp    %eax,(%ebx)   // ebx和eax一样,就跳过bomb  第三个参数和第四个参数经过运算后eax+(ebx-0x8)一样

     8048da3:  7405                    je     8048daa <phase_2+0x40>

     8048da5:  e827 03 00 00           call   80490d1<explode_bomb>

     8048daa:  83c3 04                 add    $0x4,%ebx    //ebx+4,i++

     8048dad:  39f3                    cmp    %esi,%ebx    //ebx和esi,就是和第六个参数不一样,就循环,一样就跳出循环。

     8048daf:  75ea                    jne    8048d9b<phase_2+0x31>

     8048db1:  83c4 30                 add    $0x30,%esp

     8048db4:  5b                   pop    %ebx

     8048db5:  5e                       pop    %esi

     8048db6:  5d                   pop    %ebp

     8048db7:  c3                       ret

    看到这里,call   804910b <read_six_numbers>,就到0x804910b的地方去读代码,

    这个函数的主要功能就是读六个数进来(读入的六个参数放的位置很重要啊!我被这六个数的位置折磨得哎)。

    add -0x8(%ebx),%eax   //eax=eax+(ebx-0x8)  (ebx-0x8)是第一个参数 a[i]=a[i-1]+a[i-2]; add    $0x4,%ebx   //ebx+4,i++。从这两条语句可以推测这里有循环。然后再确定循环初始值:lea    -0x18(%ebp),%ebx //第三个参数给ebx i的初始值为3。

    add -0x8(%ebx),%eax   //eax=eax+(ebx-0x8)  (ebx-0x8)是第一个参数 a[i]=a[i-1]+a[i-2];应该是循环中执行的内容,用来求输入的参数值,因为这里有很多cmp语句,应该是用来判断计算得到的值是不是和我们输入的值一样。

    循环已经定了,就解决了大部分问题。cmpl   $0x0,-0x20(%ebp)  //-0x20(%ebp) 我猜想应该是第1个参数位置,ebp要不等于0,就跳到爆炸;cmpl   $0x1,-0x1c(%ebp) //第二个参数要等于1,就跳过bomb。这里确定了第一个数为0,第二个数为1.然后结合循环,求得参3=0+1=1;参4=1+1=2;参5=1+2=3;参6=2+3=5.试一试是不是对的吧。看截图(虽然之前死了好几次,但是最终还是光明的):

    成功了,我的推测是对的。哈哈哈!

     

      其实刚开始的时候我进入了一个误区,把六个参数放的位置搞倒了,绕了好几圈才绕出来,好惨~~~看上图bombbomb死了好几次,呜呜。因为我以为a[i]=a[i+1]+a[i+2],

    后来重新温故了书上关于函数调用时的帧栈知识,才明白后放入的参数地址越小。

    其实通过后面对gdb的应用,发现gdb的功能很强大,回过头来发现其实这题也可以通过gdb来观察我放入的参数放在哪个位置,这样就可以避免我之前犯的错误了,也不用纠结辣么久。。。还有就是书本上那个P149页的帧栈表很有用啊!!!后来好多题都有用到。


    展开全文
  • 二进制拆弹 binary bombs 教你最快速解题,成功拆弹 最近计算机基础课,的实验lab2,二进制拆弹,可以说是拆的我很快乐了(sub n, %hair) 此处头发减n 我刚开始做的时候很是懵逼,首先对linux不熟悉,其次汇编嘛,本来就...

    二进制拆弹 binary bombs 教你最快速解题,成功拆弹

    最近计算机基础课,的实验lab2,二进制拆弹,可以说是拆的我很快乐了(sub n, %hair)

    此处头发减n

    我刚开始做的时候很是懵逼,首先对linux不熟悉,其次汇编嘛,本来就不简单,(Python是世界上最好的语言)

    首先在开始之前呐,先向大家推荐一个linux下的绘图软件 kolourPaint 这个有什么用,看我下面的图就知道了

    把相同的地址标出来,方便自己查找.

    还有推荐几个GDB 常用命令

    x/nfq adress // 查看地址 n是查看的个数 f 是格式 常用 x 16进制 u 10进制无符号 s 字符串 q 是查看几个字

    b表示单字节,h表示双字节,w表示四字节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,

    读写指定字节,并把其当作一个值取出来。

             b //设置断点 这个很重要

          ni 单步执行  

          info reg //查看寄存器的值

    这是用的比较多的 ,这个链接有更详细的 推荐大家学习一下

        https://blog.csdn.net/delbboy/article/details/8080738

     

    再来说一下拆弹的几个小技巧

    1.先看代码里的明码地址,查看一下说不定就是结果

    2.然后找比较指令,尤其是什么像0xc(%ebp) 0x8(%ebp) 比较你输入的数的指令,有可能这个地方就告诉你结果了呐

    3.再找输入判断指令,就是判断你输入的是不是符合要求,这样能缩小你要输入的值的范围,就算你不懂,拆答案也方便了

    4.然后使跳转指令,要跳转到,bomb的指令,前面一般都会有比较指令,这个时候,就能查看相应的内存的数据,查到自己的结果

    好了接下来进入正题


     

    phase_1  :字符串比较

     这个实验是输入一个字符串,比较与程序里的是否相同,查询明码地址 0x8049ea4

    得到字符串When I get angry, Mr. Bigglesworth gets upset.

    输入后结果正确 

    这个实验比较简单,就不细说了

     

    phase_2:  循环图片使用linux下的KolourPaint制作)

     

    phase_3:条件分支

     

    phase_4: 递归

     

    查询地址 

    x804a06f

    所以要输入两个参数

     

    phase_5 : 指针

     

     

    查询地址 0x8049f20 得到数组元素

     

     phase_6: 链表指针结构

    • 做前几关的时候还算比较顺利,可以说是运气比较好吧
    • 但是在这一关,看到这个汇编代码几乎没有头绪
    • 好不容易查出了 ,六个结构体,于是猜测,可能要输入的六个数应该是按照
    • 节点值的大小进行排序的结果;

    可是我降序排列,升序排列输入了好几次都不对,???还有什么可能那

    于是仔细查看了一下代码,发现有一个地方,把输入的数7-

    5变成2 6变1 

    这就是这个的坑所在啊!

    于是又把之前输入的数 7- 了一次 果然对了;

     

     

    到这里我们可以猜出结构体应该是这样的

    1  strutc asm{
    2 
    3 int num;   //该处的值
    4 
    5 int no;   //当前结构体的编号
    6 
    7 int *next;   //指向下一个元素
    8 
    9 }

     

     

    查询地址得到

     

     

    降序排列 5 2 1 4 6 3 分别7- 得到2 5 6 3 1 4

    • 隐藏关 <secret_phase>
    • 这里终于迎来了我们的大BOSS

    先来看看怎么进入吧

     

     

    进入phase_defused 查看

    调用了一个判断输入了几个参数的输入函数,3且第三个参数正确就进入了隐藏关

     

     

     

    查询得知 要在第四关 的后面附加的字符串

     

     

    于是得到结果0x32 = 50

    输入后结果正确

     

    至此我们终于解决了我们的大boss,干杯 ,哈哈哈

    最后说一下解题最强法宝------你的计算机基础课本

    为什么那, 这是你课程的实验,肯定和你所学相关,据我所知用这本书的都有这几个实验,可以说这个实验

    和这门课这本书是配套的, 书中自有它的解题之道!

    好好看看第三章前40页,你再来做这个实验就会恍然大悟原来是这样啊!

    最后希望大家好好学习,取得好成绩 ,一起加油吧!!!

    本人水平有限

    如有问题,欢迎指正

     

    转载于:https://www.cnblogs.com/Cherrison-Time/p/10085616.html

    展开全文
  • 二进制拆弹(20181023-20181026)

    千次阅读 2018-10-26 21:21:57
    二进制拆弹一共设有七个关卡: phase_1:字符串比较 phase_2:循环 phase_3:switch phase_4:递归 phase_5:指针 phase_6:链表/指针/结构 secret_phase:隐藏关 Phase1-6通关截图 准备工作 我的电脑是...
  • 引言本次实验真的是投入巨大,不光是汇编代码艰涩难懂,而且分析过程也很麻烦,从...天知道我看到这个的时候有多激动(是我太菜了www)话不多说,下面进入正题:环境配置由于这次实验需要对二进制文件进行修改,所...
  • linux下二进制拆弹

    2011-03-16 20:02:58
    首先bomb.rar里面给了我们一个C程序,主要的部分如下: FILE *infile; int main(int argc, char *argv[]) {
  • 所谓Population Count算法,即是指计算一个二进制数中1的个数的算法。具体来说,就是任意给定一个无符号整数N,求N的二进制表示中1的个数,比如N = 5(0101)时,返回2;N = 15(1111)时,返回4。这个问题是一个经典的...
  • 其中第个参数,是num数组的地址。在后面,会剖析read_six_numbers函数,来证实以上的猜测,下面的分析以以上的栈帧图为基础。 9、第399行:cmp $0x1, 0x18(%esp),0x18(%esp)中是num[0],该语句判断num[0]是否应...
  • 文章目录所需要使用的调试工具开始进入拆弹过程 所需要使用的调试工具 1. gdb工具 *1. 使用 break 地址来设置断点,使用c指令从断点继续执行 2. 使用 info registers 指令观察寄存器状态 3. 使用 x/s 指令用字符串...
  • 这个实验从开始到完成大概花了三天的时间,由于我们还没有...这个系列的博客我将按照拆弹个数一个个的分析,应该会有七篇。。。。。。 给出对应于7个阶段的7篇博客 phase_1 https://www.cnblogs.com/wkfvawl/p/...
  • 如果需要使构成的new_str=="sabres",那么输入的input[i]的低4位对应的十进制数分别是 array[] 数组中字符's','a','b','r','e','s'的下标。 根据以上分析,要形成 "sabres" 字符串: array[] = {'m', 'a', 'd', ...
  • 给出对应于7个阶段的7篇博客 phase_1 ...
  • 时,二进制搜索树为:     根据前面分析,当给定 d1 时, func4 返回结果是搜索路径上的所有值之和。例如: 假设 d1 = 7 , func4 返回 7 。如果 d1=1 , func4 返回 7+3+1 = 11 。 当要求 func4 返回 ...
  • 其中第个参数,是 num 数组的地址。在后面,会剖析 read_six_numbers 函数,来证实以上的猜测,下面的分析以以上的栈帧图为基础。 9 、第 399 行: cmp $0x1, 0x18(%esp) , 0x18(%esp) 中是 num[0] ,该语句...
  • 给出对应于7个阶段的7篇博客 phase_1 ...

空空如也

空空如也

1 2 3 4 5
收藏数 91
精华内容 36
关键字:

二进制拆弹