CSAPP lab binary bomb 二进制炸弹

本文详细介绍了CSAPP实验中的binary bomb,通过GDB逐步调试分析了phase_1至phase_6的解谜过程,包括字符串比较、算术运算、sscanf格式化输入、递归函数和ASCII码谜题等挑战。
摘要由CSDN通过智能技术生成

binary bomb (二进制炸弹),这是CSAPP的一个lab。大概的意思是:给出一个二进制的可执行文件,及其对应的C语言主程序(只有主程序,其中调用的函数没有源代码)。运行这个可执行文件的时候,会有若干个“关卡”,每一个“关卡”会要求学生输入一些东西,经过处理后,如果与预计的相符,就解除了“炸弹”,进入下一关。如果输入不对,“炸弹”爆炸。学生要做的,就是利用GDB, objdump等工具,找出每一个关卡应该输入什么东西。

大三的一个实验,当时做得很头疼。

相关代码及说明下载

Phase_1

在cmd中输入 gdb bomb.exe用gdb 开始调试 bomb,输入l 可以查看源码
这里写图片描述

首先要解决的是 phase_1,输入b phase_1 在调用phase_1()函数前设置断点,然后用命令 r运行程序。
这里写图片描述
在断点前停止,查看汇编的代码( 为什么这个和VC下看到的汇编的参数顺序是相反的? )
这里写图片描述
从汇编的代码中可以看出来, test %eax, %eax这里决定会不会跳到call 0x40ifa4(explode_bomb),要是跳到这里那就是炸弹爆炸了 ,所以我们要跳过这里,执行 je 0x401868(phase_1+34), phase_1+34也就是leave 。Test是逻辑运算指令,执行 BIT与BIT 之间的逻辑运算,修改标志位。所以 test %eax, %eax结果要为0 ,才不会引爆炸弹。 eax里面存放的是strig_not_equal的返回值, 所以eax里面的值应为 0,也就是说两个字符串应该相等。 那么很自然地就想到,我们要输入的字符串就是和程序里面的某个字符串相同的字符串。
观察代码知道 phase_1函数主要就是调用string_not_equal,传进去的参数是传给 phase_1的参数和存在内存中地址为 0x4061a2的值。
用命令查看 0x4061a2这个地址存放的值。
这里写图片描述
测试
这里写图片描述
成功!!!

Phase_2

phase有两个地方要跳过

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值