美文网首页
FastHook——实现.dynsym段和.symtab段符号查

FastHook——实现.dynsym段和.symtab段符号查

作者: 看雪学院 | 来源:发表于2019-04-22 17:28 被阅读0次

    一、概述

    通过dlopen、dlsym获取共享库函数地址、全局变量是一种经常使用到的编程技巧,尤其是在Hook框架中。然而无论是dlsym还是一些常用框架(如Nougat_dlfunctions),都只能搜索.dynsym段,而无法搜索.symtab段。因此实现.symtab段搜索是一个亟待解决的问题。

    本文将介绍在Nougat_dlfunctions框架基础上,如何实现搜索.symtab段的功能。(如果对FastHook不了解,请查阅FastHook——一种高效稳定、简洁易用的Android Hook框架)项目地址:Enhanced_dlfunctions

    二、Enhanced dlfunctions实现

    ELF文件实际是个表结构,以段为单位,每个段存储不同的信息,段与段之间以索引来关联形成一个表。所以只要有一个头,就可以通过这些关系访问所有的段,这个头便是ELF文件头。下面我们来看看需要获取那些信息:

    ELF文件头:存储所有段头部的信息,段头部是描述段信息的元数据,可以通过段头部来获取段信息。

    .shstrtab段。存储所有的段的段名。通过ELF文件头,可以实现段的遍历,而无法识别具体的段(不同段类型可以相同),因此需要用段名来确定段。

    .dynsym段:动态符号表,存储与动态链接相关的导入导出符号,不包括模块内部的符号。Nougat_dlfunctions只查询这个段,因此会漏掉很多符号。

    .dynstr段:存储.dynsym段符号对应的符号名。

    .symtab段:符号表。存储在程序中被定义和引用的函数和全局变量的信息。

    .strtab段:存储.symtab段符号对应的符号名。

    .comment段:程序相关信息,用与定位符号地址。

    2.1 enhanced_dlopen

    三、结语

    Nougat_dlfunctions只支持arm平台,而我在实际工作中也不涉及到x86平台,所以Enhanced dlfunctions暂时只支持arm32和arm64,如果要兼容x86等其他平台也不难,不需要改实现,主要就是elf.h一些结构体的不同。

    本文由看雪论坛 图灵技师 原创

    原文链接:https://bbs.pediy.com/thread-250237.htm

    相关文章

      网友评论

          本文标题:FastHook——实现.dynsym段和.symtab段符号查

          本文链接:https://www.haomeiwen.com/subject/ajsugqtx.html