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

截屏2021-03-07 下午12.04.02.png
SSH、OpenSSH
- 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
- OpenSSH
- 是SSH協(xié)議的免費(fèi)開源實(shí)現(xiàn)
- 可以通過OpenSSH的方式讓Mac遠(yuǎn)程登錄到iPhone
使用OpenSSH遠(yuǎn)程登錄
- 在iPhone上通過Cydia安裝OpenSSH工具(軟件源http://apt.saurik.com)

截屏2021-03-07 下午12.08.12.png
- OpenSSH的具體使用步驟可以查看Description中的描述

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

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

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

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

截屏2021-03-07 下午12.18.00.png
SSH的版本
- SSH協(xié)議一共2個(gè)版本
- SSH-1
- SSH-2
- 現(xiàn)在用的比較多的是SSH-2,客戶端和服務(wù)端版本要保持一致才能通信
- 查看SSH版本(查看配置文件的Protocol字段)
- mac 作為客戶端訪問手機(jī)服務(wù)端
cd /etc/sshls -l- 客戶端:
/etc/ssh/ssh_config - 服務(wù)端:
/etc/ssh/sshd_config - 查看mac的SSH
cat ssh_config
SSH的通信過程
- SSH的通信過程可以分為3大主要階段
- 建立安全連接
- 客戶端認(rèn)證
- 數(shù)據(jù)傳輸
建立安全連接
-
在建立安全連接過程中,服務(wù)器會提供自己的身份證明
截屏2021-03-07 下午12.21.04.png -
如果客戶端并無服務(wù)器端的公鑰信息,就會詢問是否連接此服務(wù)器
截屏2021-03-07 下午12.21.26.png
服務(wù)器身份信息變更
-
在建立安全連接過程中,可能會遇到以下錯(cuò)誤信息:提醒服務(wù)器的身份信息發(fā)生了變更
截屏2021-03-07 下午12.22.05.png - 如果確定要連接此服務(wù)器,客戶端刪除掉之前服務(wù)器的公鑰信息就行
cd ~/.sshssh-keygen -R 服務(wù)器IP地址或者直接打開known_hosts文件刪除服務(wù)器的公鑰信息就行vim ~/.ssh/known_hosts
SSH的客戶端認(rèn)證方式
SSH-2提供了2種常用的客戶端認(rèn)證方式
1.1. 基于密碼的客戶端認(rèn)證
1.2 使用賬號和密碼即可認(rèn)證基于密鑰的客戶端認(rèn)證
2.1.免密碼認(rèn)證
2.2.最安全的一種認(rèn)證方式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
- 在客戶端生成一對相關(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 - 把客戶端的公鑰內(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尾部 - 注意:由于是在~文件夾下操作,所以上述操作僅僅是解決了root用戶的登錄問題(不會影響mobile用戶)
- 經(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ī)定了用途,比如
-
21端口提供FTP服務(wù) -
80端口提供HTTP服務(wù) -
22端口提供SSH服務(wù)(可以查看cat /etc/ssh/sshd_config的Port字段) - 更多保留端口號: 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
- 下載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
- 將iPhone的22端口(SSH端口)映射到Mac本地的10010端口
cd ~/Documents/usbmuxd-1.0.8/python-clientpython tcprelay.py -t 22:10010
- 加上-t參數(shù)是為了能夠同時(shí)支持多個(gè)SSH連接

截屏2021-03-07 下午12.39.31.png
注意:要想保持端口映射狀態(tài),不能終止此命令行(如果要執(zhí)行其他終端命令行,請新開一個(gè)終端界面)
- 不一定非要10010端口,只要不是保留端口就行
usbmuxd的使用2
- 端口映射完畢后,以后如果想跟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端口
- 遠(yuǎn)程拷貝文件也可以直接跟Mac本地的10010端口通信
scp -P 10010 ~/Desktop/1.txt root@localhost:~/test- 將Mac上的
~/Desktop/1.txt文件,拷貝到iPhone上的~/test路徑 - 注意:scp的端口號參數(shù)是大寫的-P
sh腳本文件
- 我們可以將經(jīng)常執(zhí)行的一系列終端命令行放到sh腳本文件中(shell),然后執(zhí)行腳本文件

截屏2021-03-07 下午12.42.44.png
- 可以通過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



