大部分中文應用彈出的預設鍵盤是簡體中文輸入法鍵盤,在輸入使用者名稱和密碼的時候,如果使用簡體中文輸入法鍵盤,輸入英文字元和數字字元的使用者名稱和密碼時,會自動啟動系統輸入法自動更正提示,然後使用者的輸入記錄會被快取下來。
系統鍵盤快取最方便拿到的就是利用系統輸入法自動更正的字串輸入記錄。
快取檔案的地址是:/private/var/mobile/Library/Keyboard/dynamic-text.dat
匯出該快取檔案,檢視內容,欣喜的發現一切輸入記錄都是明文儲存的。因為系統不會把所有的使用者輸入記錄都當作密碼等敏感資訊來處理。
一般情況下,一個常規iPhone使用者的dynamic-text.dat檔案,高頻率出現的字串就是使用者名稱和密碼。
所以,一般銀行客戶端app輸入密碼時都不使用系統鍵盤,而使用自己定製的鍵盤,原因主要有2個:
1)避免第三方讀取系統鍵盤快取
2)防止螢幕錄製 (自己定製的鍵盤按鍵不加按下效果)
那麼,如何實現自定義安全鍵盤呢?大致思路如下:
1)首先捕獲系統鍵盤的彈出、收回通知
2)建立一個更高階別的window擋住系統鍵盤
3)需要丟擲一個 id<UITextInput>textInput 的弱引用切換焦點