2015年3月15日 星期日

透過無線網路 wifi 用 adb 操控手機

這一篇讓你的手機曝露於資安風險之中!

透過無線網路使用 adb 連線 請先確認 usb 連線的 adb 功能 正常無誤。 想要改用 wifi 來對手機 adb 連線, 你的手機必須 root。 並且建議先安裝一個終端機模擬器 (例如 f-droid 的 terminal emulator) 以便實驗失敗、 暫時無法從電腦上用 adb shell 下指令時, 還可以直接在手機上面下指令。 以下不論是從電腦連手機, 或是直接在手機上用 terminal emulator, 都必須先 su 變身成 root。 (但是電腦端, 可以用一般用戶的身份下 adb 指令。)

註1: 懶人請直接搜尋 「adb wifi」, 有 app 可以幫你。 註2: 不要誤會, 這不是什麼好用的遠端遙控手機圖形介面; 這篇只是教玩家們如何從遠端使用 adb 命令列 操控手機。

  1. 先指定: 未來用 wifi 連線時, 使用 port 5555。 可以從電腦上用 adb tcpip 5555 或是在手機上用 setprop service.adb.tcp.port5555 來達成。 這只是設定參數, 還沒有真的啟動。 如果你是用 adb shell 來下這個指令, 有可能下完之後會被踢出來; 但其實還是可以連回去。 可以在下指令之前跟之後查看: getprop service.adb.tcp.port 確認其效果。
  2. 在手機上: stop adbd ; start adbd 如果你是用 adb shell 連線, 這兩個指令一定要打在同一列, 不然下完第一個指令你就被踢出來拜拜了 :-)
  3. 在手機上, 到 Settings => Developer options => ADB over network 打勾, 對對我不怕資安風險, 並且抄下手機的 ip 及 adb port。 比方說是 192.168.1.235:5555 好了。
  4. 回到電腦上, adb connect 192.168.1.235 應該會出現 connected to 192.168.1.235:5555 那就成功了!

玩完了以後, 只要在手機上再度到 Settings => Developer options => ADB over network 取消打勾, 就可以改回 usb 連線模式。

以上是根據 這篇問答 再加上自己的實驗修改出來的筆記。 也請搜尋 「adb wifi」。 我覺得裡面提到的 (電腦上) adb tcpip 5555 指令跟 (手機上) setprop service.adb.tcp.port5555 指令的效果相同, 所以應該只需要擇一即可。 官方手冊 寫 tcpip 的部分也怪怪的...

實驗過程當中如果失敗, 有幾個動作有助於除錯:

  1. 確認手機的 Developer options 裡面的 USB debugging notify 有打勾。 這樣連線成功時會有訊息。
  2. 另外準備一部電腦、 一部手機或平板, 不改變任何設定, 而是只用來跟實驗中的機器插線拔線, 用排列組合的方式來確認到底是誰出問題。
  3. 手機那邊, 有時可能需要重新啟動 adb: stop adb ; start adb
  4. 電腦這邊, 也可能需要停掉 adb: adb server stop。 不需要 adb server start , 因為下 adb 指令時, adb server 會自動重新啟動。
  5. 但有時上面的指令無法完全停掉 adb server。 請用 ps ax | grep adb 確認已無 adb 程序。 如果還有, 就要 kill 掉 (參數是上列指令結果最左側的 pid)。

其實透過 wifi 用 adb 也並沒有那麼危險啦。 最大的問題就是它沒有密碼保護。 所以最重要的就是: 每當有人要用 adb 連我的手機時, 要確認到底是誰才打勾。 而且除了你自己的電腦之外, 最好只允許本次連線。 因為你不曉得下次連線時, 操作 [原本你所信任那部] 電腦的人是誰。 此外, 手機重開機, 就會自動取消 wifi adb 功能。

1 則留言:

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。