• CSAPP-拆弹实验


    一、phase_1

     查找字符串的位置,设置断点单点调试,查看寄存器ebx里的值,减去1ebc后就是字符串的地址

     

     二、phase_2(循环)

     

     输入六个数,由上图标注指令可以看出第一个数等于1。

    add %eax,%eax //每个数是前一个数乘2,也就是等比数列

     可以查看寄存器中的值验证

     

     

     以此类推,执行六次就能得出六个值

    答案为:1 2 4  8 16 32

    三、phase_3(switch)

    首先要知道题目要输入什么

     

     要输入一个整数 一个字符 一个整数

     可以看出是switch跳表

    输入第一个数字,就已经确定了第二个字符和第一个数字

     

    第一个数字需要小于7

    输入0

     跳转到.L25 字符为d 数字为 696

     答案为:0 d 696

     同理,答案还有:1 o 361 等

    四、phase_4(递归)

    查看这里寄存器中的内容

     

     要求输入两个数

     

     一个数范围2、3、4

    输入2,3,查看这一步寄存器eax里的数

     说明这里是第二个数

    第一个数查看调用fun4后的返回值,查看寄存器eax

     

     所以答案是162 3

     同理答案还有 108 2、 216 4

    五、phase_5(数组)

    同理,输入2个整数

    第一个数二进制后四位不能是1111

    查看数组里的值

     

     最关键的一条指令

     相当于C语言中的 n=a[n]

    数组的调用顺序为:

    执行15次循环,最后值保存在ecx中

     

     最后ecx值为115,第二个数为115

    答案为5 115

    六、phase_6链表

    输入六个数,为1-6的某个顺序

     寻找六个结点

    查看六个结点中的数

     按照降序排序

    3ce(2)>396(5)>2e5(4)>24e(1)>163(3)>a3(6)

    最终答案为:2 5 4 1 3 6

    七、secret_phase(隐藏阶段)

    首先要在第四阶段后添加一个字符串

     查找字符串的位置

     fun7是一个递归函数

     参考博客https://www.cnblogs.com/chkkch/archive/2011/05/21/2052708.html

     最后的返回值是6

     只有一种情况符合

     查看答案所在地址,先加4,再加8,加8

     

     最后答案为35

    总结:拆弹结束啦

     一开始真的什么都不会,什么指令也不懂,慢慢看大佬写的解析,自己慢慢摸索,一关一关终于解开了。其实里面有很多是运气成分,函数里的代码也只看懂了关键的,其他也没有深究,汇编还是要好好学!像推理一样,拆完每一关都很激动,LOL。

  • 相关阅读:
    下载文件
    利用 js 获取地址栏参数
    子组件向父组件传值
    cordova 插件 调用iOS社交化分享(ShareSDK:微信QQ分享)
    cordova 企业应用打包Archive的时候报 "#import <Cordova file not found"
    企业应用打包的时候 修改ipa包的bundle identifier
    Mac下利用safari调试 Cordova的WebApp
    Mac下利用Cordova打包 iOS App以及出现的问题
    数据库设计流程
    Javascript 获取dom的宽度 随笔一
  • 原文地址:https://www.cnblogs.com/Hfolsvh/p/14105434.html
Copyright © 2020-2023  润新知