Android安全之ELF文件格式浅析
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位的。
(2).Android系统Framework、驱动、内核等模块的定制开发和Android APP开发以及鸿蒙APP开发的视频课程
(3).网络安全漏洞挖掘、Web安全、渗透测试、病毒逆向、溯源反制等系列视频课程
以上视频课程会在近期发布,欢迎各位扫码关注"哆啦安全"公众号、视频号