太阳集团2138备用网址

  • 宁夏泾源县杨岭村—— 荒山变绿产业兴 青砖蓝瓦新居起 2019-05-20
  • 《航拍中国》第二季:呈现卫星视角下美丽中国 2019-05-20
  • 山东青岛候鸟迁徙过境胶州湾 成壮观过境潮 2019-05-20
  • 国务院决定取消和下放一批行政许可事项 2019-05-20
  • 这里有一份芝士美食攻略 请你查收 2019-05-20
  • 江州03月份天气江州03月份气温江州2019年03月份历史天气 2019-05-20
  • 四乡会景,五子朝王!黄埔迎来“波罗诞”活动高潮 2019-05-20
  • 每日一餐:小黄姜葱段爆猪肝 2019-05-20
  • 关于拟授予福建省第二批“金牌导游”和首批“金牌讲解员”荣誉称号的公示 2019-05-20
  • 本周初省内中南部有雨雪 春分后回归晴好 2019-05-20
  • 音乐生涯满满30年 杜德伟《蒙面唱将》中发声亮相 2019-05-20
  • 问:有关部门能否为台资企业提供更多辅导,协助企业早日到达高新技术企业申请资格? 2019-05-20
  • 港股8日跌1.91% 收报28228.42点 2019-05-20
  • “英雄花开颂英雄,爱国情怀殿堂浓”主题摄影作品征集活动正式开启! 2019-05-20
  • 强军路上,三位军队女代表的追梦人生 2019-05-20
  • 欢迎来到 黑吧太阳集团2138备用网址 是业内专业的游戏平台,为你提供各式各样的精品游戏,最全的游戏项目,同时还为您提供各种游戏专题游戏攻略人气论坛。

    深入XPC:逆向分析XPC对象

    来源:本站整理 作者:佚名 时间:2018-12-18 TAG: 我要投稿

    太阳集团2138备用网址 www.r-island.com 一、前言
    最近我在FortiGuard实验室一直在深入研究macOS系统安全,主要关注的是发现和分析IPC漏洞方面内容。在本文中,我将与大家分享XPC内部数据类型,可以帮助研究人员(包括我自己)快速分析XPC漏洞根源,也能深入分析针对这些漏洞的利用技术。
    XPC是macOS/iOS系统上使用的增强型IPC框架,自10.7/5.0版引入以来,XPC的使用范围已经呈爆炸式增长。XPC依然包含没有官方说明文档的大量功能,具体实现也没有公开(例如,libxpc这个主工程为闭源项目)。XPC在两个层面上开放API:底层以及Foundation封装层。在本文中我们只关注底层API,这些API为libxpc.dylib直接导出的xpc_*函数。
    这些API可以分为object API以及transport API。XPC通过libxpc.dylib提供自己的数据类型,具体数据类型如下所示:

    图1. XPC提供的数据类型
    从C API角度来看,所有的对象实际上都是xpc_object_t。实际类型可以通过xpc_get_type(xpc_object_t)函数动态确定。所有数据类型可以使用对应的xpc_objectType_create函数创建,并且所有这些函数都会调用_xpc_base_create(Class, Size)函数,其中Size参数指定了对象的大小,而Class参数为某个_OS_xpc_type_*元类(metaclass)。
    我们可以通过Hopper Disassembler v4看到 _xpc_base_create函数被多次引用。

    图2. 对_xpc_base_create函数的引用代码
    我开发了Hopper的一个python脚本,可以自动找出调用_xpc_base_create函数时所使用的具体参数。如下python脚本可以显示Hopper Disassembler中XPC对象的大小。
    def get_last2instructions_addr(seg, x):
                      last1ins_addr = seg.getInstructionStart(x - 1)
                      last2ins_addr = seg.getInstructionStart(last1ins_addr - 1)
                      last2ins = seg.getInstructionAtAddress(last2ins_addr)
                      last1ins = seg.getInstructionAtAddress(last1ins_addr)
                      print hex(last2ins_addr), last2ins.getInstructionString(), last2ins.getRawArgument(0), last2ins.getRawArgument(1)
                      print hex(last1ins_addr), last1ins.getInstructionString(), last1ins.getRawArgument(0), last1ins.getRawArgument(1)
                      return last2ins,last1ins
    def run():
                      print '[*] Demonstrating XPC ojbect sizes using a hopper diassembler's python script'
                      xpc_object_sizes_dict = dict()
                      doc = Document.getCurrentDocument()
                      _xpc_base_create_addr = doc.getAddressForName('__xpc_base_create')
                      for i in range(doc.getSegmentCount()):
                                        seg = doc.getSegment(i)
                                        #print '[*]'+ seg.getName()
                                        if('__TEXT' == seg.getName()):
                                                          eachxrefs = seg.getReferencesOfAddress(_xpc_base_create_addr)
                                                          for x in eachxrefs:

    [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]  下一页

    【声明】:太阳集团2138备用网址(http://www.r-island.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@www.r-island.com,我们会在最短的时间内进行处理。