吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 360|回复: 6
上一主题 下一主题
收起左侧

[Android 原创] anroid修改ELF文件实现注入so

[复制链接]
跳转到指定楼层
楼主
chenchenchen777 发表于 2024-11-20 12:35 回帖奖励
Android通过修改ELF实现注入在实现外挂的过程中,是通过将外挂的模块进行注入到对应的游戏进程中去实现的,我们可以通过相同的原理去注入so,来实现so注入进程实现frIDA-gadget的注入首先是通过ELF文件的修改注入so+------------------------+
| ELF Header            | 文件头,描述整体结构和入口点
+------------------------+
| Program Header Table  | 程序头表,描述加载的段
+------------------------+
| Segment/Sections      | 实际段内容,如代码、数据等
+------------------------+
| Section Header Table  | 段表,描述每个段的位置和功能
+------------------------+这里是ELF文件的文件结构类型ELF Header (ELF 文件头)作用:描述文件类型、目标架构和入口点等元数据。
字段
描述

e_ident魔数、文件类型标识、架构信息 (32/64 位,大小端)
e_type文件类型(可执行文件、共享库、目标文件等)
e_machine目标架构(如 x86、ARM 等)
e_versionELF 版本
e_entry程序入口点虚拟地址
e_phoff程序头表在文件中的偏移
e_shoff段表在文件中的偏移
e_flags与架构相关的标志
e_ehsizeELF Header 的大小
e_phentsize程序头表中每个条目的大小
e_phnum程序头表中的条目数
e_shentsize段表中每个条目的大小
e_shnum段表中的条目数
e_shstrndx段表中字符串表的索引

** Program Header Table (程序头表)**作用:描述进程运行时需要加载到内存的段信息,仅对可执行文件和共享库有用。
字段
描述

p_type段类型(如 PT_LOAD 表示加载段)
p_offset段在文件中的偏移
p_vaddr段在内存中的虚拟地址
p_paddr段在内存中的物理地址(通常忽略)
p_filesz段在文件中的大小
p_memsz段在内存中的大小
p_flags段的访问权限(读、写、执行)
p_align段在内存中的对齐粒度常见段类型:
  • PT_LOAD:加载到内存的段,通常对应 .text、.data 等。
  • PT_DYNAMIC:动态链接相关信息。
  • PT_INTERP:解释器路径(动态加载器)。
  • PT_NOTE:注释段,通常用于核心转储文件。
  • PT_NULL:无效条目,表示结束。
Program Header Table中是包含了对于程序运行时的进程需要加载到内存的数据,而其中就保留对于依赖库,函数库..的相关函数信息,so文件的信息也包含在内。所有我们要注入so到进程中去,主要的过程就是去实现so的注册以及写入修改 DT_STRTAB 指向的新字符串表通过定位 .dynstr 段找到对应的当前字符串表的位置,里面包含了各种字符串数据,通过也包含了现有 .so 名称列表创建新的字符串表,由于修改原字符串表会使得其下的所有文件偏移都被修改了,为了使得文件偏移都不变,我们就继续保留原本的Program Header Table,同时将原字符串表复制到文件尾部,添加新的 .so 名称(如 frida-gadget.so)。更新 PT_LOAD 表项,由于新的字符串表要被映射到新的内存,需要通过PT_LOAD来实现比如这样:原始 Program Header Table:
Entry Index
p_type
p_offset
p_vaddr
p_filesz
p_memsz
p_flags

0PT_LOAD0x000000400x080000000x001000000x00100000R+E
1PT_LOAD0x001000400x080010000x000010000x00001000RW
.....................新 Program Header Table(文件末尾):
Entry Index
p_type
p_offset
p_vaddr
p_filesz
p_memsz
p_flags

0PT_LOAD0x000000400x080000000x001000000x00100000R+E
1PT_LOAD0x001000400x080010000x000010000x00001000RW
.....................
5PT_LOAD文件尾偏移映射地址大小大小R使得我们添加在文件末尾的数据被真实的加载映射了修改动态段 (.dynamic):因为添加了新的字符串数目,对应的字符串表的虚拟地址以及字符串总数目也会改变更新 DT_STRTAB 和 DT_STRSZ
  • 修改 DT_STRTAB,使其指向新字符串表的虚拟地址。
  • 修改 DT_STRSZ,更新字符串表的总大小。
新增 DT_NEEDED 条目
  • 在 .dynamic 的尾部新增一个条目:
    • d_tag:DT_NEEDED。
    • d_val:新字符串表中 .so 名称的偏移。

同时更新ELF header 的e_phoff,这里指向的是Program Header Table的位置,所有设置为新的Program Header Table原始的ELF文件结构:+------------------------+
| ELF Header            | 包含文件元信息(如入口点、PHT/SHT 偏移等)
+------------------------+
| Program Header Table  | PHT,描述 Segments 的加载信息
+------------------------+
| Segment 1 (.text)     | 包含代码段
+------------------------+
| Segment 2 (.data)     | 包含已初始化的全局和静态变量
+------------------------+
| Segment 3 (.bss)      | 包含未初始化的全局和静态变量(运行时分配)
+------------------------+
| Section Header Table  | SHT,描述 Sections 的信息
+------------------------+注入 .so 后的 ELF 文件结构:+------------------------+
| ELF Header            | 更新了 e_phoff 指向新的 PHT 位置
+------------------------+
| (原) Program Header    | 仍在文件起始,但未被使用
+------------------------+
| Segment 1 (.text)     | 包含代码段
+------------------------+
| Segment 2 (.data)     | 包含已初始化的全局和静态变量
+------------------------+
| Segment 3 (.bss)      | 包含未初始化的全局和静态变量
+------------------------+
| Section Header Table  | SHT,描述 Sections 的信息
+------------------------+
| 新字符串表 (.dynstr)   | 新增,包含注入的 .so 名字
+------------------------+
| 新 Program Header Table| 移动到文件末尾,新增 PT_LOAD 表项
+------------------------+

免费评分

参与人数 4吾爱币 +4 热心值 +4 收起 理由
HongHu106 + 1 + 1 我很赞同!
局外人K + 1 + 1 热心回复!
为之奈何? + 1 + 1 我很赞同!
21MyCode + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
wangxuebiao 发表于 2024-11-20 16:45
非常好用啊   太强悍了
3#
jidong00 发表于 2024-11-21 00:06
4#
twl288 发表于 2024-11-21 00:19
5#
play5431 发表于 2024-11-21 08:21
感谢分享!
6#
6sir 发表于 2024-11-21 09:09
感觉有些复杂了
7#
waningmoon 发表于 2024-11-21 11:14
学习了学习了,注入模块真是个好东西
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 13:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表