ELF文件解析

这篇博客主要介绍如何解析ELF文件,包括理解Header信息、所有节区和字符串表,以及通过C++实现读取节区内容并进行文件完整性验证的方法。作者通过readelf工具演示了检查ELF文件的步骤,并提供了Python脚本进行二进制转换,最后推荐了 UltraCompare 工具进行二进制文件比较。
摘要由CSDN通过智能技术生成

ELF文件解析

近期正在进行Android的逆向。自己写出好代码是一个方面,而破解别人的代码则会给人另一种感受。因Java层的Android开发是如此不安全,越来越多的公司把重要的东西写入Native层,逻辑处理均由Native层完成,而Java层只负责进行结果显示。这样便要求对Native层的so文件进行逆向解析,而so文件是linux系统下的ELF(Excutable and Linkable File)文件。而要对so文件进行解析,必须先要了解ELF文件的格式。

网上有很多关于ELF文件格式的介绍文章,比较推荐的是北京大学操作系统实验室标准版 ELF文件格式分析。文章里面详细介绍了ELF文件的格式,但是只看文档是完全不明所以的,要从真正意义上了解ELF文件,还是要自己亲手做一下ELF文件解析才可以。

既然是自己做一个解析器,怎么才能知道自己解析的是正确的呢?这里我们就要用到一个非常有用的工具,即linux下的readelf。如果是Windows 10的用户,可以在 控制面版- 程序和功能- 启用或关闭Windows功能 中启用 适用于Linux的Windows子系统(beta) 来启用Windows 10的bash功能,启用bash后,可能readelf命令并未安装,可以通过sudo apt-get readelf进行安装。如果是其它版本的Windows,则要先装Cywin才能使用此命令。当然如果是Linux或者macOS则可以直接使用。

一、简略的介绍:

详细的readelf的命令可以通过man readelf命令查看命令手册
示例命令:比如我们从手机上面把/system/bin/app_process这个bin文件(linux下的bin文件是ELF格式文件)导出来后

1.Header信息:readelf -h app_process

readelf -h app_process

2.所有节区:readelf -S app_process

readelf -S app_process

3.字符串表:readelf -x 24 app_process或者readelf -x .shtratab app_process

readelf -x 24 app_process
所有节区的名称均是通过指定在这个字符串表的偏移量来得到的,通过解析节区表拿到节区名称在此表中的偏移量并查此表,拿到节区名称的字符串。与目标节区名称比较,相同则读出节区的sh_offset(偏移),sh_size(大小)就可以据此从文件中dump下来节区的所有内容。

二、文件的完整性较验

要知道dump下来的节区内容是否正确,比如dump出了.text节区的内容,怎么确定dump下来文件的正确性呢,用同样的命令readelf -x .text app_process
readelf -x .text app_process
中间红色部分便是.text节区的十六进制表示。当然,dump下来的文件是二进制的,通过一些软件(比如UltraEdit)也可以查看它的十六进制,看dump下来文件的正确性,

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值