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