注入代码需要什么
向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也并不是那么简单的事情,