首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

AFNetworking源码探究(十四) —— AFSecurityPolicy与安全认证 (二

(b) 安全策略 主要对应下面这段代码 NSMutableArray *policies = [NSMutableArray array]; if (self.validatesDomainName)...如果self.validatesDomainName == YES,需要验证域名,那么调用下面函数,这个函数是Security框架中的,是苹果原生的,返回值类型为SecPolicyRef,将该返回值加入策略数组...如果需要验证domain,那么就使用SecPolicyCreateSSL函数创建验证策略,其中第一个参数为true表示验证整个SSL证书链,第二个参数传入domain,用于判断整个证书链上叶子节点表示的那个...== NO,不需要验证域名,那么调用下面函数,这个函数是Security框架中的,是苹果原生的,返回值类型为SecPolicyRef,将该返回值加入策略数组policies中。...再去调用之前的serverTrust去验证该证书是否有效,有可能经过这个方法过滤后,serverTrust里面的pinnedCertificates被筛选只有信任的那一个证书。

83020
您找到你想要的搜索结果了吗?
是的
没有找到

带你打造一套 APM 监控系统 之 OOM 问题

基础知识准备 硬盘:也叫做磁盘,用于存储数据。你存储的歌曲、图片、视频都是在硬盘里。 内存:由于硬盘读取速度较慢,如果 CPU 运行程序期间,所有的数据都直接从硬盘中读取,则非常影响效率。...App 内存不足时,系统会按照一定策略来腾出更多的空间供使用。比较常见的做法是将一部分优先级低的数据挪磁盘上,该操作为称为 page out。...所以 Memory footprint = dirtySize + CompressedSize 设备不同,内存占用上限不同,App 上限较高,extension 上限较低,超过上限 crash EXC_RESOURCE_EXCEPTION...为了测试数据的准确性,我将测试2台设备(iPhone 6s plus/13.3.1,iPhone 11 Pro/13.3.1)的所有 App 彻底退出,只跑了一个为了测试内存临界值的 Demo App。...iOS 系统还会维护一个内存快照表,用于保存每个进程内存页的消耗情况。

4.1K21

二进制重排

0、iOS应用的内存布局 应用的内存布局从低到高如下排布: 保留段:用于给系统提供一些必要的空间; 代码段和数据段在APP启动时就加载到了内存区 栈区(stack):由编译器自动分配释放,存放函数的参数值...2、二进制重排启动优化的原理 App 在启动时,需要执行各种函数,我们需要读取 _TEXT 段代码物理内存中,这个过程会发生Page Fault缺⻚中断,由于启动时所需要执行的代码分布在 _TEXT...在iphone 6s上,大概一次page faults平均需要0.2ms或更久。所以对于巨型app而言,更少的page faults会带来更大的启动提升。...well-layout:则可能只占用了12页物理内存,只触发了2次page faults,且是相邻页的page faults; 3、重排方案 对于lldb而言,可采取的方案是基于linker提供的-...[calls containsObject:obj]) { [calls addObject:obj]; } }

68920

iOS获取通讯录联系人信息 原

权限申请代码示例如下:     //这个变量用于记录授权是否成功,即用户是否允许我们访问通讯录     int __block tip=0;     //声明一个通讯簿的引用     ABAddressBookRef...    //做一个友好的提示         UIAlertView * alart = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"请您设置允许APP...kABPersonPhoneProperty);         for (NSInteger j=0; j<ABMultiValueGetCount(phones); j++) {             [phonerr addObject...            NSDictionary * temDic = [NSDictionary dictionaryWithObject:data forKey:str];             [dateArr addObject...arrayWithObjects:@"123",@"456",nil];     // 电话号码对应的名称     NSArray *labels = [NSArray arrayWithObjects:@"iphone

1.2K40

iOS获取通讯录联系人信息

权限申请代码示例如下:     //这个变量用于记录授权是否成功,即用户是否允许我们访问通讯录     int __block tip=0;     //声明一个通讯簿的引用     ABAddressBookRef...    //做一个友好的提示         UIAlertView * alart = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"请您设置允许APP...kABPersonPhoneProperty);         for (NSInteger j=0; j<ABMultiValueGetCount(phones); j++) {             [phonerr addObject...            NSDictionary * temDic = [NSDictionary dictionaryWithObject:data forKey:str];             [dateArr addObject...arrayWithObjects:@"123",@"456",nil];     // 电话号码对应的名称     NSArray *labels = [NSArray arrayWithObjects:@"iphone

1.4K40

IOS 某电商App签名算法解析(二) Frida RPC调用

NSDictionary NSArray等ObjectC对象的构造和复制 ObjectC 类方法和对象方法的调用 附送福利, ObjectC的nil 参数如何构造 二、步骤 参考Android下的玩法 参照 某段子App...协议分析(三) 我们把frida RPC的框架先搭一下,这块的套路是一样的, Flask启动一个web服务 脚本暴露一个接口出来给Python调用 app = Flask(__name__) @app.route...我们试试 NSMutableArray var param_Key_Array = ObjC.classes.NSMutableArray.arrayWithObject_(sBody); param_Key_Array.addObject..._(sClient); param_Key_Array.addObject_(sClientVersion); param_Key_Array.addObject_(sFunctionId); param_Key_Array.addObject...TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及的代码项目可以去 奋飞的朋友们 知识星球自取

2K30

iOS 二级菜单(UITableView实现)「建议收藏」

2 如果有子菜单点一下打开,如果没有,则实现相应的操作; 我们来实现他(界面有点丑,但主要是功能,界面很简单自己设计一下就行): 个人想法是这样的: 首先建立一个cell的类,用于存放cell中的内容...;//中间处理过程数组,用于插入子视图 @property (nonatomic,strong) NSMutableArray * DeleteArry;//中间处理过程数组,用于删除子视图 -(NSArray...*array = [[NSMutableArray alloc] init]; [array addObject:cell0]; TableCell *cell = [[TableCell...];//初始化用于存放位置的数组 for(TableCell * cell in _InsertArry) { NSIndexPath *path = [NSIndexPath...:child];//添加到删除数组 } item.Open = NO;//设置子视图关闭 NSMutableArray *mutableArry = [NSMutableArray

1.1K30
领券