博客
关于我
IOS逆向-ASLR
阅读量:736 次
发布时间:2019-03-21

本文共 1419 字,大约阅读时间需要 4 分钟。

IOS逆向-ASLR

在逆向中我们无法使用breakpoint set -n "-[xxxxx xxxx:]"的方式(通过类名和方法名)来打断点,这种方式适合在Xcode工具中使用, 在逆向中我们一般使用breakpoint set -a 地址来打断点 ,通过函数的内存地址来打断点

那么我们如何找到正确的函数地址了?

1. Mach-O文件分析

首先我们知道Mach-O的文件结构:在这里插入图片描述

我们可以使用MachoView来分析下Mach-O文件的结构:在这里插入图片描述

  • VM Addreess: Virtural Memeory Address内存地址,在内存中的大小
  • VM SIze:Virtural Memeory Address内存大小,占用内存多少
  • _PAGEZERO、_TEXT、_DATA、_LINKENIF 的内存地址和内存大小都可以通过Mach-O文件
  • File Offset:在Mach-O文件中的位置
  • File Size: 在Mach-O文件中占据的大小

首先我们观察Mach-O文件,我们发现_PAGEZEROMach-O文件中是不存在的, 在内存中确是存在的

未使用ASLR的Mach-O文件加载到内存中的过程图:

在这里插入图片描述

  • 函数代码存放在_TEXT(_text)段中
  • 全局变量存放在_DATA断中
  • 可执行文件的内存地址是0x0
  • 代码段(_TEXT)的内存地址
    • 就是LC_SEGMENT(_TEXT)中的VM Address
    • arm64: 0x100000000(8个0)
    • 非arm64:0x4000(3个0)
  • 可以使用size -l -m -x来查看Mach-O的内存分布

2. ASLR

2.1 什么是ASLR

  • Address Space Layout Randomization,地址空间布局随机化
  • 是一种针对缓冲区溢出的安全保护技术,通过对堆、栈共享库映射等线性布局的随机化,通过增加攻击者预测目的地的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击目的的一种技术
  • IOS4.3开始引入的ASLR技术

2.2 获取函数的真实地址

  • 函数的内存地址(VM Address)= File Offset + ASLR Offset + _PAGEZERO
  • HopperIDA中的地址都是未使用ASLR的VM Address
  • 使用了ASLR技术的Mach-O加载进内存的过程:在这里插入图片描述

我们在程序中编写的函数,全局变量,程序一旦编译,函数和变量的位置就固定了,文件的偏移是固定的

我使用debugserver链接上手机查看微信Mach-O文件载进内存的地址,这样我们就可以获取函数真正的内存地址了,通过image list -o -f 查看模块信息,Mach-O文件本身也是一个模块在这里插入图片描述

  • 由上图可知,微信加载进内存的地址是什么,然后减去arm64架构固定长度(0x100000000),就得到ASLR技术造成的地址偏移量,然后我们在分析工具中看到的函数地址加上这个偏移量,就得到了函数在内存中真正的地址,这样我们就可以使用LLDB命令通过函数地址来打断点

虚拟内存的分配 :dyld(动态库加载器) --> Mach-O文件(当前app的可执行文件) ---> 依赖的其他动态库(比如系统的UIKit等) ---> 栈空间、堆控件

3. 答疑

  • _PAGEZERO的作用?
    • obj = NULL:NULL指针,其实就是指向_PAGEZERO安全区域

转载地址:http://xxrgz.baihongyu.com/

你可能感兴趣的文章
mysql_real_connect 参数注意
查看>>
mysql_secure_installation初始化数据库报Access denied
查看>>
MySQL_西安11月销售昨日未上架的产品_20161212
查看>>
Mysql——深入浅出InnoDB底层原理
查看>>
MySQL“被动”性能优化汇总
查看>>
MySQL、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>
MySQL不同字符集及排序规则详解:业务场景下的最佳选
查看>>
Mysql不同官方版本对比
查看>>
MySQL与Informix数据库中的同义表创建:深入解析与比较
查看>>
mysql与mem_细说 MySQL 之 MEM_ROOT
查看>>
MySQL与Oracle的数据迁移注意事项,另附转换工具链接
查看>>