CSAPP-Bomblab

BombLab

首先分析一下main函数

Untitled

第一关—phase_1

Untitled

我们跟进一下strings_not_equal函数

Untitled

补充****

Untitled

回到了phase_1函数(string_not_equal函数里的注释”回到main函数”有误, 是回到了phase_1函数)

Untitled

跟进explode_bomb函数

Untitled

但是我们动手查看就可以知道, 以上我们看过的函数中有很多地址是找不到的, 这时因为在程序运行时, 这些地址才会加载出来:

  • 0x402400: 这个地址是用于跟input作比较的参考字符串地址
  • 0x4025a3: 这个地址是explode_bomb函数中要打印的第一个字符串
  • 0x4025ac: 这个地址是explode_bomb函数中要打印的第二个字符串

所以我们利用gdb调试器来找到这些地址中的值:

  • 0x402400: “Border relations with Canada have never been better.”

Untitled

  • 0x4025a3: “\nBOOM!!!”

Untitled

  • 0x4025ac: “The bomb has blown up.”

Untitled

由此可以敲定函数explode_bomb函数就是但我们输入错误的input时执行的, 同时我们也由此知道了第一个正确的输入就是”Border relations with Canada have never been better.”, 但是strings_not_equat函数后面还有一大截没有分析, 所以我们需要验证一下

Untitled

经过验证, 已经知道了我们查看的内存字符串即是正确字符串, 那也就是说strings_not_equat函数后面的指令都是为了验证每个字符都是相同的, 就不用深究了

第二关—phase_2(主要考察对函数调用时参数传递的形式, 然后就是控制转移的逻辑)

首先是main函数

Untitled

跟进至phase_2函数本身

Untitled

跟进read_six_numbers函数

Untitled

只是看做的注释跟标记是很容易搞混的, 所以直接画出栈空间会更好理解一些

Untitled

回到phase_2函数

这时由于释放了栈空间, 所以rsp的值等于rsi的值, 相当于第一个变量的地址

Untitled

最终输入

知道了逻辑那么输入就是”1 2 4 8 16 32”, 注意间隔要按照scanf的参数字符串来输入空格

最后我们过了第二关

Untitled

phase_3

main函数

Untitled

跟进phase_3函数

Untitled

主要的思路都在注释里, 重要的都标红了, 这里我们看一下存放地址的数组即可

Untitled

验证了上面的观点然后大致的思路就是一个下标对应一个数字, 再phase_3函数里面我已经标注过了, 只不过要输入十进制的数才行

最后不得不提的就是成功的标语

Untitled

我还以为这道题要输入两次, 才算过关, 这个成功了一半的意思是总共六关我过了三关, 成功了一半, 而不是这一个关卡成功了一半………最后还是找了main里面的puts的参数才知道的

phase_4

首先是main函数

Untitled

跟之前一样, rdi = 输入地址

跟进phase_4函数

Untitled

跟进func4函数

首先我们先理清函数的大致逻辑

Untitled

然后关于递归的逻辑

Untitled

最后是返回值的逻辑

Untitled

我这里说得不清不楚的………主要还是不知道怎么用文字表示, 回过头来看的时候, 还是要仔细看一下代码才行

phase_5

首先main函数

Untitled

我们跟进phase_5函数

Untitled

思路还是比较好理清的, 感觉要比前面的题目简单

我们经过查看内存发现了替换表和参考字符串

  • 替换表: maduiersnfotvbyl
  • 参考字符串: flyers

所以核心就是

1
2
参考字符串在替换表中的下标 + 16的倍数
主要是加上16的倍数后要是可见字符即可

phase_6

首先main函数

Untitled

跟进phase_6函数(由于很长, 所以我们分开分析)

第一部分, 验证输入数据个数, 大小要求, 然后进行变换7 - x

Untitled

第二部分, 替换成地址数组

Untitled

我们查看相应的地址

Untitled

第三部分, 链表排序

Untitled

第四部分, 验证

Untitled

解题

我们先从大到小给数据排列好

3 4 5 6 1 2

由于前面的7-a的操作所以我们再减回去

4 3 2 1 6 5

验证一下

Untitled

正确答案

一 Border relations with Canada have never been better.

二 1 2 4 8 16 32

三 1 311(还有另外7种答案, 同理, 找到对应关系即可)

四 7 0(第一个输入还可以是1 3 5)

五 9?>567(还有很多种,自行搭配)

六 4 3 2 1 6 5

文章作者: LamのCrow
文章链接: http://example.com/2022/03/03/BombLab ce420/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LamのCrow