12

有没有人有一个文档的链接,在最新的 Mac OS (10.7) 和 iOS (6.0) 的什么情况下究竟是随机的?

我是说。我想看一个列表(类似)

  • 代码段(在 A、B、C 的情况下)

  • 堆栈(总是)

  • 数据段(从不)

最好每个事物具有多少位随机化。

我能找到的只是:“MacOS Lion 实现了完整的 ASLR”,而在其他地方,“完整的 ASLR 以不同的方式针对不同的操作系统实现”,这显然不是很丰富。

4

2 回答 2

18

您可以轻松生成您要查找的列表,如下所示:

int global_j = 0;

void main ()
{

    char *h = malloc(10);
    int j = 0;

    printf ("Globals are : %p, text is %p, stack is %p, heap is %p\n",
        &global_j, main, &j, h);

}

在山狮上,这会产生:

bash-3.2# ./a
Globals are : 0x10fa55020, text is 0x10fa54eb0, stack is 0x7fff501ab864, heap is 0x7f9b294000e0
bash-3.2# ./a
Globals are : 0x106bbe020, text is 0x106bbdeb0, stack is 0x7fff59042864, heap is 0x7f9752c000e0
bash-3.2# ./a
Globals are : 0x108673020, text is 0x108672eb0, stack is 0x7fff5758d864, heap is 0x7fecc34000e0
bash-3.2# ./a
Globals are : 0x1059d2020, text is 0x1059d1eb0, stack is 0x7fff5a22e864, heap is 0x7f8f81c000e0

显示充分的随机化(请注意,由于对齐限制,页面内的偏移量不会随机化,但您仍然会得到一些 16-20 位随机化,正如 4-5 十六进制数字变化所暗示的那样)。

  • 内核:从 Mountain Lion 和 iOS6 开始,内核是通过在加载时以 vm_kernel_slide 的值“滑动”它来随机化的。并非所有 vm 页面都以这种方式滑动,但在大多数情况下,这是通过存储一些常量值来工作的(这也可以通过系统调用 #439,kas_info,在 ML 但不是在 iOS 上读取:Apple 正在努力保持随机化值秘密,并且在报告内核地址时不会泄漏它,因此越狱者不会弄清楚他们可以跳转到/覆盖的位置 - 这对他们来说大部分时间都有效)

希望这可以帮助,

TG

于 2012-10-10T23:20:54.200 回答
8

没有馅饼:

可执行 - 已修复

数据 - 固定

堆 - 每次执行随机化

堆栈 - 固定

库 - 每个设备启动随机

链接器 - 已修复

使用馅饼:

可执行文件 - 每次执行随机

数据 - 每次执行随机

堆 - 每次执行随机化(更多熵)

堆栈 - 每次执行随机化

库 - 每个设备启动随机

链接器 - 每次执行随机化

于 2013-09-10T09:19:23.090 回答