![2c544762a6fd6fc48c6981310a22437a.png](https://img-blog.csdnimg.cn/img_convert/2c544762a6fd6fc48c6981310a22437a.png)
引言
本次实验真的是投入巨大,不光是汇编代码艰涩难懂,而且分析过程也很麻烦,从配置环境到拆弹到再配置环境到继续拆弹,前前后后花了四五天的时间才全部搞定。期间参考了不少博客,也查了好多配置环境的手册内容,请教了诸多大佬。
由于此次拆弹过程实属不易,还是觉得有必要总结一下拆弹的全过程。天知道我看到这个的时候有多激动(是我太菜了www)
![9deb5f765c6c94f28d76cae4f54aa1ca.png](https://img-blog.csdnimg.cn/img_convert/9deb5f765c6c94f28d76cae4f54aa1ca.png)
话不多说,下面进入正题:
环境配置
由于这次实验需要对二进制文件进行修改,所以我们需要下载hexedit这个二进制文件编辑工具,在终端输入:
![5ac09538da32b511b84eb192f557a97a.png](https://img-blog.csdnimg.cn/img_convert/5ac09538da32b511b84eb192f557a97a.png)
由于提前已经配置好环境,所以我的显示才会是这样
安装好之后,我们就可以通过hexedit进行二进制文件的编辑
![001724889dc89c5cece896e5f55db369.png](https://img-blog.csdnimg.cn/img_convert/001724889dc89c5cece896e5f55db369.png)
之后就可以开始我们愉快的linklab之旅啦(不是x
炸弹结构
![6674960201587973633cc588a5cc4c80.png](https://img-blog.csdnimg.cn/img_convert/6674960201587973633cc588a5cc4c80.png)
phase1
可以看到,phase1的任务是让我们修改"phase1.o"的.data节的内容,然后输出我们的学号(以123456789为例)
我么在此之前,我们先链接一下未修改过的源文件:
![0bd7d12897c53847d079d4c064080e37.png](https://img-blog.csdnimg.cn/img_convert/0bd7d12897c53847d079d4c064080e37.png)
可以看到输出的是一堆字符串
由于要求修改的.data节的内容,因此我们可以推出这些字符串一定存储于.data节中的某个位置,所以我们先来查看一下.data节的内容:
![7a9b7920e5f228d0b9979da84a954ece.png](https://img-blog.csdnimg.cn/img_convert/7a9b7920e5f228d0b9979da84a954ece.png)
可以看到,我们输出的字符串正是红括号所括起来的内容,所以接下来我们要做的就是定位到这个地方,并且把字符串内容改为我们需要的字符串即可(这里为123456789)
首先我们需要知道.data节在phase1.o中的位置
![175be61326575f67793efabf58a29c78.png](https://img-blog.csdnimg.cn/img_convert/175be61326575f67793efabf58a29c78.png)
可以看到它的位置在phase1.o偏移量为0x60的位置,所以我们只需要修改这个地方就可以了
![8dc68ffdb4e46c3479b02f2469161274.png](https://img-blog.csdnimg.cn/img_convert/8dc68ffdb4e46c3479b02f2469161274.png)
这里就是我们需要修改的地方(记得在末尾添加00分隔符)
修改完成后,就可以得到我们想要的输出了
![9f19e646b6636586dc84a77f5cc6dca4.png](https://img-blog.csdnimg.cn/img_convert/9f19e646b6636586dc84a77f5cc6dca4.png)
Binggo!
phase2
这一阶段的目标是修改phase2.o的.text节的内容(注意这里是.text节,所以我们只能修改这里)网上有些教程里面用的是修改重定位节来调用puts函数实现的,事实证明这样不可取
老样子,我们先试着编译一下:
![9eaff15d4764da3254bb42960ee0795d.png](https://img-blog.csdnimg.cn/img_convert/9eaff15d4764da3254bb42960ee0795d.png)
什么输出都没有,我们反汇编一下phase2.o文件,发现里面do_phase函数完全是空操作,需要我们自己填补指令才行