十三 ASLR

一 Mach-O文件内存分布
二 ASLR详解
三 实例演示ASLR的应用
一 Mach-O文件内存分布

我们平时开发调试应用程序很简单,就是利用Xcode进行断点


Xcode断点

但是在逆向工程中,你是不能这样调试别人的应用的,我们无法拿到别人的源代码,无法通过Xcode来调试.但是不要担心,我们可以通过LLDB这个工具来进行调试

breakpoint set -n "test"
断点调试

我们通过breakpoint命令来断点我们要调试的代码,但是这里我们要注意的是在调试别人的代码时我们无法通过方法名来进行断点的,我们只能通过方法地址来进行断点,如下:

breakpoint set -a 0x102227859

在这里方法的地址值我们通过逆向Mach-O文件就能看到,下面我就拿自己写的这个应用来演示一下,因为是自己的应用,我不用砸壳了,要是别人的应用你需要砸壳.

第一步 拿到我们应用的可执行文件
image.png
查看app包内容
第二步 把我们的可执行文件拖到hopper disassember里面去

查看函数地址

我们可以看到我们的函数地址是0x0000000100000dc0,那么是不是我们断点到这个地址就能断点到我们的test函数呢

breakpoint set -a 0000000100000dc0

执行断点的话不管成功还是不成功,我可以直接告诉你断点的位置都是不对的,因为我们的应用程序在载进内存的时候,系统都会添加一个偏移地址,这个偏移地址每次运行程序都是不一样的.你想一下如果地址都是死的,那还有什么安全可言,别人只要把可执行文件网Hopper一拖,就能看到你所有的函数地址,那不是想干什么就干什么了.具体这个偏移具体详情我们下小节讲,我们先来了解下mach-o文件的内存分布情况,把我们刚才的可执行文件拖到MachOView里面


我们先来讲解下红框四个字段的基本概念
VM Address:Virtual Memory Address,内存地址,在内存中的位置
VM size:Virtual Memory Size,内存大小,占多少内存
File Offset:在Mach-O文件中的位置
File Size:在Mach-O文件中占用的大小
__PAGEZERO
VM Address: 0
VM size:4294967296
File Offset:0
File Size:0
__PAGEZERO在Mach-O文件中占用的大小为零,但是在载进内存后,它的大小就不是为零了.

__Text

__TEXT
VM Address: 4294967296
VM size:12288

__DATA

__DATA
VM Address: 4294979584
VM size:12288
Mach-O已经描述好我们的代码段,数据段的内存地址以及内存大小,函数代码存放在__TEXT段中,我们函数存放地址都在__TEXT段中的
我们在来熟悉下Mach-O文件的整体结构

好了我们通过Mach-O文件已经知道我们写的函数存放的大致位置,那么在运行程序的时候载进内存时候,函数地址有什么变化呢,我们接下来看一下.

二 ASLR详解

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

2.1 未使用ASLR之前Mach-O文件内存分布情况

未使用ASLR之前Mach-O文件内存分布

函数代码存放在__TEXT段中
全局变量存放在__DATA段中
可执行文件的内存地址是0x0
__PAGEZERO大小:0
代码段(__TEXT)的内存地址就是LC_SEGMENT(__TEXT)中VM Address arm64:0x100000000(8个0)非arm64:0x4000(3个0)

2.2 使用ASLR之后Mach-O文件内存分布情况

使用ASLR之后Mach-O文件内存分布

LC_SEGMENT(__TEXT)的VM Address
0x100000000
ASLR随机产生的Offset(偏移)
0x5000
__PAGEZERO大小:100000000
原先Mach-O文件在装载进内存后各数据位置都发生了偏移,那我们函数内存地址就是(VM Address) = File Offset + ASLR Offset + __PAGEZERO Size
所以我们在断点别人的函数时,它的地址要通过(File Offset + ASLR Offset + __PAGEZERO Size)这三个地址相加来计算,这三个地址每次程序装载进内存,都要重新获取.
Hopper中显示的的地址都是未使用ASLR的VM Address 也就是说Hopper中显示的地址是:File Offset + __PAGEZERO Size,那么我们要断点一个函数的地址就简单了:

1 先看该函数在Hopper中的地址
2 查看该应用的ASLR Offset
3 两者相加

下面我们来演示一下.

三 实例演示ASLR的应用

为了方便我直接拿自己Xcode写的应用来演示,如果是调试别人的应用,你只要进入动态调试,就可以和我一样的操作了,首先我先进入调试模式

Xcode调试模式

这里我打算给test函数打个断点
把我们的可执行文件拖放到Hopper中我们先看下test函数的地址
Mach-o

函数地址

我们看到test函数地址是:0x0000000100000dc0
接下来我们再看ASLR Offset.
使用LLDB命令image list -o -f | grep runloop runloop是你应用的名字

这个打印出来的就是偏移地址:0x00000000082bd000
最后我们执行断点命令

breakpoint set -a 0x0000000100000dc0+0x00000000082bd000
断点

我们可以看到断点打成功了.


断点成功

我们过掉Xcode断点,发现代码会断点到test函数处了.

OK 今天就是我要讲的全部内容.动态调试别人的代码,总得知道别人的代码具体在内存中什么位置吧,学了今天的内容,相信对于你定位代码位置不再是难事了.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259