美文网首页
iOS逆向基础篇--汇编

iOS逆向基础篇--汇编

作者: hello_iOS程序媛 | 来源:发表于2018-04-21 20:37 被阅读0次

逆向开发是建立在分析二进制指令上面,二进制指令与汇编语言一一对应。通过分析app二进制反汇编的汇编语言来推测逻辑,最后达到高级代码还原。

汇编语言的发展

机器语言

由0和1组成的机器指令.

汇编语言(assembly language)

使用助记符代替机器语言
如: mov x0,#0xa0
汇编编译器器将汇编语言转换为机器码

高级语言(High-level programming language)

C\C++\Java\OC\Swift,更加接近人类的自然语言
比如C语言: int a = b;
高级语言的编译器将高级语言转换为汇编语言

我们的代码在终端设备上是这样的过程:


高级语言--汇编语言--机器语言
  • 汇编语言机器语言一一对应,每一条机器指令都有与之对应的汇编指令
  • 汇编语言可以通过编译得到机器语言机器语言可以通过反汇编得到汇编语言
  • 高级语言可以通过编译得到汇编语言 \ 机器语言,但汇编语言\机器语言几乎不可能还原成高级语言

汇编语言的种类

  • 目前讨论比较多的汇编语言有

    • 8086汇编(8086处理器是16bit的CPU)
    • ARM汇编(嵌入式、Mac、iOS)
    • X86 汇编 (Mac)
    • ......
  • 我们iPhone里面用到的是ARM汇编,但是不同的设备也有差异.因CPU的架构不同.

  • 我们在打包App的时候,app支持的架构指令集是多种的,一般我们会选择armv7, armv7s,arm64三种架构通用,将三个可执行文件包成一个包。 QQMusice支持arm7和arm64
架构 设备
armv6 iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch
armv7 iPhone3GS, iPhone4, iPhone4S,iPad, iPad2, iPad3(The New iPad), iPad mini, iPod Touch 3G, iPod Touch4
armv7s iPhone5, iPhone5C, iPad4(iPad with Retina Display)
arm64 iPhone5S 以后 iPhoneX , iPad Air, iPad mini2以后
  • iphone 5C是最后一个arm32位版本, 5C之后都是arm64位版本
  • arm32和arm64位指令集会有些不一样

几个必要的常识

要想学好汇编,首先需要了解CPU等硬件结构
APP/程序的执行过程

APP/程序的执行过程
  • 硬件相关最为重要是CPU/内存
  • 在汇编中,大部分指令都是和CPU与内存相关

总线

  • 每一个CPU芯片都有许多管脚,这些管脚和总线相连,CPU通过总线跟外部器件进行交互
  • 总线:一根根导线的集合
  • 总线分为数据总线、地址总线、控制总线
    • 数据总线宽度决定了CPU的单次数据传送量,也就是数据传送速度。如 8086的数据总线宽度是16,所以单次最大传递2个字节的数据
    • 地址总线宽度决定寻址能力,寻址能力直接影响能够使用多大的内存条。如8086的地址总线宽度是20,所以寻址能力是1M( 220 )
    • 控制总线的宽度决定了CPU对其他器件的控制能力、能有多少种控制

内存

各类存储区的逻辑连接 各类存储器的逻辑连接-物理地址对应图 各类存储器的物理地址情况
  • 内存地址空间的大小受CPU地址总线宽度的限制。8086的地址总线宽度为20,可以定位2^20个不同的内存单元(内存地址范围0x00000~0xFFFFF),所以8086的内存空间大小为1MB

  • 0x00000~0x9FFFF:主存储器。可读可写

  • 0xA0000~0xBFFFF:向显存中写入数据,这些数据会被显卡输出到显示器。可读可写

  • 0xC0000~0xFFFFF:存储各种硬件\系统信息。只读

数据的宽度

数学上的数字,是没有大小限制的,可以无限的大。但在计算机中,由于受硬件的制约,数据都是有长度限制的(我们称为数据宽度),超过最多宽度的数据会被丢弃。

int a = 0X1ffffffff;
超过最多宽度的数据被丢弃

相关文章

网友评论

      本文标题:iOS逆向基础篇--汇编

      本文链接:https://www.haomeiwen.com/subject/etkflftx.html