Mac遠(yuǎn)程登錄到iPhone(02)

Mac遠(yuǎn)程登錄到iPhone

  1. 我們經(jīng)常在Mac的終端上,通過敲一些命令行來完成一些操作
  • iOS和Mac OS X都是基于Darwin(蘋果的一個(gè)基于Unix的開源系統(tǒng)內(nèi)核),所以iOS中同樣支持終端的命令行操作
  • 在逆向工程中,我們經(jīng)常會通過命令行來操縱iPhone
  1. 為了能夠讓Mac終端中的命令行能作用在iPhone上,我們得讓Mac和iPhone建立連接
    • 通過Mac遠(yuǎn)程登錄到iPhone的方式建立連接
截屏2021-03-07 下午12.04.02.png

SSH、OpenSSH

  1. SSH
  • Secure Shell的縮寫,意為“安全外殼協(xié)議”,是一種可以為遠(yuǎn)程登錄提供安全保障的協(xié)議
  • 使用SSH,可以把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,“中間人”攻擊方式就不可能實(shí)現(xiàn),能防止DNS欺騙和IP欺騙
截屏2021-03-07 下午12.06.35.png
  1. OpenSSH
  • 是SSH協(xié)議的免費(fèi)開源實(shí)現(xiàn)
  • 可以通過OpenSSH的方式讓Mac遠(yuǎn)程登錄到iPhone

使用OpenSSH遠(yuǎn)程登錄

  1. 在iPhone上通過Cydia安裝OpenSSH工具(軟件源http://apt.saurik.com)
截屏2021-03-07 下午12.08.12.png
  1. OpenSSH的具體使用步驟可以查看Description中的描述
截屏2021-03-07 下午12.08.36.png

使用OpenSSH遠(yuǎn)程登錄 - 使用步驟

  1. SSH是通過TCP協(xié)議通信,所以要確保Mac和iPhone在同一局域網(wǎng)下,比如連接著同一個(gè)WiFi
  • 在Mac的終端輸入ssh 賬戶名@服務(wù)器主機(jī)地址
    比如ssh root@10.1.1.168(這里的服務(wù)器是手機(jī))
    初始密碼alpine
  1. 登錄成功后就可以使用終端命令行操作iPhone

  2. 退出登錄命令是exit

截屏2021-03-07 下午12.11.52.png

root、mobile

  1. iOS下有2個(gè)常用賬戶:root、mobile
  • root:最高權(quán)限賬戶,$HOME/var/root
  • mobile:普通權(quán)限賬戶,只能操作一些普通文件,不能操作系統(tǒng)級別的文件,$HOME/var/mobile
  1. 登錄mobile用戶:root mobile@服務(wù)器主機(jī)地址
  2. root和mobile用戶的初始登錄密碼都是alpine
    截屏2021-03-07 下午12.14.28.png
  3. 最好修改一下root和mobile用戶的登錄密碼(登錄root賬戶后,分別通過passwd、passwd mobile完成)
截屏2021-03-07 下午12.14.57.png

SSL、OpenSSL

很多人會將SSH、OpenSSH、SSL、OpenSSL搞混

  1. SSL
  • Secure Sockets Layer的縮寫,是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議,在傳輸層對網(wǎng)絡(luò)連接進(jìn)行加密
  1. OpenSSL
  • SSL的開源實(shí)現(xiàn)
  • 絕大部分HTTPS請求等價(jià)于:HTTP + OpenSSL
  1. OpenSSH的加密就是通過OpenSSL完成的
截屏2021-03-07 下午12.17.47.png
截屏2021-03-07 下午12.18.00.png

SSH的版本

  1. SSH協(xié)議一共2個(gè)版本
  • SSH-1
  • SSH-2
  1. 現(xiàn)在用的比較多的是SSH-2,客戶端和服務(wù)端版本要保持一致才能通信
  2. 查看SSH版本(查看配置文件的Protocol字段)
  • mac 作為客戶端訪問手機(jī)服務(wù)端
  • cd /etc/ssh
  • ls -l
  • 客戶端:/etc/ssh/ssh_config
  • 服務(wù)端:/etc/ssh/sshd_config
  • 查看mac的SSH cat ssh_config

SSH的通信過程

  1. SSH的通信過程可以分為3大主要階段
  • 建立安全連接
  • 客戶端認(rèn)證
  • 數(shù)據(jù)傳輸

建立安全連接

  • 在建立安全連接過程中,服務(wù)器會提供自己的身份證明


    截屏2021-03-07 下午12.21.04.png
  • 如果客戶端并無服務(wù)器端的公鑰信息,就會詢問是否連接此服務(wù)器


    截屏2021-03-07 下午12.21.26.png

服務(wù)器身份信息變更

  1. 在建立安全連接過程中,可能會遇到以下錯(cuò)誤信息:提醒服務(wù)器的身份信息發(fā)生了變更


    截屏2021-03-07 下午12.22.05.png
  2. 如果確定要連接此服務(wù)器,客戶端刪除掉之前服務(wù)器的公鑰信息就行
  • cd ~/.ssh
  • ssh-keygen -R 服務(wù)器IP地址
  • 或者直接打開known_hosts文件刪除服務(wù)器的公鑰信息就行
  • vim ~/.ssh/known_hosts

SSH的客戶端認(rèn)證方式

  1. SSH-2提供了2種常用的客戶端認(rèn)證方式
    1.1. 基于密碼的客戶端認(rèn)證
    1.2 使用賬號和密碼即可認(rèn)證

  2. 基于密鑰的客戶端認(rèn)證
    2.1.免密碼認(rèn)證
    2.2.最安全的一種認(rèn)證方式

  3. SSH-2默認(rèn)會優(yōu)先嘗試“密鑰認(rèn)證”,如果認(rèn)證失敗,才會嘗試“密碼認(rèn)證”

SSH - 基于密鑰的客戶端認(rèn)證

截屏2021-03-07 下午12.26.37.png

SSH - 基于密鑰的客戶端認(rèn)證

cd ~/.ssh

  1. 在客戶端生成一對相關(guān)聯(lián)的密鑰(Key Pair):一個(gè)公鑰(Public Key),一個(gè)私鑰(Private Key)
    ssh-keygen
    一路敲回車鍵(Enter)即可
    OpenSSH默認(rèn)生成的是RSA密鑰,可以通過-t參數(shù)指定密鑰類型
    生成的公鑰:~/.ssh/id_rsa.pub
    生成的私鑰:~/.ssh/id_rsa
  2. 把客戶端的公鑰內(nèi)容追加到服務(wù)器的授權(quán)文件(~/.ssh/authorized_keys)尾部
    cd ~/.ssh
    ssh-copy-id root@服務(wù)器主機(jī)地址
    需要輸入root用戶的登錄密碼
    ssh-copy-id會將客戶端~/.ssh/id_rsa.pub的內(nèi)容自動追加到服務(wù)器的~/.ssh/authorized_keys尾部
  3. 注意:由于是在~文件夾下操作,所以上述操作僅僅是解決了root用戶的登錄問題(不會影響mobile用戶)
  4. 經(jīng)過以上操作在客戶端mac 通過ssh @root192.168.1.110可以直接登錄了

公鑰 >> 授權(quán)文件

可以使用ssh-copy-id將客戶端的公鑰內(nèi)容自動追加到服務(wù)器的授權(quán)文件尾部,也可以手動操作

  • 復(fù)制客戶端的公鑰到服務(wù)器某路徑
    scp ~/.ssh/id_rsa.pub root@服務(wù)器主機(jī)地址:~/.ssh
    ? scp是secure copy的縮寫,是基于SSH登錄進(jìn)行安全的遠(yuǎn)程文件拷貝命令,把一個(gè)文件copy到遠(yuǎn)程另外一臺主機(jī)上
    ? 上面的命令行將客戶端的~/.ssh/id_rsa.pub拷貝到了服務(wù)器的~.ssh(路徑下)
    SSH登錄服務(wù)器
    ssh root@服務(wù)器主機(jī)地址
    ? 需要輸入root用戶的登錄密碼
    如果.ssh不存在,~路徑路徑下創(chuàng)建.ssh文件夾
    mkdir .ssh
    cd .ssh
    追加公鑰內(nèi)容到授權(quán)文件尾部
    // 講內(nèi)容追加到某個(gè)文件內(nèi)容的尾部,如果被追加的文件不存在的話會先創(chuàng)建文件,在追加內(nèi)容到文件中
    cat id_rsa.pub >> authorized_keys
    刪除公鑰
    rm ~/id_rsa.pub

文件權(quán)限問題

  • 如果配置了免密碼登錄后,還是需要輸入密碼,需要在服務(wù)器端設(shè)置文件權(quán)限
-rw------- (600)    只有擁有者有讀寫權(quán)限。
-rw-r--r-- (644)    只有擁有者有讀寫權(quán)限;而屬組用戶和其他用戶只有讀權(quán)限。
-rwx------ (700)    只有擁有者有讀、寫、執(zhí)行權(quán)限。
-rwxr-xr-x (755)    擁有者有讀、寫、執(zhí)行權(quán)限;而屬組用戶和其他用戶只有讀、執(zhí)行權(quán)限。
-rwx--x--x (711)    擁有者有讀、寫、執(zhí)行權(quán)限;而屬組用戶和其他用戶只有執(zhí)行權(quán)限。
-rw-rw-rw- (666)    所有用戶都有文件讀、寫權(quán)限。
-rwxrwxrwx (777)    所有用戶都有讀、寫、執(zhí)行權(quán)限。

chmod 755 ~
chmod 755 ~/.ssh
chmod 644 ~/.ssh/authorized_keys

22端口

  • 端口就是設(shè)備對外提供服務(wù)的窗口,每個(gè)端口都有個(gè)端口號(范圍是0~65535,共2^16個(gè))
  • 有些端口號是保留的,已經(jīng)規(guī)定了用途,比如
  1. 21端口提供FTP服務(wù)
  2. 80端口提供HTTP服務(wù)
  3. 22端口提供SSH服務(wù)(可以查看cat /etc/ssh/sshd_config的Port字段)
  4. 更多保留端口號: https://baike.baidu.com/item/%E7%AB%AF%E5%8F%A3%E5%8F%B7/10883658#4_3
  • iPhone默認(rèn)是使用22端口進(jìn)行SSH通信,采用的是TCP協(xié)議
截屏2021-03-07 下午12.35.58.png

通過USB進(jìn)行SSH登錄

  • 默認(rèn)情況下,由于SSH走的是TCP協(xié)議,Mac是通過網(wǎng)絡(luò)連接的方式SSH登錄到iPhone,要求iPhone連接WiFi
截屏2021-03-07 下午12.35.58.png
  • 為了加快傳輸速度,也可以通過USB連接的方式進(jìn)行SSH登錄
    Mac上有個(gè)服務(wù)程序usbmuxd(它會開機(jī)自動啟動),可以將Mac的數(shù)據(jù)通過USB傳輸?shù)絠Phone
    /System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
截屏2021-03-07 下午12.38.02.png

usbmuxd的使用1

  1. 下載usbmuxd工具包(下載v1.0.8版本,主要用到里面的一個(gè)python腳本:tcprelay.py)
  • https://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz(注意這個(gè)版本配合的是python2版本的,如果用的是python3需要在找支持python3的)
  • 脫殼我用的frida-ios-dump(因?yàn)槠渌拿摎霈F(xiàn)問題),其依賴python,通過brew裝的python3.9版本的python(我嘗試用系統(tǒng)的python出現(xiàn)了錯(cuò)誤,系統(tǒng)的就不要動了。在通過bash_profile配置一寫可選配置)
  • .bash_profile 配置
# 如果需要用到代理配置一下代理,我直接寫在了bash_profile下, 可以統(tǒng)一配置一個(gè)腳本。
#為什么配置?,因?yàn)榭赡苄枰螺d一些python版本庫,以及通過pip下載一些依賴可能需要翻墻(下載快一些)
export https_proxy=http://127.0.0.1:7890
http_proxy=http://127.0.0.1:7890
all_proxy=socks5://127.0.0.1:7890
# 可以通過brew下載符合自己的python版本,也可以使用系統(tǒng)的python(但是我出現(xiàn)了問題),所以通過brew,下載了python3.9版本
# 為什么?,因?yàn)橄到y(tǒng)默認(rèn)的是幾個(gè)版本的python,防止出現(xiàn)問題,這里固定一個(gè)版本
#命令行中優(yōu)先用
alias python=/usr/local/bin/python3.9
# 為什么?因?yàn)橄到y(tǒng)默認(rèn)有幾個(gè)版本的pip,防止出現(xiàn)問題,這里固定一個(gè)版本
# 命令行中優(yōu)先用
alias pip=/usr/local/bin/pip3.9
  1. 將iPhone的22端口(SSH端口)映射到Mac本地的10010端口
  • cd ~/Documents/usbmuxd-1.0.8/python-client
  • python tcprelay.py -t 22:10010
  1. 加上-t參數(shù)是為了能夠同時(shí)支持多個(gè)SSH連接
截屏2021-03-07 下午12.39.31.png

注意:要想保持端口映射狀態(tài),不能終止此命令行(如果要執(zhí)行其他終端命令行,請新開一個(gè)終端界面)

  1. 不一定非要10010端口,只要不是保留端口就行

usbmuxd的使用2

  1. 端口映射完畢后,以后如果想跟iPhone的22端口通信,直接跟Mac本地的10010端口通信就可以了
  • 新開一個(gè)終端界面,SSH登錄到Mac本地的10010端口(以下方式2選1)
    ssh root@localhost -p 10010
    ssh root@127.0.0.1 -p 10010
    ? localhost是一個(gè)域名,指向的IP地址是127.0.0.1,本機(jī)虛擬網(wǎng)卡的IP地址
  • usbmuxd會將Mac本地10010端口的TCP協(xié)議數(shù)據(jù),通過USB連接轉(zhuǎn)發(fā)到iPhone的22端口
  1. 遠(yuǎn)程拷貝文件也可以直接跟Mac本地的10010端口通信
  • scp -P 10010 ~/Desktop/1.txt root@localhost:~/test
  • 將Mac上的~/Desktop/1.txt文件,拷貝到iPhone上的~/test路徑
  • 注意:scp的端口號參數(shù)是大寫的-P

sh腳本文件

  1. 我們可以將經(jīng)常執(zhí)行的一系列終端命令行放到sh腳本文件中(shell),然后執(zhí)行腳本文件
截屏2021-03-07 下午12.42.44.png
  1. 可以通過sh、bash、source命令來執(zhí)行sh腳本文件
  • sh、bash
    當(dāng)前shell環(huán)境會啟動一個(gè)子進(jìn)程來執(zhí)行腳本文件,執(zhí)行后返回到父進(jìn)程的shell環(huán)境
    執(zhí)行cd時(shí),在子進(jìn)程中會進(jìn)入到cd的目錄,但是在父進(jìn)程中環(huán)境并沒有改變,也就是說目錄沒有改變
  • source
    在當(dāng)前的shell環(huán)境下執(zhí)行腳本文件
    執(zhí)行cd后會跳轉(zhuǎn)到cd的目錄
    source可以用一個(gè)點(diǎn)”.”來替代,比如”. test.sh”
截屏2021-03-07 下午12.45.06.png

iOS終端的中文亂碼問題

  • 默認(rèn)情況下,iOS終端不支持中文輸入和顯示
  • 解決方案:新建一個(gè)~/.inputrc文件,文件內(nèi)容是
    不將中文字符轉(zhuǎn)化為轉(zhuǎn)義序列
    set convert-meta off
  • 允許向終端輸出中文
    set output-meta on
  • 允許向終端輸入中文
    set meta-flag on
    set input-meta on
  • 如果是想在終端編輯文件內(nèi)容,可以通過Cydia安裝一個(gè)vim(軟件源http://apt.saurik.com)
截屏2021-03-07 下午12.48.16.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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