内容提要
这篇文章详细记录了在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。