




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一定要记得 开始 在 bomb 的地址设置一个断点 防爆 Phase 1 Phase 1 Phase 1 代码 08048c10 8048c10 83 ec 1c sub 0 x1c esp 8048c13 c7 44 24 04 c4 99 04 movl 0 x80499c4 0 x4 esp 8048c1a 08 8048c1b 8b 44 24 20 mov 0 x20 esp eax 8048c1f 89 04 24 mov eax esp 8048c22 e8 dd 03 00 00 call 8049004 8048c27 85 c0 test eax eax 8048c29 74 05 je 8048c30 8048c2b e8 5b 09 00 00 call 804958b 8048c30 83 c4 1c add 0 x1c esp 8048c33 c3 ret 从调用的函数 strings not equal 可以看出这是比较两个字符串的函数 字符串相 等 返回 1 不等返回 0 接下来对返回值进行 test 并判断 test 结果是否为 0 为零 字 符串相等 跳过 bomb 否则 字符串不等 执行 bomb strings not equal 程序代码中我们可以看出是对 esp 4 和 esp 8 指向的内容进行比 较 在 call 指令会让 esp 减 4 因此对应到主函数就可以看出比较的是 esp 和 esp 4 指 向的内容 主函数中对应的就是 输入 和 0 x80499c4 地址中的内容 因此 只要保证输入内容等于 0 x80499c4 地址中的内容 便能不引爆炸弹 查找该 0 x80499c4 中的内容 得到之后运行程序并输入即可 Phase 2Phase 2 代码 08048c34 8048c34 56 push esi 8048c35 53 push ebx 8048c36 83 ec 34 sub 0 x34 esp 8048c39 8d 44 24 18 lea 0 x18 esp eax 8048c3d 89 44 24 04 mov eax 0 x4 esp 8048c41 8b 44 24 40 mov 0 x40 esp eax 8048c45 89 04 24 mov eax esp 8048c48 e8 43 0a 00 00 call 8049690 8048c4d 8d 5c 24 1c lea 0 x1c esp ebx 8048c51 8d 74 24 30 lea 0 x30 esp esi 8048c55 8b 43 fc mov 0 x4 ebx eax 8048c58 83 c0 05 add 0 x5 eax 8048c5b 39 03 cmp eax ebx 8048c5d 74 05 je 8048c64 8048c5f e8 27 09 00 00 call 804958b 8048c64 83 c3 04 add 0 x4 ebx 8048c67 39 f3 cmp esi ebx 8048c69 75 ea jne 8048c55 8048c6b 83 c4 34 add 0 x34 esp 8048c6e 5b pop ebx 8048c6f 5e pop esi 8048c70 c3 ret 由于 call 了子程序 read six numbers 而子程序代码太麻烦 于是便没有仔细分析 但是从函数名称可以看出这是读出 6 个数字 应该存在 6 个相邻的地址 Call 完返回主程序的代码 看出 ebx 4 5 esi 接下来执行一些操作 A 不引爆 bomb 的情况下 便将 ebx 4 并与 esi 比较 如果不等便要重新执行操作 A 相等则主要 功能结束 相当于 for int i 0 i 20 i 4 可以看出这个过程就是一个循环 将操作 A 执行 5 次 来看操作 A 分析代码发现就是比较 ebx 4 指向的内容 5 与 ebx 指向的内容 的大小 相等则将 ebx 4 循环下去 不等则执行 bomb 这个过程将被执行 5 次 一共参 与的元素是相邻的 6 个 可以猜测这六个元素是我们输入的 6 个数字 依次加 5 或者依次 减 5 这个和 read six numbers 的对六个输入堆栈顺序有关 因为我没看子程序 所以 不清楚 随便试一组数字就可以了 如果依次减 5 报错说明就是依次加 5 我直接试了加 5 通 过 Phase 3 代码 08048c71 8048c71 83 ec 2c sub 0 x2c esp 8048c74 8d 44 24 1c lea 0 x1c esp eax 8048c78 89 44 24 0c mov eax 0 xc esp 8048c7c 8d 44 24 18 lea 0 x18 esp eax 8048c80 89 44 24 08 mov eax 0 x8 esp 8048c84 c7 44 24 04 c7 9d 04 movl 0 x8049dc7 0 x4 esp 8048c8b 08 8048c8c 8b 44 24 30 mov 0 x30 esp eax 8048c90 89 04 24 mov eax esp 8048c93 e8 78 fc ff ff call 8048910 8048c98 83 f8 01 cmp 0 x1 eax 8048c9b 7f 05 jg 8048ca2 8048c9d e8 e9 08 00 00 call 804958b 8048ca2 83 7c 24 18 07 cmpl 0 x7 0 x18 esp 8048ca7 77 3c ja 8048ce5 8048ca9 8b 44 24 18 mov 0 x18 esp eax 8048cad ff 24 85 40 9a 04 08 jmp 0 x8049a40 eax 4 8048cb4 b8 64 00 00 00 mov 0 x64 eax 8048cb9 eb 3b jmp 8048cf6 8048cbb b8 6f 02 00 00 mov 0 x26f eax 8048cc0 eb 34 jmp 8048cf6 8048cc2 b8 3e 03 00 00 mov 0 x33e eax 8048cc7 eb 2d jmp 8048cf6 8048cc9 b8 19 01 00 00 mov 0 x119 eax 8048cce eb 26 jmp 8048cf6 8048cd0 b8 b0 02 00 00 mov 0 x2b0 eax 8048cd5 eb 1f jmp 8048cf6 8048cd7 b8 13 03 00 00 mov 0 x313 eax 8048cdc eb 18 jmp 8048cf6 8048cde b8 8d 02 00 00 mov 0 x28d eax 8048ce3 eb 11 jmp 8048cf6 8048ce5 e8 a1 08 00 00 call 804958b 8048cea b8 00 00 00 00 mov 0 x0 eax 8048cef eb 05 jmp 8048cf6 8048cf1 b8 77 00 00 00 mov 0 x77 eax 8048cf6 3b 44 24 1c cmp 0 x1c esp eax 8048cfa 74 05 je 8048d01 8048cfc e8 8a 08 00 00 call 804958b 8048d01 83 c4 2c add 0 x2c esp 8048d04 c3 ret 从代码可以看出 主程序又调用了一个叫做 sscanf 的子程序 从函数的名字就能 看出是读入输入的参数 但是要输入几个参数现在还不知道 看下面一条指令 cmp 0 x1 eax 将输入参数个数 eax 与 1 进行比较 大于 1 则继续执行 否则引爆 说明至 少输入两个数据 从 movl 0 x8049dc7 0 x4 esp 看出可能这是个给 sscanf 的参量 用 x xw x cb x sb 试过依次之后发现 该地址的内容为 d d 所以要求输入的应该是 两个整型数字 在 call sscanf 的下一条语句设置断点 来观察输入数据的存储位置 随便输入 20 30 通过 info reg 并查找 esp 附近地址的内容发现 20 30 分别在 esp 0 x18 和 esp 0 x1c 的位置 下面称输入的第一个数为 A 第二个数为 B 继续看代码发现 若 A 超过 7 则引爆炸弹 说明 A 需在 0 7 之间取 之后 由 A 值 取值的不同跳转到不同的地址 跳转到地址 0 x8049a40 4 A 下图现实从 A 0 7 所对应的不同地址的内容 这些地址都是 phase3 中的不同语句地址 可以看出其实是执行一个 c 语言中的 case 语句 根据输入的不同 所执行的命令也不同 在看剩下的 case 语句 就是把固定的值赋给 eax 并将 eax 与 B 作比较 相等则结 束 不等则引爆炸弹 因此只要让 B 与对应 A 跳转后的赋值相等即可 可以得知此题答案 不唯一 A B 0 100 1 119 2 623 3 830 4 281 5 688 6 787 7 653 随便输了一组 答案正确 Phase 4Phase 4 代码 08048d05 8048d05 53 push ebx 8048d06 83 ec 18 sub 0 x18 esp 8048d09 8b 5c 24 20 mov 0 x20 esp ebx 8048d0d b8 01 00 00 00 mov 0 x1 eax 8048d12 83 fb 01 cmp 0 x1 ebx 8048d15 7e 0e jle 8048d25 8048d17 8d 43 ff lea 0 x1 ebx eax 8048d1a 89 04 24 mov eax esp 8048d1d e8 e3 ff ff ff call 8048d05 8048d22 0f af c3 imul ebx eax 8048d25 83 c4 18 add 0 x18 esp 8048d28 5b pop ebx 8048d29 c3 ret 08048d2a 8048d2a 83 ec 2c sub 0 x2c esp 8048d2d 8d 44 24 1c lea 0 x1c esp eax 8048d31 89 44 24 08 mov eax 0 x8 esp 8048d35 c7 44 24 04 ca 9d 04 movl 0 x8049dca 0 x4 esp 8048d3c 08 8048d3d 8b 44 24 30 mov 0 x30 esp eax 8048d41 89 04 24 mov eax esp 8048d44 e8 c7 fb ff ff call 8048910 8048d49 83 f8 01 cmp 0 x1 eax 8048d4c 75 07 jne 8048d55 8048d4e 83 7c 24 1c 00 cmpl 0 x0 0 x1c esp 8048d53 7f 05 jg 8048d5a 8048d55 e8 31 08 00 00 call 804958b 8048d5a 8b 44 24 1c mov 0 x1c esp eax 8048d5e 89 04 24 mov eax esp 8048d61 e8 9f ff ff ff call 8048d05 8048d66 3d b0 13 00 00 cmp 0 x13b0 eax 8048d6b 74 05 je 8048d72 8048d6d e8 19 08 00 00 call 804958b 8048d72 83 c4 2c add 0 x2c esp 8048d75 c3 ret 由之前的经验可以看出 movl 0 x8049dca 0 x4 esp 先查看地址 0 x8049dca 中 的字符串看要求输入的是什么类型的数据 查看之后发现是 d 可知要求输入的是一位 整型数据 从之后的操作语句中推断 esp 0 x12 的内容应该就是所输入的数字 下面称 B 分析代码可知 B 为一个非零整数 执行下面的循环 Func4 int B int eax 1 if B 1 return eax else eax Func4 B 1 eax eax b return eax 最后得到的 eax 如果等于 0 x13b0 即十进制的 5040 则结束 若不等就引爆炸弹 倒过来推当 B 7 时 最后 return 的 eax 为 5040 因此答案就为 7 Phase 5Phase 5 代码 08048d76 8048d76 83 ec 2c sub 0 x2c esp 8048d79 8d 44 24 1c lea 0 x1c esp eax 8048d7d 89 44 24 0c mov eax 0 xc esp 8048d81 8d 44 24 18 lea 0 x18 esp eax 8048d85 89 44 24 08 mov eax 0 x8 esp 8048d89 c7 44 24 04 c7 9d 04 movl 0 x8049dc7 0 x4 esp 8048d90 08 8048d91 8b 44 24 30 mov 0 x30 esp eax 8048d95 89 04 24 mov eax esp 8048d98 e8 73 fb ff ff call 8048910 8048d9d 83 f8 01 cmp 0 x1 eax 8048da0 7f 05 jg 8048da7 8048da2 e8 e4 07 00 00 call 804958b 8048da7 8b 44 24 18 mov 0 x18 esp eax 8048dab 83 e0 0f and 0 xf eax 8048dae 89 44 24 18 mov eax 0 x18 esp 8048db2 83 f8 0f cmp 0 xf eax 8048db5 74 2a je 8048de1 8048db7 b9 00 00 00 00 mov 0 x0 ecx 8048dbc ba 00 00 00 00 mov 0 x0 edx 8048dc1 83 c2 01 add 0 x1 edx 8048dc4 8b 04 85 60 9a 04 08 mov 0 x8049a60 eax 4 eax 8048dcb 01 c1 add eax ecx 8048dcd 83 f8 0f cmp 0 xf eax 8048dd0 75 ef jne 8048dc1 8048dd2 89 44 24 18 mov eax 0 x18 esp 8048dd6 83 fa 0c cmp 0 xc edx 8048dd9 75 06 jne 8048de1 8048ddb 3b 4c 24 1c cmp 0 x1c esp ecx 8048ddf 74 05 je 8048de6 8048de1 e8 a5 07 00 00 call 804958b 8048de6 83 c4 2c add 0 x2c esp 8048de9 c3 ret 根据前面的经验 movl 0 x8049dc7 0 x4 esp 操作 查看地址 0 x8049dc7 内的 字符串来看要求输入的元素的个数 数据类型 用 x sb 查看出该地址的内容为 d d 说明答案为两个整型数字 再根据前面的经验 输入的第一个数字放在 esp 0 x18 第二个 数字放在 esp 0 x1c 以下称第一个数为 A 第二个数为 B 从代码可以看出 操作将之后将 A 转换成 16 进制后只取最后一位 并替换掉原数字 A 设其为 AA 且 AA 不能为 0 xf 将 eax 的值赋为 AA 之后就是执行一个循环 将地址 0 x8049a60 4 eax 的内容赋给 eax 并令 ecx ecx eax 这个循环一共执行 12 次 要求执行 12 次后 eax 值为 0 xf 且 ecx 值为 B 如此便知此题的得答案要领 便是要知道地址 0 x8049a60 附近的地址的值 已知最后 一次 eax 为 0 xf 倒着推 12 次便知道第一次的 eax 得出 AA 进而得到输入的第一个数 字 A 而输入的第二个数字 B 则为第 2 到第 13 个 eax 的和 可知第一个数字的答案并不唯 一 根据上图 倒推得第 13 到第 1 个数字依次为 15 6 14 2 1 10 0 8 4 9 13 11 7 由上面的 方法可以得出第一个数字为 7 k 16 k 为自然数 第二个数字为除了 7 以外剩下的 12 个 数之和 93 作答时取了 k 1 答案正确 Phase 6Phase 6 代码 08048dea 8048dea 57 push edi 8048deb 56 push esi 8048dec 53 push ebx 8048ded 8b 7c 24 10 mov 0 x10 esp edi 8048df1 8b 77 08 mov 0 x8 edi esi 8048df4 c7 47 08 00 00 00 00 movl 0 x0 0 x8 edi 8048dfb 89 f8 mov edi eax 8048dfd 85 f6 test esi esi 8048dff 75 35 jne 8048e36 8048e01 eb 45 jmp 8048e48 8048e03 89 d1 mov edx ecx 8048e05 8b 51 08 mov 0 x8 ecx edx 8048e08 85 d2 test edx edx 8048e0a 74 0a je 8048e16 8048e0c 39 1a cmp ebx edx 8048e0e 66 90 xchg ax ax 8048e10 7f f1 jg 8048e03 8048e12 89 cf mov ecx edi 8048e14 eb 02 jmp 8048e18 8048e16 89 cf mov ecx edi 8048e18 39 d7 cmp edx edi 8048e1a 74 06 je 8048e22 8048e1c 89 77 08 mov esi 0 x8 edi 8048e1f 90 nop 8048e20 eb 02 jmp 8048e24 8048e22 89 f0 mov esi eax 8048e24 8b 4e 08 mov 0 x8 esi ecx 8048e27 89 56 08 mov edx 0 x8 esi 8048e2a 85 c9 test ecx ecx 8048e2c 74 1a je 8048e48 8048e2e 89 ce mov ecx esi 8048e30 89 c1 mov eax ecx 8048e32 89 c7 mov eax edi 8048e34 eb 04 jmp 8048e3a 8048e36 89 f8 mov edi eax 8048e38 89 f9 mov edi ecx 8048e3a 89 ca mov ecx edx 8048e3c 85 c9 test ecx ecx 8048e3e 74 d8 je 8048e18 8048e40 8b 1e mov esi ebx 8048e42 39 19 cmp ebx ecx 8048e44 7f bf jg 8048e05 8048e46 eb d0 jmp 8048e18 8048e48 5b pop ebx 8048e49 5e pop esi 8048e4a 5f pop edi 8048e4b c3 ret 08048e4c 8048e4c 83 ec 1c sub 0 x1c esp 8048e4f c7 44 24 08 0a 00 00 movl 0 xa 0 x8 esp 8048e56 00 8048e57 c7 44 24 04 00 00 00 movl 0 x0 0 x4 esp 8048e5e 00 8048e5f 8b 44 24 20 mov 0 x20 esp eax 8048e63 89 04 24 mov eax esp 8048e66 e8 35 fb ff ff call 80489a0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 融资租赁协议的法律框架
- 福建省福州黎明中学2024-2025学年下学期八年级期中考历史试题(含答案)
- 共享办公空间增值服务行业投资风险与2025年规避策略报告
- 2025年黑龙江省辅警招聘考试题库及答案
- 2025年河南省信阳市辅警人员招聘考试题库及答案
- 教师招聘之《小学教师招聘》能力提升B卷题库审定版附答案详解
- 教师招聘之《幼儿教师招聘》考前冲刺测试卷讲解附参考答案详解【能力提升】
- 考点攻克自考专业(行政管理)真题(考点提分)附答案
- 内蒙古呼伦贝尔农垦牙克石、莫拐、免渡河农牧场有限公司招聘笔试题库参考答案详解
- 2025年教师招聘之《小学教师招聘》通关试卷提供答案解析附答案详解(基础题)
- 山东省独生子女父母退休一次性养老补助申请表
- 国寿新绿洲团体意外伤害保险(A款)条款
- 甲状旁腺功能亢进症课件
- 天翼云认证开发工程师必备考试复习题库(高分版)-上(单选题)
- 中远海运(上海)有限公司招聘考试真题及答案2022
- 癌痛及三阶梯止痛原则
- JJG 861-2007酶标分析仪
- 神经网络-课件
- 高管人员劳动合同书
- 被覆上皮课件
- 尾矿库安全监测技术规范
评论
0/150
提交评论