iOS逆向环境
- iOS逆向需要在越狱环境下操作
- 使用uname -a 查看手机环境
Darwin
-
Darwin是一种类似unix的操作系统,它的核心XNU,XNU是一种混合式内核,结合了mach与BSD两种内核
-
主流的类Unix
-
Linux 由Linus Torvalds研发的,代表发行版本CenOS,Redhat,Ubuntu,Debian,openWRT等
-
Mac OS X的Intel部分
-
freeBSD 由加州大学伯克利分校基于UNIX研发的(UNIX变种,当时如果不是与贝尔实验室打官司,可能就不会有现在的Linux什么事)
-
Solaris 由Sun(现为Oracel)开发的UNIX商业版本
-
-
-
BSD 实现在Mach的上层,这一层提供的API 支持了POSIX标准模型。在XNU中主要实现了一些高级的API与模块
-
UNIX 进程模型
== e.g fork,vfork,wait,waitpid,exec等 == -
POSIX 线程模型即pthread,以及相关的同步功能
== e.g pthread_create,pthread_mutex(线程互斥锁)== -
UNIX的用户与组管理
==e.g root用户,mobile用户,chmod等== -
网络协议栈(BSD Socket API),符合POSIX 模型
== e.g socket();bind(); listen();accept();connect(); gethostbyname(); gethostbyaddr()等伯克利套接字API== -
文件系统/设备系统
== e.g Filesystem Hierarchy Standard(文件系统层次化标准)==
iOS,OSI,ISO的含义
-
iOS 苹果公司开发的移动操作系统
-
OSI 是Open System Interconnection的缩写,意为开放式系统互联。OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
-
IOS是国际标准化组织。上面的OSI模型由该组织制定。一般类UNIX系统都基本符合POSIX标准和IOS C标准
-
POSIX表示可移植操作系统接口(Portable Operating System Interface)
-
IOS C标准,C语言标准库接口
-
为什么越狱
- 突破iOS沙盒机制的限制(sandbox)== 沙盒是一种安全机制,为运行中的程序提供隔离环境。沙盒在启动的时候可以设置运行的程序是否可以访问网络、文件、目录等==
逆向的基本思路
-
正向工程(Forward Engineering)
抽象的逻辑设计 => 具体的物理实现
设计概念和算法 => 编写源代码 => 编译成二进制机器码
将想法和设计理念变成具体实现的过程 -
逆向工程(Reverse Engineering)
具体的物理实现 => 抽象的逻辑设计
反编译机器码 => 汇编代码(类似的高级语言代码) => 理解其算法和设计概念从二进制码中提取设计概念和算法
-
程序的编译和反编译
高级语言(C/C++/Oc/Java/Python/C#) -> 中间语言(如:汇编等) -> 目标代码(exe/lib/dll/sys/dylib等二进制文件)
编译链接 高级语言 -------> 机器码 <------ 机器码 反汇编/反编译
编译链接 高级语言 ===> 机器码 <=== 反汇编/反编译
-
逆向的思路
-
逆向必须是有目的的、有针对性的(明确你要做的事情)
-
先熟悉你要逆向的目标程序,从正向的思路去猜测他可能的实现方法(使用的框架、调用的系统API等)
-
定位关键代码
-
通过监控UI事件的响应定位关键代码
-
通过监控底层API的调用定位关键代码(如网络访问接口、文件读写接口等)
-
通过观察数据的变化来定位关键代码和地址
-
-
逆向是一个试错的过程,需要不停的猜测、查找和进行验证,既考验耐心也考验动手能力
网友评论