iOS逆向學習之二(Mac遠端操控iPhone)
阿新 • • 發佈:2019-12-25
SSH、OpenSSH
SSH
- 是Secure的縮寫,意為“安全外殼協議”,是一種可以為遠端登入提供安全保障的協議
- 使用SSH,可以把所有傳輸的資料進行加密,“中間人”攻擊方式就不可能實現,能防止DNS欺騙和IP欺騙
OpenSSH
- 是SSH協議的免費開源實現
- 我們可以通過OpenSSH讓Mac遠端登入到iPhone
如何使用OpenSSH遠端登入到iPhone?
安裝OpenSSH
- 首先,需要在iPhone上通過Cydia安裝OpenSSH工具,通過新增軟體源apt.saurik.com進行安裝。
- 安裝完成之後,可以通過檢視OpenSSH下的【DESCRIPTION】來檢視使用步驟。
使用OpenSSH遠端登入iPhone
-
SSH是通過TCP協議通訊,所以要確保Mac和iPhone在同一區域網下
-
具體連線步驟:
- 在Mac終端輸入ssh 賬戶名@伺服器主機地址
ssh [email protected] 複製程式碼
- 如果是第一次登入,會彈出許可權驗證,輸入yes即可
- 然後會讓你輸入密碼,OpenSSH的預設密碼是:alpine
- 輸入完密碼就登入到了iPhone上。
- 如果要退出登入,輸入exit即可
-
在iPhone上有兩種使用者,root和mobile
- root是最高許可權賬戶,$HOME是/var/root
- mobile是普通許可權賬戶,只能操作一些普通檔案,不能作業系統級別的檔案,$HOME是/var/mobile,mobile使用者登入方式同root賬戶
- 登入root和mobile賬戶之後,可以通過以下命令來修改root賬戶和mobile賬戶的登入密碼。
passwd passwd mobile 複製程式碼
SSL、OpenSSL
SSL
- Secure Sockets Layer的縮寫,是為網路通訊提供安全及資料完整性的一種安全協議,在傳輸層對網路連線進行加密
OpenSSL
- 是SSL的開源實現
- 現在大部分的Https請求其實就是等價於:Http+OpenSSL
- 我們之前使用的OpenSSH加密其實就是通過OpenSSL來來實現的。
SSH的通訊過程
SSH的通訊過程主要分為3個階段
建立安全連線
- 在建立安全連線的過程中,伺服器會提供自己的身份證明.
- 如果客戶端並無伺服器端的公鑰資訊,就會詢問是否連線此伺服器.
- 如果確認連線,則客戶端會將伺服器的公鑰資訊存放到~/.ssh/known_hosts中
- 如果伺服器的ip地址發生改變,可以通過刪除~/.ssh/known_hosts中已經存在的公鑰資訊,然後重新訪問即可。
- 除了手動刪除公鑰資訊的方式,還可以使用如下命令來刪除
ssh-keygen -R 伺服器ip地址
複製程式碼
客戶端認證
ssh2提供兩種賬號認證方式
基於密碼的客戶端驗證
基於祕鑰的客戶端驗證(免密碼登入)
- 通過以下命令在客戶端生成一對相關聯的金鑰(Key Pair):一個公鑰(Public Key),一個私鑰(Private Key),
ssh-keygen
複製程式碼
此時~/.ssh資料夾下會多出兩個檔案id_rsa、id_rsa.pub
- 把客戶端的公鑰內容追加到伺服器的授權檔案(~/.ssh/authorized_keys)尾部
ssh-copy-id root@伺服器主機地址
複製程式碼
-
也可以手動將公鑰追加到伺服器的授權檔案中
- 複製客戶端的公鑰到伺服器某路徑
scp ~/.ssh/id_rsa.pub root@伺服器主機地址:~ 複製程式碼
- SSH登入伺服器
ssh root@伺服器主機地址 複製程式碼
- 在伺服器建立.ssh資料夾
mkdir .ssh 複製程式碼
- 追加公鑰內容到授權檔案尾部
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys 複製程式碼
- 刪除公鑰
rm ~/id_rsa.pub 複製程式碼
如果設定了免密碼登入之後,還是需要輸入密碼。那麼就需要在伺服器端設定檔案許可權,使用如下命令:
chmod 755 ~
chmod 755 ~/.ssh
chmod 644 ~/.ssh/authorized_keys
複製程式碼
資料傳輸
通過USB進行SSH登入
22埠
- 埠就是裝置對外提供服務的視窗,每個埠都有個埠號(範圍是0~65535,共2^16個)
- 有些埠號是保留的,已經規定了用途
- iPhone預設是使用22埠進行SSH通訊,採用的是TCP協議
通過USB進行SSH登入
- 預設情況下,由於SSH走的是TCP協議,Mac是使用SSH通過網路連線的方式登入到iPhone,要求iPhone連線WiFi
- 為了加快傳輸速度,也可以通過USB連線的方式進行SSH登入。
- Mac上有個服務程式usbmuxd(它會開機自動啟動),可以將Mac的資料通過USB傳輸到iPhone,程式在如下地址:
/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
複製程式碼
使用usbmuxd工具來進行埠對映
- 通過以下地址下載usbmuxd工具包(下載v1.0.8版本,主要用到裡面的兩個python指令碼:tcprelay.py和usbmux.py) 點選下載
這兩個python指令碼在python3下執行會失敗,需要在python2版本執行
- 通過以下命令,將iPhone的22埠(SSH埠)對映到Mac本地的10088埠
這裡的10088埠可以自己隨意定義,只要不使用保留的埠號就行。
cd ~/Documents/usbmuxd-1.0.8/python-client
python tcprelay.py -t 22:10088
複製程式碼
這裡加上-t是為了同時支援多個ssh連線。注意:要想保持埠對映狀態,不能終止此命令列(如果要執行其他終端命令列,請新開一個終端介面)
- 埠對映完畢後,以後如果想跟iPhone的22埠通訊,直接跟Mac本地的10088埠通訊就可以了
- 新開一個終端介面,使用如下命令SSH登入到Mac本地的10088
ssh root@localhost -p 10088
複製程式碼
usbmuxd會將Mac本地10088埠的TCP協議資料,通過USB連線轉發到iPhone的22埠
- 遠端拷貝檔案也可以直接跟Mac本地的10010埠通訊
#將Mac上的~/Desktop/1.txt檔案,拷貝到iPhone上的~/test路徑
scp -P 10088 ~/Desktop/1.txt root@localhost:~/test
複製程式碼
使用itnl工具來進行埠對映
- 首先下載itnl工具
- cd到itnl工具所在目錄
- 執行命令
./itnl --lport 22 --lport 10088
複製程式碼
如果出現permission deny,則使用chmod 755 itnl為itnl增加執行許可權
- 不要關閉當前視窗,新開一個終端視窗,使用如下命令登入到mac的10088埠
ssh root@localhost -p 10088
複製程式碼
iOS終端的中文亂碼問題
預設情況下,終端不支援顯示中文,解決方案:新建一個~/.inputrc檔案,檔案內容是:
#不將中文字元轉化為轉義序列
set convert-meta off
#允許向終端輸出中文
set output-meta on
#允許向終端輸入中文
set meta-flag on
set input-meta on
複製程式碼
如果是想在終端編輯檔案內容,可以通過Cydia安裝一個Vi IMproved(軟體源http://apt.saurik.com)