iOS逆向(一)-環(huán)境介紹和基本工具的使用

逆向有門(mén)檻,入坑需謹(jǐn)慎

==iOS逆向環(huán)境介紹==

本文越獄環(huán)境:iPhone6 iOS 10.0.2 (推薦使用iOS 8 )

===Drawin 體系===

Darwin是由蘋(píng)果電腦于2000年所釋出的一個(gè)開(kāi)放原始碼操作系統(tǒng)。Darwin 是MacOSX 操作環(huán)境的操作系統(tǒng)成份。蘋(píng)果電腦于2000年把Darwin 釋出給開(kāi)放原始碼社群。

終端命令輸入uname -a顯示操作系統(tǒng)名稱(chēng):
gongyouqiangdeMacBook-Pro:~ Yochi$ uname -a
Darwin gongyouqiangdeMacBook-Pro.local 16.7.0 Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64 x86_64

  • Darwin是一種類(lèi)似unix的操作系統(tǒng),他的核心XNU[1],XNU是一種混合式內(nèi)容結(jié)合了Mach[2]與BSD[3]兩種內(nèi)核

    • 主流的類(lèi)unix:
      • Linux 由Linus Torvalds 研發(fā)的,代表發(fā)行版本CenOS,Redhat,Ubuntu,Debian,openWRT等
      • Mac OS X的Intel部分
      • freeBSD[4] 由加州大學(xué)伯克利分校基于UNIX研發(fā)的(UNIX變種)
      • Solaris 由Sun(現(xiàn)在的Oracel) 開(kāi)發(fā)的UNIX商業(yè)版本
  • BSD[3] 實(shí)現(xiàn)在Mach[2]的上層,這一層提供的API 支持了POSIX標(biāo)準(zhǔn)模型。在XNU中主要實(shí)現(xiàn)了一些高級(jí)的API與模塊

    • UNIX 進(jìn)程模型
      == e.g fork, vfork, wait, waitpid, exec等==

    • POSIX 線程模型即pthread,以及相關(guān)的同步功能
      == e.g pthread_create, pthread_mutex(線程互斥鎖) ==

    • UNIX的用戶(hù)與組管理
      == e.g root用戶(hù),mobile用戶(hù), 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 蘋(píng)果公司開(kāi)發(fā)的移動(dòng)操作系統(tǒng)

    • OSI 是Open System Interconnection的縮寫(xiě),意為開(kāi)放式系統(tǒng)互聯(lián)。OSI模型把網(wǎng)絡(luò)通信的工作分為7層,分別是物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層和應(yīng)用層。

    • ISO是國(guó)際標(biāo)準(zhǔn)化組織。上面的OSI模型由改組織制定。一般UNIX系統(tǒng)都基于符合POSIX標(biāo)準(zhǔn)和ISO C 標(biāo)準(zhǔn)

      • POSI表示可移植操作系統(tǒng)接口(Portable Operating System Interface)
      • ISO C 標(biāo)準(zhǔn), C語(yǔ)言標(biāo)準(zhǔn)接口
  • 為什么要越獄?

    • 突破iOS沙盒機(jī)制(sandbox)
      == 沙盒是一種安全機(jī)制,為運(yùn)行中的程序提供隔離環(huán)境。沙盒在啟動(dòng)的時(shí)候可以設(shè)置運(yùn)行的程序是否可以訪問(wèn)網(wǎng)絡(luò)、文件、目錄等==
sandbox.jpg

==Cydia - 越獄iOS的軟件管理平臺(tái)==

Cydia 之父 - Jay Freeman(杰·弗里曼)

  • 越獄是合法的

  • 安裝OpenSSH,為電腦和越獄手機(jī)提供連接環(huán)境
    == 在Cydia中搜索OpenSSH并安裝,這樣iOS上面就可以開(kāi)啟SSH服務(wù)。SSH服務(wù)默認(rèn)綁定端口號(hào)22==

1、使用SSH命令連接iOS,默認(rèn)登錄密碼"alpine"

 iOS連接wifi,設(shè)置中可以看到ip地址,也可以改成靜態(tài)IP地址
  ssh -p 22 root@xx.xx.xx.xx      

Windows、UNIX和VMS系統(tǒng)使用SecureCRT這款理想工具連接運(yùn)行。

iOS 10注意:(iOS 10以下按流程走)
=:)yalu102自帶了SSH
無(wú)需安裝OPENSSH,安裝了請(qǐng)先卸載
無(wú)需安裝OPENSSH,安裝了請(qǐng)先卸載
無(wú)需安裝OPENSSH,安裝了請(qǐng)先卸載。
=:)SSH連接不上,在手機(jī)上安裝Mterminal(終端)以此輸入如下命令:

$su
默認(rèn)密碼:alpine
$ps aux|grep dropbear

(1)如果你看到的進(jìn)程沒(méi)有dropbear
輸入:
/usr/local/bin/dropbear -F -R -p 22
然后就可以連接了,重啟依然有效

(2)如果你看到進(jìn)程是這樣:/usr/local/bin/dropbear -F -R -p 127.0.0.1:22
意思是只能數(shù)據(jù)線重定向連接SSH,
如果你想改成WIFI可以訪問(wèn)那么用Filza或iFile軟件進(jìn)入系統(tǒng)文件夾修改(一個(gè)個(gè)的app點(diǎn)擊進(jìn)去找到y(tǒng)alu102.app就可以了)
/private/var/containers/Bundle/Application/{UUID}/yalu102.app/dropbear.plist

把里面有個(gè)參數(shù)127.0.0.1:22改成22保存,重啟手機(jī)即可

2、使用scp命令可以傳輸文件

新建終端窗口輸入下列拷貝命令:

  拷貝本地文件到客戶(hù)端
   $scp  filename  root@xx.xx.xx.xx:/tmp                 
  從客戶(hù)端拷貝文件到本地
   $scp root@xx.xx.xx.xx:/tmp/filename  /tmp/   

scp傳文件時(shí)錯(cuò)誤 scp: /usr/tools: not a regular file 不能成功傳送 
解決方案
1:有可能沒(méi)權(quán)限 chmod 777
2:  在使用scp時(shí)加上-r 參數(shù)scp -r [root@192.168.16.5:/usr/tools/xxxx](mailto:root@192.168.16.5:/usr/tools/xxxx)      

iOS 10注意修復(fù)SCP:(iOS 10以下按流程走)

你會(huì)發(fā)現(xiàn)yalu102自帶的SSH無(wú)法用WINSCP傳輸文件,因?yàn)槿鄙倭藄cp
(1)cydia里面安裝wget
(2)在mterminal里面登陸root權(quán)限
(3)執(zhí)行以下命令
wget mila432.com/scp
ldid -S scp
chmod 777 scp
mv scp /usr/bin/scp

3、修改默認(rèn)密碼(cydia中OpenSSH有詳細(xì)說(shuō)明)

passwd root
passwd mobile
  • 安裝包管理工具
    == 在Cydia中搜索 APT 0.6 Transitional并安裝 ==

1、SSH登錄iPhone后,可在電腦終端輸入如下命令:

     apt-get update                    【更新所有的源】

     apt-get upgrade                 【更新所有通過(guò)apt-get安裝的程序】

     apt-get install  packagename         【安裝軟件包】

     apt-get remove  packagename      【刪除軟件包,不刪除依賴(lài)包,不刪除配置文件】

     apt-get remove --purge packagename  【刪除該軟件包,不刪除依賴(lài)包,刪除配置文件】

     apt-get autoremove packagename       [刪除該軟件包,刪除依賴(lài)包,不刪除配置文件]

     apt-get autoremove --purge packagname    【可以刪除所有依賴(lài)包+配置文件】

     apt-cache search string             【搜索含有該string字段的軟件包】

     apt-cache show packagename     【詳細(xì)顯示該軟件包的信息】

     apt-get clean                   【清除apt-get安裝的軟件包備份,可以釋放儲(chǔ)存空間,不影響軟件正常使用】

2、使用apt-get 安裝軟件包
== e.g 安裝traceroute ==

    發(fā)現(xiàn)找不到軟件包
    apt-get install traceroute
    
    如果不知道軟件包名稱(chēng),也可以用關(guān)鍵字搜索
    apt-cache search traceroute
    
    apt-get install  network-cmds

3、安裝必要的工具

    apt-get install  ping       //發(fā)送icmp報(bào)文,檢查網(wǎng)絡(luò)狀況
    
    apt-get install  ps         //查看進(jìn)程信息
    
    apt-get install  find       //查找文件
    
    apt-get install tcpdump     //抓包工具
    
    apt-get install top         //查看實(shí)施的進(jìn)程信息
    
    apt-get install vim         //文本編輯工具
    
    apt-get install  network-cmds   //-arp, ifconfig, netstat, route, traceroute

4、工具的使用

ping www.baidu.com -c 4 -s 600
-c 數(shù)目:在發(fā)送指定數(shù)目的包后停止。
-s 字節(jié)數(shù):指定發(fā)送的數(shù)據(jù)字節(jié)數(shù),預(yù)設(shè)值是56,加上8字節(jié)的ICMP頭,一共是64ICMP數(shù)據(jù)字節(jié)

ps aux 指令
linux上進(jìn)程有5種狀態(tài):
1. 運(yùn)行(正在運(yùn)行或在運(yùn)行隊(duì)列中等待)
2. 中斷(休眠中, 受阻, 在等待某個(gè)條件的形成或接受到信號(hào))
3. 不可中斷(收到信號(hào)不喚醒和不可運(yùn)行, 進(jìn)程必須等待直到有中斷發(fā)生)
4. 僵死(進(jìn)程已終止, 但進(jìn)程描述符存在, 直到父進(jìn)程調(diào)用wait4()系統(tǒng)調(diào)用后釋放)
5. 停止(進(jìn)程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號(hào)后停止運(yùn)行運(yùn)行)

1)ps a 顯示現(xiàn)行終端機(jī)下的所有程序,包括其他用戶(hù)的程序。
2)ps -A   顯示所有程序。
3)ps c    列出程序時(shí),顯示每個(gè)程序真正的指令名稱(chēng),而不包含路徑,參數(shù)或常駐服務(wù)的標(biāo)示。
4)ps -e  此參數(shù)的效果和指定"A"參數(shù)相同。
5)ps e   列出程序時(shí),顯示每個(gè)程序所使用的環(huán)境變量。
6)ps f    用ASCII字符顯示樹(shù)狀結(jié)構(gòu),表達(dá)程序間的相互關(guān)系。
7)ps -H    顯示樹(shù)狀結(jié)構(gòu),表示程序間的相互關(guān)系。
8)ps -N   顯示所有的程序,除了執(zhí)行ps指令終端機(jī)下的程序之外。
9)ps s     采用程序信號(hào)的格式顯示程序狀況。
10)ps S     列出程序時(shí),包括已中斷的子程序資料。
11)ps -t <終端機(jī)編號(hào)>  指定終端機(jī)編號(hào),并列出屬于該終端機(jī)的程序的狀況。
12)ps u   以用戶(hù)為主的格式來(lái)顯示程序狀況。
13)ps x   顯示所有程序,不以終端機(jī)來(lái)區(qū)分。
14)ps -l     較長(zhǎng),較詳細(xì)的顯示該P(yáng)ID的信息

在根目錄開(kāi)始查找文件名為ping的文件
find / -name ping     

在/tmp目錄中查找包含'hello'字符的文件,-r表示包含子目錄
grep -r 'hello*' /tmp 

top命令:是Linux下常用的性能分析工具,能夠?qū)崟r(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用狀況,類(lèi)似于Windows的任務(wù)管理器。
顯示系統(tǒng)內(nèi)存使用情況
top -l 1 | head -n 10 | grep PhysMem 
       
tcpdump命令:用簡(jiǎn)單的話來(lái)定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者的定義對(duì)網(wǎng)絡(luò)上的數(shù)據(jù)包進(jìn)行截獲的包分析工具。
tcpdump可以將網(wǎng)絡(luò)中傳送的數(shù)據(jù)包的“頭”完全截獲下來(lái)提供分析。它支持針對(duì)網(wǎng)絡(luò)層、協(xié)議、主機(jī)、網(wǎng)絡(luò)或端口的過(guò)濾,并提供and、or、not等邏輯語(yǔ)句來(lái)幫助你去掉無(wú)用的信息。

實(shí)用命令實(shí)例
默認(rèn)啟動(dòng)
tcpdump
普通情況下,直接啟動(dòng)tcpdump將監(jiān)視第一個(gè)網(wǎng)絡(luò)接口上所有流過(guò)的數(shù)據(jù)包。

監(jiān)視指定網(wǎng)絡(luò)接口的數(shù)據(jù)包
tcpdump -i eth1
如果不指定網(wǎng)卡,默認(rèn)tcpdump只會(huì)監(jiān)視第一個(gè)網(wǎng)絡(luò)接口,一般是eth0,下面的例子都沒(méi)有指定網(wǎng)絡(luò)接口?!?
監(jiān)視指定主機(jī)的數(shù)據(jù)包
打印所有進(jìn)入或離開(kāi)sundown的數(shù)據(jù)包.

tcpdump host sundown
也可以指定ip,例如截獲所有210.27.48.1 的主機(jī)收到的和發(fā)出的所有的數(shù)據(jù)包

tcpdump host 210.27.48.1 
打印helios 與 hot 或者與 ace 之間通信的數(shù)據(jù)包

tcpdump host helios and \( hot or ace \)
截獲主機(jī)210.27.48.1 和主機(jī)210.27.48.2 或210.27.48.3的通信

tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) 
打印ace與任何其他主機(jī)之間通信的IP 數(shù)據(jù)包, 但不包括與helios之間的數(shù)據(jù)包.

tcpdump ip host ace and not helios
如果想要獲取主機(jī)210.27.48.1除了和主機(jī)210.27.48.2之外所有主機(jī)通信的ip包,使用命令:

tcpdump ip host 210.27.48.1 and ! 210.27.48.2
截獲主機(jī)hostname發(fā)送的所有數(shù)據(jù)

tcpdump -i eth0 src host hostname
監(jiān)視所有送到主機(jī)hostname的數(shù)據(jù)包

tcpdump -i eth0 dst host hostname
監(jiān)視指定主機(jī)和端口的數(shù)據(jù)包

如果想要獲取主機(jī)210.27.48.1接收或發(fā)出的telnet包,使用如下命

$tcpdump tcp port 23 and host 210.27.48.1
對(duì)本機(jī)的udp 123 端口進(jìn)行監(jiān)視 123 為ntp的服務(wù)端口
tcpdump udp port 123 

抓包結(jié)束命令:ctl+c


  1. XNU,由蘋(píng)果電腦發(fā)展的操作系統(tǒng)內(nèi)核,被使用于Mac OS X中。它是Darwin操作系統(tǒng)的一部份,跟隨著Darwin一同作為自由及開(kāi)放源代碼軟件被發(fā)布。XNU是X is Not Unix的縮寫(xiě)。 ?

  2. Mach是一個(gè)由卡內(nèi)基梅隆大學(xué)開(kāi)發(fā)的用于支持操作系統(tǒng)研究的操作系統(tǒng)內(nèi)核,為了用于操作系統(tǒng)之研究,特別是在分布式與并行運(yùn)算上。是最早實(shí)現(xiàn)微核心操作系統(tǒng)的例子之一,是許多其它相似的項(xiàng)目的標(biāo)準(zhǔn)。 ? ?

  3. BSD (Berkeley Software Distribution,伯克利軟件套件)是Unix的衍生系統(tǒng),在1977至1995年間由加州大學(xué)伯克利分校開(kāi)發(fā)和發(fā)布的。歷史上, BSD曾經(jīng)被認(rèn)為是UNIX的一支——"BSD UNIX", 因?yàn)樗?a target="_blank" rel="nofollow">AT&T UNIX操作系統(tǒng)共享基礎(chǔ)代碼和設(shè)計(jì)。在20世紀(jì)80年代,衍生出了許多變形的UNIX授權(quán)軟件。比較著名的如DEC的Ultrix及Sun公司的SunOS。1990年代,BSD很大程度上被System V4.x版以及OSF/1系統(tǒng)所取代,晚期BSD版本為幾個(gè)開(kāi)源軟件開(kāi)發(fā)提供了平臺(tái)并且一直沿用至今。今天,“BSD”并不特指任何一個(gè)BSD衍生版本,而是類(lèi)UNIX操作系統(tǒng)中的一個(gè)分支的總稱(chēng)。 ? ?

  4. FreeBSD是一種類(lèi)UNIX操作系統(tǒng),是由經(jīng)過(guò)BSD、386BSD和4.4BSD發(fā)展而來(lái)的Unix的一個(gè)重要分支。FreeBSD 為不同架構(gòu)的計(jì)算機(jī)系統(tǒng)提供了不同程度的支持。并且一些原來(lái)BSD UNIX的開(kāi)發(fā)者后來(lái)轉(zhuǎn)到FreeBSD的開(kāi)發(fā),使得FreeBSD在內(nèi)部結(jié)構(gòu)和系統(tǒng)API上和UNIX有很大的兼容性。由于FreeBSD寬松的法律條款,其代碼被好多其他系統(tǒng)借鑒包括蘋(píng)果公司的macOS,正因此由于MacOS X的UNIX兼容性,使得macOS獲得了UNIX商標(biāo)認(rèn)證。 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容