博客
关于我
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/

你可能感兴趣的文章
Nginx在Windows上和Linux上(Docker启动)分别配置基本身份认证示例
查看>>
Nginx在Windows下载安装启动与配置前后端请求代理
查看>>
Nginx在开发中常用的基础命令
查看>>
Nginx基础知识点与使用场景梳理
查看>>
Nginx多域名,多证书,多服务配置,实用版
查看>>
nginx如何实现图片防盗链
查看>>
Nginx学习总结(10)——Nginx前后端分离将多个请求转发到多个Tomcat,负载均衡反向代理
查看>>
Nginx学习总结(11)——提高Nginx服务器的安全性,稳定性和性能的12种技巧
查看>>
Nginx学习总结(12)——Nginx各项配置总结
查看>>
Nginx学习总结(13)——Nginx 重要知识点回顾
查看>>
Nginx学习总结(14)——Nginx配置参数详细说明与整理
查看>>
Nginx学习总结(15)—— 提升 Web 应用性能的十个步骤
查看>>
Nginx学习总结(1)——Nginx入门简介
查看>>
Nginx学习总结(2)——Nginx手机版和PC电脑版网站配置
查看>>
Nginx学习总结(3)——Nginx配置及应用场景之高级配置
查看>>
Nginx学习总结(4)——负载均衡session会话保持方法
查看>>
Nginx学习总结(5)——Nginx基本配置备忘
查看>>
Nginx学习总结(7)——Nginx配置HTTPS 服务器
查看>>
Nginx学习总结(8)——Nginx服务器详解
查看>>
Nginx学习总结(9)——前端跨域问题解决
查看>>