天天看點

Android裝置adb授權的原理【轉】

error: device unauthorized. Please check the confirmation dialog on your device.

用adb調試android裝置時,首次連接配接時,會出現一個授權提示:

error: device unauthorized. Please check the confirmation dialog on your device.

這時候,正常情況下,在手機上會出現一個提示框,讓使用者确認是否授權這個PC裝置允許調試,你隻需要點選确認就可以了!

工作原理是什麼?

原來在我們的PC機(以windows為例)上啟動了adb.exe程序時,adb會在本地生成一對密鑰adbkey(私鑰)與adbkey.pub(公鑰);

根據彈框提示“The computer's RSA key fingerprint is:xxxx”,可以看出是一對RSA算法的密鑰,其中公鑰是用來發送給手機的;

當你執行“adb shell”時,adb.exe會将目前PC的公鑰(或者公鑰的hash值)(fingerprint)發送給android裝置;這時,如果android上已經儲存了這台PC的公鑰,則比對出對應的公鑰進行認證,建立adb連接配接;如果android上沒有儲存這台PC的公鑰,則會彈出提示框,讓你确認是否允許這台機器進行adb連接配接,當你點選了允許授權之後,android就會儲存了這台PC的adbkey.pub(公鑰);

當然手機廠商也有可能會内置一些adbkey.pub(公鑰);

那麼問題來了,這些密鑰在PC與Android上分别存儲在哪裡?

首先PC上,以Windows7為例,當你首次啟動adb.exe時,會在C槽的目前使用者的目錄下生成一個".android"目錄,其中adbkey與adbkey.pub就在這個目錄下;(adb.exe會在啟動時讀取這兩個檔案(沒有就重新生成),是以如果你要是删除或者修改了這兩個檔案之後,必須要關閉adb.exe程序,重新開機之後才能生效;)

其次Android上,PC的公鑰被儲存在一個檔案中"/data/misc/adb/adb_keys";

在知道了adb這種認證的原理之後,你可以在不希望自己android裝置授權任何PC裝置進行adb連結時,清除"/data/misc/adb/adb_keys"檔案;