elf增加一个可执行段以注入代码的一些思考

本文探讨了向elf文件注入代码以实现动态patch的灵活性,重点在于增加新的segment。分析了注入代码的注意事项,包括修正section table和program header table的offset,以及处理特殊program header。虽然尝试直接插入segment header遇到困难,但最终确定在文件末尾添加新的segment header是更为稳定的方法。
摘要由CSDN通过智能技术生成

注入代码需要什么

向elf中注入代码为patch带来了极高的灵活性,使得对函数进行hook从而达到更改参数,在线更改值以及监视函数执行等一系列
行为提供了可能。可是向segment中注入代码并不如想象的那么简单,有一些东西需要注意才能够真正达到效果。

elf可执行文件执行的关键其实是segment,在执行的过程中section相对并不重要,即使section有一些损坏,只要segment,包括
program header和program header中包含的数据完整,是可以正常执行的,不过可能为gdb等调试带来一些麻烦。

注入代码,其实就是注入segment。

关于注入代码的思考

我自己对于注入代码进行了一些简易的思考,大致可以有以下几种方法:
1. 扩展已有的segment,使得自己的数据能够被放进去
2. 修改用处不大的segment,使其为我所用
3. 增添segment

最终,我选择了使用最后一种方法,并且试图对他进行实现。对于小范围的工具,比如ctf线下攻防赛所需要的patcher来讲,前
两种还具有一定的用处,但是毕竟都有很大的缺陷,一旦任务变得繁重,很可能导致一些不稳定的事情发生。增添一个segment可以
自由的控制segment的大小,并且具有扩展性,如果增添的数据量过大也依然可以正常使用,毕竟增添segment不止可以增添一个,
也可以增添多个。

增加segment的注意事项

经过一天的调试,我发现增加segment也并不是那么简单的事情,

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值