查看原文
其他

Android安全之ELF文件格式浅析

哆啦安全 2022-11-13

The following article is from 编码安全 Author 编码安全


背景


Android开发或安全攻防过程中都离不开和so文件进行打交道,so文件也就是ELF文件的格式。

由于so文件基于C、C++进行开发的,那么可以进行做安全防护方面的强度也比较高。因此很多apk中的 核心功能或数据都是放在so文件上去实现的。同时很多的加固和脱壳防护也都是基于ELF文件格式进行的。


ELF理论基础


ELF 文件是 Executable and Linkable Format ( 可执行 和 可链接 格式 ) 的文件 ;链接 一般是在编译阶段 , 执行 一般是在运行阶段 ; 在这两个阶段都会用到 ELF 格式的文件。



ELF文件是linux下的二进制文件,也相当于windows下的PE文件,Android系统里的dll文件。


它是Linux下可执行文件,共享库文件和目标文件的统一格式。Elf里面还有许多其它的信息,这些信息有些是编译时有用的,我们常称它们为节(Section),有些是操作系统装载应用时用的,们常称它们为段(Program)。


根据看待ELF文件的不同方式,ELF文件可以分为链接视图和装载视图。


ELF 文件由以下部分组成 :

1、ELF 文件头

2、ELF 程序头部表 : ELF 程序头 会告知 节区头部表的位置;

3、节区头部表 : 节区头部表 会告知 ELF 文件中有多少个节区 , 一般节区头部表它一般都在ELF文件尾部。


ELF文件头


ELF文件开始处是一个ELF 头部(ELF Header),用来描述整个文件的组织。节区部分包含连接视图的大量信息:指令、数据、符号表、重定位信息等等。


ELF 文件的特点 : ELF 文件是以 7F 45 4C 46 开头 , 其中 7F 是一个二进制标志 , 45 4C 46 是 ELF 字符对应的 ASCII 码。


下图通过010 Editor工具结合ELFTemplate.bt 可以很清晰的解析出ELF文件中的文件头部结构,上部分是ELF头部的十六进制数据,下部分是ELF头部的结构体中变量的填充值数据。


下图是android系统下的elf.h文件中定义的文件头的结构体数据,一个是32位的一个是64位的。


ELF程序头部表


程序头部表(Program Header Table),若是存在的话,告诉系统如何建立进程映像。用来构造进程映像的目标文件必须具备程序头部表,可重定位文件不须要这个表。


下图通过010 Editor工具结合ELFTemplate.bt 可以很清晰的解析出ELF文件中的程序头结构数据。



下图是android系统下的elf.h文件中定义的程序头的结构体数据,一个是32位的一个是64位的。



ELF节区头部表


节区头部表(Section Heade Table)包含了描述文件节区的信息,每一个节区在表中都有一项,每一项给出诸如节区名称、节区大小这类信息。用于连接的目标文件必须包含节区头部表,其余目标文件能够有,也能够没有这个表。


下图通过010 Editor工具结合ELFTemplate.bt 可以很清晰的解析出ELF文件中的区段头结构数据


下图是android系统下的elf.h文件中定义的区段头的结构体数据,一个是32位的一个是64位的。



Android安全之DEX文件格式浅析    

          

移动端安全开发、移动端安全、网络安全视频课程
(1).移动安全App安全检测、渗透测试、风控、隐私合规、加固防护、病毒逆向的视频课程

(2).Android系统Framework、驱动、内核等模块的定制开发和Android APP开发以及鸿蒙APP开发的视频课程

(3).网络安全漏洞挖掘、Web安全、渗透测试、病毒逆向、溯源反制等系列视频课程


以上视频课程会在近期发布,欢迎各位扫码关注"哆啦安全"公众号、视频号

                                         

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存