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

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

IOS逆向-ASLR

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

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

  • Mach-O文件结构分析
  • 首先,我们需要了解Mach-O文件的结构。Mach-O文件将程序的代码和数据分配到不同的内存段中,主要包括以下几段:

    • _TEXT(代码段)
    • _DATA(数据段)
    • _BSS(未初始化的全局变量段)
    • _LINKEDIT(符号游离 段)
    • _PAGEZERO(安全区域)

    我们可以使用MachoView等工具来分析Mach-O文件的结构。通过这些工具,我们可以看到各个段的内存地址和占用情况。

    虚拟内存地址(Virtual Memory Address)表示的是程序在内存中的逻辑地址,而文件偏移(File Offset)表示的是在Mach-O文件中的实际位置。对于iOS应用程序来说,代码段(_TEXT)的内存地址根据架构类型有所不同:

    • arm64: 0x100000000(8个0)
    • 非arm64: 0x4000(3个0)

    我们可以通过命令size -l -m -x来查看Mach-O文件的内存分布情况。

    需要注意的是,_PAGEZERO实际上并不存在于Mach-O文件中,它只是内存布局中的一个概念,用于表示程序安全区域的开始。

    1. ASLR(地址空间布局随机化)
    2. 2.1 ASLR的定义

      ASLR(Address Space Layout Randomization)是一种安全技术,通过随机化程序的地址空间布局,增加攻击者通过缓冲区溢出定位攻击目标的难度。iOS从4.3版本开始引入了ASLR技术。

      2.2 函数地址获取

      要获取函数的实际内存地址,我们需要了解Mach-O文件在内存中的加载方式。ASLR会引入一定的偏移量,即ASLR Offset,这会影响函数的实际运行地址。

      函数的内存地址可以通过以下方式计算:

      函数VM地址 = File Offset + ASLR偏移量 + _PAGEZERO

      在逆向分析中,我们可以使用Hopper等工具分析Mach-O文件,但这些工具显示的地址是未经过ASLR随机化的地址。因此,在使用了ASLR的程序中,我们需要通过以下方式获取真实地址:

    3. 使用DebugServer连接上手机,获取Mach-O文件的加载地址。
    4. 通过Mach-O文件的模块信息,分析ASLR偏移量。
    5. 将分析工具中看到的函数地址(如Hopper或IDA显示的地址)与ASLR偏移量结合,计算出内存中的真实地址。
    6. 通过此方法,我们可以获取出函数在内存中的实际运行地址,并在LLDB等调试工具中通过函数地址打断点。

      1. 常见问题解答
      2. 3.1 _PAGEZERO的作用

        _PAGEZERO并不是Mach-O文件中存在的段,它是一个虚构的概念,用于表示程序安全区域的起始位置。在C语言中,NULL指针通常指向_PAGEZERO区域。在64位系统中,_PAGEZERO的位置是0x3ff000000

        通过以上方法,我们就可以成功绕过ASLR技术,获取函数和变量在内存中的真实地址。

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

    你可能感兴趣的文章
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO三大组件基础知识
    查看>>
    NIO与零拷贝和AIO
    查看>>
    NIO同步网络编程
    查看>>