iOS逆向環(huán)境
- iOS逆向需要在越獄環(huán)境下操作
- 使用uname -a 查看手機(jī)環(huán)境
Darwin
-
Darwin是一種類似unix的操作系統(tǒng),它的核心XNU直秆,XNU是一種混合式內(nèi)核,結(jié)合了mach與BSD兩種內(nèi)核
-
主流的類Unix
Linux 由Linus Torvalds研發(fā)的痒给,代表發(fā)行版本CenOS嫌变,Redhat,Ubuntu徒爹,Debian,openWRT等
Mac OS X的Intel部分
freeBSD 由加州大學(xué)伯克利分薪鹇眨基于UNIX研發(fā)的(UNIX變種,當(dāng)時(shí)如果不是與貝爾實(shí)驗(yàn)室打官司腌且,可能就不會有現(xiàn)在的Linux什么事)
Solaris 由Sun(現(xiàn)為Oracel)開發(fā)的UNIX商業(yè)版本
-
BSD 實(shí)現(xiàn)在Mach的上層梗肝,這一層提供的API 支持了POSIX標(biāo)準(zhǔn)模型。在XNU中主要實(shí)現(xiàn)了一些高級的API與模塊
UNIX 進(jìn)程模型
== e.g fork铺董,vfork巫击,wait,waitpid精续,exec等 ==POSIX 線程模型即pthread坝锰,以及相關(guān)的同步功能
== e.g pthread_create,pthread_mutex(線程互斥鎖)==UNIX的用戶與組管理
==e.g root用戶重付,mobile用戶顷级,chmod等==網(wǎng)絡(luò)協(xié)議棧(BSD Socket API),符合POSIX 模型
== e.g socket();bind()确垫; listen()弓颈;accept()帽芽;connect(); gethostbyname()翔冀; gethostbyaddr()等伯克利套接字API==文件系統(tǒng)/設(shè)備系統(tǒng)
== e.g Filesystem Hierarchy Standard(文件系統(tǒng)層次化標(biāo)準(zhǔn))==
iOS导街,OSI,ISO的含義
iOS 蘋果公司開發(fā)的移動操作系統(tǒng)
OSI 是Open System Interconnection的縮寫纤子,意為開放式系統(tǒng)互聯(lián)搬瑰。OSI模型把網(wǎng)絡(luò)通信的工作分為7層,分別是物理層控硼、數(shù)據(jù)鏈路層泽论、網(wǎng)絡(luò)層、傳輸層象颖、會話層佩厚、表示層和應(yīng)用層。
-
IOS是國際標(biāo)準(zhǔn)化組織说订。上面的OSI模型由該組織制定抄瓦。一般類UNIX系統(tǒng)都基本符合POSIX標(biāo)準(zhǔn)和IOS C標(biāo)準(zhǔn)
POSIX表示可移植操作系統(tǒng)接口(Portable Operating System Interface)
IOS C標(biāo)準(zhǔn),C語言標(biāo)準(zhǔn)庫接口
為什么越獄
- 突破iOS沙盒機(jī)制的限制(sandbox)== 沙盒是一種安全機(jī)制陶冷,為運(yùn)行中的程序提供隔離環(huán)境钙姊。沙盒在啟動的時(shí)候可以設(shè)置運(yùn)行的程序是否可以訪問網(wǎng)絡(luò)、文件埂伦、目錄等==
逆向的基本思路
-
正向工程(Forward Engineering)
抽象的邏輯設(shè)計(jì) => 具體的物理實(shí)現(xiàn)
設(shè)計(jì)概念和算法 => 編寫源代碼 => 編譯成二進(jìn)制機(jī)器碼
將想法和設(shè)計(jì)理念變成具體實(shí)現(xiàn)的過程 -
逆向工程(Reverse Engineering)
具體的物理實(shí)現(xiàn) => 抽象的邏輯設(shè)計(jì)
反編譯機(jī)器碼 => 匯編代碼(類似的高級語言代碼) => 理解其算法和設(shè)計(jì)概念從二進(jìn)制碼中提取設(shè)計(jì)概念和算法
-
程序的編譯和反編譯
高級語言(C/C++/Oc/Java/Python/C#) -> 中間語言(如:匯編等) -> 目標(biāo)代碼(exe/lib/dll/sys/dylib等二進(jìn)制文件)
編譯鏈接 高級語言 -------> 機(jī)器碼 <------ 機(jī)器碼 反匯編/反編譯
編譯鏈接 高級語言 ===> 機(jī)器碼 <=== 反匯編/反編譯
-
逆向的思路
逆向必須是有目的的煞额、有針對性的(明確你要做的事情)
先熟悉你要逆向的目標(biāo)程序,從正向的思路去猜測他可能的實(shí)現(xiàn)方法(使用的框架沾谜、調(diào)用的系統(tǒng)API等)
-
定位關(guān)鍵代碼
通過監(jiān)控UI事件的響應(yīng)定位關(guān)鍵代碼
通過監(jiān)控底層API的調(diào)用定位關(guān)鍵代碼(如網(wǎng)絡(luò)訪問接口膊毁、文件讀寫接口等)
通過觀察數(shù)據(jù)的變化來定位關(guān)鍵代碼和地址
逆向是一個(gè)試錯(cuò)的過程,需要不停的猜測基跑、查找和進(jìn)行驗(yàn)證婚温,既考驗(yàn)?zāi)托囊部简?yàn)動手能力