4.计算本地so模块函数对应到,远程APP进程中的so模块函数地址,填充到shellcdoe中的参数中 。计算好库函数参数、寄存器存值相对shellcode起始位置的偏移再加上远程进程中shellcode存放的起始位置,得到的结果就是远程进程的内存空间中这些参数存放的位置,将这些地址填充到shellcode的参数中;
5.设置寄存器的值来执行库函数;
6.恢复寄存器的值让远程进程继续正常执行 。
关键 的ptrace注入shellcode代码实现

文章插图

文章插图
修改ELF文件注入
在android平台Native层的可执行文件SO文件,它是属于ELF文件格式,通过修改ELF文件格式可以实现对so文件的注入 。
通过修改ELF二进制的可执行文件,并在ELF文件中添加自己的代码,使得可执行文件在运行时会先执行自定义添加的代码,最后在执行ELF文件的原始逻辑 。
修改二进制ELF文件需要关注两个重要的结构体:
ELF Header、Program Header Table
其中ELF Header 它是ELF文件中唯一的,一个固定位置的文件结构,它保存着Program Header Table和Section Header Table的位置和大小信息 。
Program Header Table 它保存ELF文件的加载过程中各Section的内存映射和依赖库相关信息,用来告诉android系统中如何创建进程映像 。
修改ELF文件实现so文件注入实现原理为:通过修改 Program Header Table中的依赖库信息,添加自定义的so文件信息,APP进程运行加载被该修改过的ELF文件,它也同时会加载并运行自定义的so文件 。
Program Header Table表项结构

文章插图
程序头表项中的类型选项有如下

文章插图
当程序头表项结构中的类型为PT_DYNAMIC也就是动态链接信息的时候,它是由程序头表项的偏移(p_offset)和p_filesz(大小)指定的数据块指向.dynamic段 。这个.dynamic段包含程序链接和加载时的依赖库信息 。
修改ELF文件的注入实现过程
1.修改.dynamic段指向的字符串表中添加 自定义的so模块名称;
2.通过修改Program Header Table中添加PT_LOAD表项,新添加的表项将保护so模块名称的字符串表数据映射到内存中 。同时将Program Header Table移动到文件末尾;
3.修改.dynamic段的数组数据,使得指向新的字符串表,并指向自定义的so模块名称;
4.修改ELF HEADER结构中 Program Header Table的位置信息,并指向新的Program Header Table 。
关键ELF文件修改代码实现

文章插图

文章插图
推荐阅读
- 手机测亩仪使用方法是什么?
- Android开发精通Framework是真的可以为所欲为
- 从黑客攻击聊聊事件响应与事件管理
- 一台手机就能挣钱的7个靠谱兼职副业,推荐给大家
- 要想成为黑客,离不开这十大基础知识
- 非常好用的手机应用编程工具推荐
- 十分钟搞懂手机号码一键登录
- 手机拍的图片怎么转换成Word文档,这样操作分分钟搞定
- 详细介绍手机显示类型
- 黑客实现ARP欺骗
