0%

翻译自 jndok’s blog   原文链接:http://jndok.github.io/2016/10/04/pegasus-writeup/

Introduction

大家好,在这篇博文中,我决定讲述一些原理,是关于两个在 Pegasusu spyware 中提到的 OS X/iOS 的内核漏洞的,影响至 OS X 10.11.6 以及 iOS 9.3.4 版本。我尝试对这些漏洞以及它们的利用程序进行深入的分析。

由于这是我写下的第一篇博客,因此有什么错误或粗糙的地方,还请你多一点耐心,如果你发现任何错误或者困扰的地方,请发邮件给我 me@jndok.net ,我将会尽力帮助你。

最后一点需要注意的地方就是:我们只将着重讲述 OS X 内核。这是由于在 iOS 上采取的安全措施,使得在 iOS 的环境中来利用这两个漏洞实在是要困难得多。另外,这篇博文也针对初学者,我们将尽量使讲述直接明了。

阅读全文 »

基础知识提要

对于 Objective-C 对象来讲,手动内存管理主要是通过以下方法来进行的:

  • retain :    使得对象的引用计数+1
  • release:   使得对象的引用计数-1
  • autorelease: 使得对象的引用计数在 autorelease pool 释放的时候再-1
  • dealloc:   当对象的引用计数为0的时候自动调用,表明对象被释放

因为只有 OC 对象是分配在堆上的(其他如 C 语言对象是分配在栈上的),因此也只有 OC 对象在未开启 ARC 的时候需要我们手动管理内存。

阅读全文 »

基础知识提要

调用方法,本质是发送消息。比如:

1
2
3
4
5
Person *p = [[Person alloc] init];
[p test];
// 本质是发送消息: clang -rewrite-objc main.m
((void (*)(id, SEL))(void *)objc_msgSend)((id)p, sel_registerName("test"));
阅读全文 »

概念

对象拷贝有两种方式:浅拷贝和深拷贝。

浅拷贝(shallow copy),并不拷贝对象本身,仅仅是拷贝指向对象的指针
如果 B = [A 浅拷贝],则 A、B 两个对象中都保存的同一个指针,如果 A 通过这个指针改变了指针指向的对象,那么 B 指针指向的对象也就随之改变了;

深拷贝是直接拷贝整个对象到另一块内存中,开辟新的地址来存储,两个对象至此一别,再无关联。

阅读全文 »