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 的帮助文档中没搜索到,也不清楚到底是不是私有方法。

关于私有方法,以前的理解是到头文件中找不到的方法。也不知道理解的对不对,网上也没有找到比较详细的解释。愿随着技术的加深能够进一步区分清楚。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值