【iOS】针对app调用KeyChain的钩子(hook)

本文探讨了如何在iOS中实现针对app调用KeyChain的钩子,重点关注设计思路和代码实现。通过钩住SecItemAdd、SecItemCopyMatching、SecItemUpdate和SecItemDelete四个函数,将KeyChain操作转化为文件操作。详细介绍了SecItemCopyMatching的实现,强调了处理双重指针result的注意事项,以避免类型错误和过度释放问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS提供的KeyChain具体作用不再阐述,网上已经有很多资料。

这里主要提供一个针对app调用KeyChain的钩子设计思路和实现。

代码实现真正难点并不在KeyChain的钩子本身,而在于其中一些基础知识(比如双重指针),记录下来提醒自己

设计思路:

钩住常用的四个KeyChain函数

OSStatus SecItemAdd(CFDictionaryRef attributes, CFTypeRef  _Nullable *result);

OSStatus SecItemCopyMatching(CFDictionaryRef query, CFTypeRef  _Nullable *result);

OSStatus SecItemUpdate(CFDictionaryRef query, CFDictionaryRef attributesToUpdate);

OSStatus SecItemDelete(CFDictionaryRef query);

替换成自己的函数处理

主要处理为:

SecItemAdd 把attributes特例化存储为一个文件,使用唯一值做文件名来标示。同时要根据attributes里面的kSecReturn属性(kSecReturnData/kSecReturnAttributes等)确定是否返回result,返回哪种result

SecItemCopyMatching 把query的特例化值取出,拼接成文件名,找到文件,根据query里的kSecReturn属性(kSecReturnData/kSecReturnAttributes等)确定返回哪种result

SecItemUpdate 只处理更新文件名和数据的行为

SecItemDelete 把qu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值