IOS逆向-ASLR_ios aslr-程序员宅基地

技术标签: IOS逆向  ios  

在逆向中我们无法使用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安全区域
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yong_19930826/article/details/117124672

智能推荐

QT 画板的设计_qt画图板制作-程序员宅基地

文章浏览阅读1.3k次。一 界面效果二源代码1 mainw.h中代码如下#ifndef MAINWINDOW_H#define MAINWINDOW_H#include #include #include #include #include #include #include #include #include #include #include #include #in_qt画图板制作

Typora+PicGo+GitHub图床的搭建和常见问题的个人解决方法_picgo图床github图床搭建上传失败-程序员宅基地

文章浏览阅读1.4k次,点赞4次,收藏17次。Typora+PicGo+GitHub图床的搭建和常见问题的个人解决方法_picgo图床github图床搭建上传失败

C++ 四种强制转换符的区别_强制转化符-程序员宅基地

文章浏览阅读2.5k次。作为四个内部类型转换操作符之一的dynamic_cast和传统的C风格的强制类型转换有着巨大的差别。除了dynamic_cast以外的转换,其行为的都是在编译期就得以确定的,转换是否成功,并不依赖被转换的对象。而dynamic_cast则不然。在这里,不再讨论其他三种转换和C风格的转换。首先,dynamic_cast依赖于RTTI信息,其次,在转换时,dynamic_cast会检查转换的source对象是否真的可以转换成target类型,这种检查不是语法上的,而是真实情况的检查。

【曼哈顿距离】*AcWing727.《菱形》(C++)-程序员宅基地

文章浏览阅读356次,点赞9次,收藏12次。本题来自AcWing第727题《菱形》

Dagger2_dagger2在android studio3.0-程序员宅基地

文章浏览阅读251次。 DaggerDome下载001. 既然打开了这篇文章,那么关于为什么使用Dagger2或者Dagger2的作用就不再多说,我们直接来动手配置Dagger2。 我们只介绍AndroidStudio的配置方法,至于依旧使用Eclipse的同学,请绕道。 我们打开模块的(不是全工程的)build.gradle文件,其内容大致是这个样子:[javascript] view..._dagger2在android studio3.0

设计一个简单的学生信息类_在右侧编辑器中的begin-end之间补充代码,声明并定义一个学生信息类 stinfo,该类有-程序员宅基地

文章浏览阅读1.2w次,点赞5次,收藏79次。设计一个学生信息类一、任务描述本关任务:声明并定义一个学生信息类。二、相关知识为了完成本关任务,你需要掌握类的声明和定义。类在现实世界中,经常有属于同一类的对象。例如,你的自行车只是世界上很多自行车中的一辆。在面向对象软件中,也有很多共享相同特征的不同的对象,可以利用这些对象的相同特征为它们建立一个集合,而这个集合就称为类。C++ 中类是把各种不同类型的数据(称为数据成员)和对数据的操作(成员函数)组织在一起而形成的用户自定义的数据类型。它提供了可重用性的好处。类定义包括声明和实现两大部分。_在右侧编辑器中的begin-end之间补充代码,声明并定义一个学生信息类 stinfo,该类有

随便推点

Delphi Hook K3_spr32x30.ocx-程序员宅基地

文章浏览阅读1.8k次。前述K3工业版插件编程很多K3接口开发人员都有经验,这里提供另外一个思路,采用直接HOOK的形式来进行编程,一样可以实现我们想要的结果 需求1销售出库单中,表头输入客户,当用户在表体输入商品离焦后,检查该商品是否在用户自定义的客户商品对应表中,如无,则给予信息提示2 销售出库单中,加一菜单,有权限的用户点击该按钮可从价格管理库中获取最新单价,并写入到表体单价栏中 分析

如何优化网站内容 内容页 网站内容文本优化-程序员宅基地

文章浏览阅读199次。首先,纯文本链接因为没有超链接,用户不能通过点击直接达到指向的页面,在用户体验上显而易见的不如超链接和链接锚文本。 但是也不能排除用户会通过复制、粘贴进入这个页面。虽然这样的链接被收录后对seo是否有用? 作用又有多大? 蜘蛛是否会顺着爬行? 我们不得而知,但谁也不能完全否认该形式链接存在的作用。再者说,纯文本链接在互联网上遍布着纯在,搜索引擎真的会忽略如此大量的链接存..._文本优化网站

RabbitMQ-程序员宅基地

文章浏览阅读628次。RabbitMQ

安装软件时遇到“不具备管理员权限”的问题,以Vericut安装为例_安装vericut 你不具有管理员权限-程序员宅基地

文章浏览阅读871次,点赞2次,收藏2次。本文旨在说明,如何解决安装软件时遇到,“不具备管理员权限”的问题。这个问题的主要原因是,虽然本地账户已经被升级为Administrator账户类型,但未获取所有管理员权限,需要用Windows自带的管理员账户,一般这个账户名字就是Administrator。接下来的操作步骤就是,将账户切换到Administrator账户,然后右键以管理员身份运行安装程序。在这个操作中可能需要我们自己激活Administrator账户。_安装vericut 你不具有管理员权限

『VulnHub系列』serial: 2-Walkthrough_serial2-程序员宅基地

文章浏览阅读1.8k次。靶机发布日期:2019年9月27日,难度:中等++。用到了apk逆向和ELF中的ROP技术,web狗(小白)表示伤不起,一路硬刚下来的,求鼓励~_serial2

浅谈Tarjan算法-程序员宅基地

文章浏览阅读140次。从这里开始预备知识两个数组Tarjan 算法的应用求割点和割边求点-双连通分量求边-双连通分量求强连通分量预备知识  设无向图$G_{0} = (V_{0}, E_{0})$,其中$V_{0}$为定点集合,$E_{0}$为边集,设有向图$G_{1} = (V_{1}, E_{1})$,其中$V_{1}$为定点集合,$E_...__tarjan72

推荐文章

热门文章

相关标签