因为objc是动态绑定的,程序运行时必须知道如何绑定,依靠的就是类描述。只要知道类描述是如何组织的就可以获取一切有用的信息。不知道是幸运还是不幸,这些信息全部都在运行的程序中。即使没有IDA这样的工具,也能够获知程序中定义了哪此类,分析它们的定义以及作用。

下面我截取几个片段。

常用基础类的派生树:

还有dispatch_object的派生树:

知道类名字后就可以知道一切关于它的信息,以UIView为例,信息太多犹其私有方法太多只能截取几个片段。

首先实例的尺寸

实例的成员分布(成员变量符号名称,成员变量位置和大小,以及成员变量对齐字节)

类的方法 (包括方法名,方法类型,以及方法的入口地址)

实例的方法 (包括方法名,方法类型,以及方法的入口地址)

是不是全部都看得清清楚楚,方法不单只有名还给出了类型,自己也可以写出方法原型来,例如

+beginAnimations:

v24@0:8@16

0x00000001020e1641

经过简单逻辑推理之后就明白,v24@0:8@16指的是 返回void,调用栈大小为24B,第一个参数始于0并且是objc实例(,也就是id),第二个参数始于8,第三个参数始于16也是一个objc实例。另外还有方法的入口地址,恭候被反汇编多时了。

再如:

-setFrame:

v48@0:8{CGRect={CGPoint=dd}{CGSize=dd}}16

0x00000001020d6efa

结合前面我介绍过的gcc@x64的参数方式,可以分析出,返回void,48字节调用栈长度,前面两个参数同上,最后一个参数起始于16,由浮点数量组成,dd表示xmm寄存器中存放两个浮点数,一共使用了两个xmm寄存器。

今天也多谢大家观看,更多反汇编逆向分析objc请关注后面的篇章。

预告:前篇分析过__strong和__weak的反汇编,下篇将反汇编逆向分析__block。

逆向分析objc,所有类的信息都能在动态调试中获取。的更多相关文章

  1. Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)---->第4节: recycler中获取对象

    Netty源码分析第八章: 高性能工具类FastThreadLocal和Recycler 第四节: recycler中获取对象 这一小节剖析如何从对象回收站中获取对象: 我们回顾上一小节demo的ma ...

  2. python3 - 商品管理的程序,商品信息都存在一个json串里面

    商品管理的程序,商品信息都存在一个json串里面 1.查询商品信息 #校验商品是否存在 2.新增商品 # #校验商品是否存在 #校验价格是否合法 3.修改商品信息 ##校验商品是否存在 if chic ...

  3. 【逆向怎么玩】 动态调试一款牛逼C++ IDE实录

    声明 本篇只从逆向兴趣出发,研究其程序运行原理. CLion程序版权为jetBrains所有. 注册码授权为jetBrains及其付费用户所有. 不会释出任何完整的源代码. 涉及能直接推算出注册码的地 ...

  4. 【转】安卓逆向实践5——IDA动态调试so源码

    之前的安卓逆向都是在Java层上面的,但是当前大多数App,为了安全或者效率问题,会把一些重要功能放到native层,所以这里通过例子记录一下使用IDA对so文件进行调试的过程并对要点进行总结. 一. ...

  5. 【ASP.NET Core】在Blazor中获取 HTTP 上下文信息

    今天咱们来扯一下 Blazor 应用程序怎么访问 HttpContext.其实这句话有坑,为了避免大伙伴们掉茅坑,老周直接说明:Blazor 是不能访问 HttpContext 的.哪怕你在服务容器中 ...

  6. C# 随机给一个全部信息都未知的类类型,如何获取该类的类名、属性个数、属性名、属性的数据类型、属性值?

    一.场景假设 假设现在有一个泛型类T的实例对象t,该T类的全部信息都未知. 要求:打印输出实例对象t的类名.属性个数.属性名.属性的数据类型.属性值. 二.解决问题 1.我们根据输出的内容要求定义一个 ...

  7. MacOS微信逆向分析-Frida

    MacOS微信逆向分析-Frida 0.前言 PC下的微信二次开发相信大家都会了,那么本篇文章将带领大家使用Frida框架对Mac下微信来进行二次开发! PS:还有一种静态注入的方式也不错,但是考虑到 ...

  8. 【Bugly干货分享】手把手教你逆向分析 Android 程序

    很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个图,感受一下. 第一张图是在把代码注入到地图里面,启动首页的时候弹出个浮窗,下载网络的 ...

  9. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

随机推荐

  1. Jackson替换fastjson

    为什么要替换fastjson 工程里大量使用了fastjson作为序列化和反序列化框架,甚至ORM在处理部分字段也依赖fastjson进行序列化和反序列化.那么作为大量使用的基础框架,为什么还要进行替 ...

  2. PHP代码审计基础-中级篇

    初级篇更多是对那些已有的版本漏洞分析,存在安全问题的函数进行讲解,中级篇更多是针对用户输入对漏洞进行利用 中级篇更多是考虑由用户输入导致的安全问题. 预备工具首先要有php本地环境可以调试代码 总结就 ...

  3. 16.Linux yum扩展

    1.列出yum源可用的软件仓库 [root@yinwucheng ~]# yum repolist [root@yinwucheng ~]# yum repolist all 查看所有的仓库  ``` ...

  4. win7重装系统经验总结报告(2013年6月29日凌晨1:45)

    win7重装系统经验总结报告(2013年6月29日凌晨1:45) 步骤: 1.考虑被重做的电脑是否有重要文件在C盘.有则转移到D盘等非系统盘. 2.看该电脑是2GB内存还是4GB以上内存. 3.准备好 ...

  5. LeetCode刷题总结-数组篇(上)

    数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...

  6. SQLAlchemy的基础使用

    一.ORM 与 SQLAlchemy 简介 ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射.简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对 ...

  7. 【EmguCV视频教程】VS2017+EmguCV3.4(C# OpenCV)高清入门视频教程

    视频采用VS2017 + EmguCV3.4版本录制,内容类似本人的Python和C++版本,如果需要的朋友可加我咨询,视频共40讲,从按照到读取显示图片,图形预处理,边缘检测,形态学,角点检测,轮廓 ...

  8. 在VMware下的Linux中的RAID5校验位算法下的磁盘管理

    前景:1988年由加利福尼亚大学伯克利分校发表的文章首次提到并定义了RAID,当今CPU性能每年可提升30%-50%但硬盘仅提升7%,渐渐的已经成为计算机整体性能的瓶颈,并且为了避免硬盘的突然损坏导致 ...

  9. Linux下修改文件权限,所有权

    Linux与Unix是多用户操作系统,所以文件的权限与所有权的实现就显得很有必要:每个文件主要与三组权限打交道,分别是用户(user),用户组(group),其他用户(other) 用户(u)是文件的 ...

  10. mine:dp

    一个小的线性dp.方法很多,八仙过海各显神通. 我想讲一下我的: #include<cstdio> #define mod 1000000007 ];][][],n;//是不是雷,右边有没 ...