1. 程式人生 > IOS開發 >iOS逆向學習之二(Mac遠端操控iPhone)

iOS逆向學習之二(Mac遠端操控iPhone)

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)