iOS 越狱手机 ikeymonitor 插件检测
背景:
在越獄手機上安裝 ikeymonitor 插件之后,日志中能實時記錄用戶的輸入文本(密碼除外,密碼采用了密碼控件),可能存在安全隱患。
解決思路:
1、 遍歷手機已安裝的應用,判斷是否安裝 ikeymonitor 插件
思路不可行,ikeymonitor 是一個插件,本人理解中 ikeymonitor 不是一個應用,沒有 Url scheme。
2、 遍歷程序啟動時的動態庫,通過分析安裝 ikeymonitor 之后和未安裝 ikeymonitor 時的區別,來檢測是否安裝 ikeymonitor
思路驗證:
1、 越獄手機的準備
手機 iPhone 4S,版本:iOS8.1.3
PP助手越獄,注意:越獄時,需要尋找相對應的 iTunes 版本
2、日志文件的分析比較
左邊為安裝了 ikeymonitor 的日志,右邊為未安裝 ikeymonitor 的日志
通過對比發現:libcupolicy.dylib 未安裝 ikeymonitor 插件時也存在;keychain.dylib 在安裝 ikeymonitor 插件之后會存在,卸載之后就沒有了
3、代碼實現,為防止出錯,目前僅在越獄環境下進行檢測,且當檢測到插件時只給出提示,不影響用戶使用對
#import <mach-o/dyld.h>if ([CSIIDeviceInfo isJailBroken]) {// 越獄環境uint32_t count = _dyld_image_count();for (uint32_t i = 0 ; i < count; ++i) {NSString *dyldNameString = [[NSString alloc] initWithUTF8String:_dyld_get_image_name(i)];NSLog(@"%@", dyldNameString);// 通過比對觀察,安裝ikeymonitor插件時,會加載keychain.dylib動態庫,未安裝此插件時,不會加載// 注意:此方法有待時間驗證if (dyldNameString.length > 0 && [dyldNameString rangeOfString:@"keychain.dylib"].length > 0) {[CSIIProjectUtils showCenterInfoWithmessage:@"檢測到當前手機環境為越獄環境且可能安裝了鍵盤記錄插件,\n請謹慎操作!"];break;}}}注:keychain.dylib 和鑰匙串無關,在未安裝 ikeymonitor 狀態下,使用鑰匙串相關方法,不會加載 keychain.dylib 動態庫
后記
在和朋友聊天時,有人說 _dyld_image_count 和 _dyld_get_image_name 是私有方法,過不了審核。雖然我自己認為不是,但心里還是一直挺擔心,提交 App Store 嘗試后,也不知道是運氣好,還是別的什么原因,比較幸運的過審了。
_dyld_image_count 和 _dyld_get_image_name 能夠到頭文件中找到,但到 Xcode 的幫助文檔中沒搜索到,也不清楚到底是不是私有方法。
關于私有方法,以前的理解是到頭文件中找不到的方法。也不知道理解的對不對,網上也沒有找到比較詳細的解釋。愿隨著技術的加深能夠進一步區分清楚。
總結
以上是生活随笔為你收集整理的iOS 越狱手机 ikeymonitor 插件检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于 路标设置 的问题
- 下一篇: Go错误处理