Android中Native ELF的反汇编与破解的一些经验

工具选择与使用

一般Android运行的HW有:

  • 32Bit的ARM
  • 64Bit的ARM64
  • X86
  • X64

对于Intel/AMD的X86/X64, 可选的工具比较多, 因为ELF运行的Host是Android, 使用静态反汇编工具Hopper Disassemble与IDA是比较好的选择.

对于32位ARM的ARM, IDA与Hopper Disassemble都可以完成, 但是对于ARM64就只有Hopper Disassemble了, 当然最新的IDA Pro也可以,但是一般难以获取得到.

剩下的方式就是用readelf + Android中的Toolchain中的objdump来完成. 

一般情况下, 多种工具需要一起结合使用.


如何快速定位

得到了我们需要反汇编与patch的ELF文件后, 将其拖入到Disassemble工具中, 就可以看到其Disassemble后的不同Section了, 例如Text, Code段. 那么要完成patch, 我们需要找到patch的位置. 对此, 个人总结有3种方式来帮助我们快速定位. 

根据字符串来快速定位

一般程序运行的时候会有log输出, 提示是何种错误, 例如对于在servicemanager中的add_service, 那么如果我们的service不在service list中,那么会提示权限不足"Permission Denied", 那么这个字符串就是很好的切入点.

在IDA中我们直接使用Search中的Text即可找到.


编译带有符号的ELF来辅助定位

对于Android代码, 不同板子或者Android设备的ROM一般都是基于AOSP做的修改, 因此绝大地方的代码和AOSP的代码是一样的. 因此我们可以借助AOSP代码来帮助我们定位.

对此第一步是需要获取Android设备上面Android的版本, 这个在关于界面, 或者使用getprop, 或者在/system/build.prop中可以获取tag以及version. 

然后我们就可以根据这些信息去下载对应版本的AOSP, 然后选择对应的Arch编译, 编译后, 在out目录中会有一个带有symbol的可供调试用的ELF文件. 这个一般位于:

out/target/product/XXX/symbols/

然后我们可以将这里面的对应的ELF文件拖入到IDA Pro或者其他Disassemble工具中进行查看, 此时因为有Debug 信息, 反汇编的代码与变量等变得很容易被识别, 很容易让我们定位. 例如下面是对bluedroid stack的反汇编:


图片1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值