二进制拆弹实验详解_linklab实验

2c544762a6fd6fc48c6981310a22437a.png

引言

本次实验真的是投入巨大,不光是汇编代码艰涩难懂,而且分析过程也很麻烦,从配置环境到拆弹到再配置环境到继续拆弹,前前后后花了四五天的时间才全部搞定。期间参考了不少博客,也查了好多配置环境的手册内容,请教了诸多大佬。

由于此次拆弹过程实属不易,还是觉得有必要总结一下拆弹的全过程。天知道我看到这个的时候有多激动(是我太菜了www)

9deb5f765c6c94f28d76cae4f54aa1ca.png

话不多说,下面进入正题:

环境配置

由于这次实验需要对二进制文件进行修改,所以我们需要下载hexedit这个二进制文件编辑工具,在终端输入:

5ac09538da32b511b84eb192f557a97a.png

由于提前已经配置好环境,所以我的显示才会是这样

安装好之后,我们就可以通过hexedit进行二进制文件的编辑

001724889dc89c5cece896e5f55db369.png

之后就可以开始我们愉快的linklab之旅啦(不是x

炸弹结构

6674960201587973633cc588a5cc4c80.png

phase1

可以看到,phase1的任务是让我们修改"phase1.o"的.data节的内容,然后输出我们的学号(以123456789为例)

我么在此之前,我们先链接一下未修改过的源文件:

0bd7d12897c53847d079d4c064080e37.png

可以看到输出的是一堆字符串

由于要求修改的.data节的内容,因此我们可以推出这些字符串一定存储于.data节中的某个位置,所以我们先来查看一下.data节的内容:

7a9b7920e5f228d0b9979da84a954ece.png

可以看到,我们输出的字符串正是红括号所括起来的内容,所以接下来我们要做的就是定位到这个地方,并且把字符串内容改为我们需要的字符串即可(这里为123456789)

首先我们需要知道.data节在phase1.o中的位置

175be61326575f67793efabf58a29c78.png

可以看到它的位置在phase1.o偏移量为0x60的位置,所以我们只需要修改这个地方就可以了

8dc68ffdb4e46c3479b02f2469161274.png

这里就是我们需要修改的地方(记得在末尾添加00分隔符)

修改完成后,就可以得到我们想要的输出了

9f19e646b6636586dc84a77f5cc6dca4.png

Binggo!

phase2

这一阶段的目标是修改phase2.o的.text节的内容(注意这里是.text节,所以我们只能修改这里)网上有些教程里面用的是修改重定位节来调用puts函数实现的,事实证明这样不可取

老样子,我们先试着编译一下:

9eaff15d4764da3254bb42960ee0795d.png

什么输出都没有,我们反汇编一下phase2.o文件,发现里面do_phase函数完全是空操作,需要我们自己填补指令才行

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值