ELF可执行文件的静态注入

【ELF可执行文件的静态注入】闲来无事,把《程序员的自我修养》这本经典的书又翻了翻,终于下定决心把静态注入的第一个版本完成。
网上对于动态注入讲得比较多,大致思路是把待注入的elf文件加载到目标进程,通过ptrace系统调用对目标函数的内存地址进行替换。但是对静态注入涉及的比较少,《ELF格式可执行程序的代码嵌入》这篇文章讲得方法是比较通行的,但是实现起来比较繁琐。我试着用一种最简单的方式来呈现给大家。读者需要对elf格式有一定的了解才能领悟。建议阅读《ELF文件格式分析》(滕启明注)或者前面我提到过的经典。首先写一个最简单的hello world的linux程序,编译之后用readelf命令查看


ELF可执行文件的静态注入
文章图片



在第一个LOAD段和第二个LOAD段之间有一部分全为0的空间,0x00558到0x000ecc之间。


ELF可执行文件的静态注入
文章图片



这段汇编代码完成的任务就是打印Hello Plugin这个字符串,不依赖任何第三方库,读者可能会问为什么不用printf这个函数,当这段程序注入到宿主中的时候,需要定位到宿主中的printf函数地址,太麻烦

ELF可执行文件的静态注入
文章图片


编译后找到第一个LOAD段,这里面便是打印Hello Plugin的代码,通过程序注入到宿主当中,追加到0x00558后面,把宿主入口地址指向plugin的入口地址,再把plugin最后一条跳转指令的地址修改为宿主原来的入口地址,即完成最简单的静态注入

    推荐阅读