注:原文---念茜的博客
大部分中文應用彈出的默認鍵盤是簡體中文輸入法鍵盤,在輸入用戶名和密碼的時候,如果使用簡體中文輸入法鍵盤,輸入英文字符和數字字符的用戶名和密碼時,會自動啟動系統輸入法自動更正提示,然后用戶的輸入記錄會被緩存下來。
系統鍵盤緩存最方便拿到的就是利用系統輸入法自動更正的字符串輸入記錄。緩存文件的地址是:
/private/var/mobile/Library/Keyboard/dynamic-text.dat
導出該緩存文件,查看內容,欣喜的發現一切輸入記錄都是明文存儲的。因為系統不會把所有的用戶輸入記錄都當作密碼等敏感信息來處理。
一般情況下,一個常規 iPhone 用戶的 dynamic-text.dat 文件,高頻率出現的字符串就是用戶名和密碼。
所以,一般銀行客戶端 app 輸入密碼時都不使用系統鍵盤,而使用自己定制的鍵盤,原因主要有 2 個:
1)避免第三方讀取系統鍵盤緩存
2)防止屏幕錄制 (自己定制的鍵盤按鍵不加按下效果)
那么,如何實現自定義安全鍵盤呢?大致思路如下:
1)首先捕獲系統鍵盤的彈出、收回通知
2)創建一個更高級別的 window 擋住系統鍵盤
3)需要拋出一個 idtextInput 的弱引用切換焦點
下面給出一個簡單的安全鍵盤模型: