CSAPP Bomblab 题解

CSAPP Bomblab 题解

💡 原文中文,约35600字,阅读约需85分钟。
📝

内容提要

这篇文章详细记录了在Kali GNU/Linux环境下进行的“炸弹”程序解题过程。通过反汇编和调试,作者分析了程序的字符串比较、循环、跳转表、递归和链表等阶段,最终得出了一系列输入答案以成功拆除炸弹,并提到了一些编程技巧和调试工具的使用。

🎯

关键要点

  • 实验环境为Kali GNU/Linux Rolling x86_64。

  • 通过反汇编和调试,分析了程序的字符串比较、循环、跳转表、递归和链表等阶段。

  • 在phase_1中,通过调用strings_not_equal函数比较输入字符串与bomb1的答案,得出答案为"Crikey! I have lost my mojo!"。

  • 在phase_2中,要求输入六个数字,满足条件a[0]+1=a[1],a[1]+2=a[2],依此类推,可能的答案为1 2 4 7 11 16。

  • 在phase_3中,使用跳转表,根据输入的第一个数字进行跳转,正确答案为0 b 624,1 x 813,2 u 140,3 p 265,4 q 863,5 o 997,6 q 224,7 d 840。

  • 在phase_4中,使用递归函数func4,要求输入d2为2、3或4,得出d1为33*d2,可能的答案有66 2,99 3,132 4。

  • 在phase_5中,输入两个数字d1和d2,d1 & 0xf不能等于15,且通过链表的遍历,得出答案为5 115。

  • 在phase_6中,要求输入六个数字,任意数字不大于6,且两两不相等,正确答案为1 4 3 5 2 6。

  • secret_phase要求输入的字符串为"DrEvil",并通过fun7函数的递归计算,得出答案为107。

延伸问答

在Kali GNU/Linux环境下如何拆除炸弹程序?

通过反汇编和调试,逐步分析每个阶段的输入要求,最终得出正确答案。

phase_1的正确输入是什么?

phase_1的正确输入是"Crikey! I have lost my mojo!"。

phase_2需要输入什么样的数字?

phase_2要求输入六个数字,满足条件a[0]+1=a[1],a[1]+2=a[2],依此类推,可能的答案为1 2 4 7 11 16。

phase_3的跳转表如何工作?

phase_3使用跳转表,根据输入的第一个数字进行跳转,正确答案为0 b 624,1 x 813,2 u 140,3 p 265,4 q 863,5 o 997,6 q 224,7 d 840。

phase_4的递归函数func4的输入要求是什么?

phase_4要求输入d2为2、3或4,得出d1为33*d2,可能的答案有66 2,99 3,132 4。

secret_phase的正确输入是什么?

secret_phase要求输入的字符串为"DrEvil",并通过fun7函数的递归计算,得出答案为107。

🏷️

标签

➡️

继续阅读