简述
有什么用?
通过hook全局符号表实现各种黑科技功能,比如我们可以hook open,write和read监控文件的IO读写,hook malloc,calloc,realloc 和 free统计分配了多少内存,内存是否被泄露,也可以对其他进程进行hook实现各种 黑科技功能(root),这种hook方式比较简单,只需更改表中符号地址即可,但只能hook导入函数。
ELF
ELF是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。
具体实现
1. 获取模块基址
Elf加载的地址是随机的我们只有在elf加载后才能获取到他的基址,下面有两种方式获取
通用:
我们可以读取 /proc/self/maps,对其进行解析,下面是maps文件的格式
address perms offset dev inode pathname
00400000-00452000 r-xp 00000000 08:02 173521 /usr/bin/dbus-daemon
00651000-00652000 r--p 00051000 08:02 173521 /usr/bin/dbus-daemon
00652000-00655000 rw-p 00052000 08:02 173521 /usr/bin/dbus-daemon
00e03000-00e24000 rw-p 00000000 00:00 0 [heap]
00e24000-011f7000 rw-p 00000000 00:00 0 [heap]
...
Android 5.0 +:
通过翻阅 Linux 资料我们找到了 dl_iterate_phdr 函数
static int callback(struct dl_phdr_info *info, size_t size, void *data)
{
..
aut