前言
银行和信用卡类app 为了安全,防止修改和抓包都是基本的要求。
- 防止抓包
经过app的SSL证书验证之后,别人无法获取报文,除非服务器的证书信任Charles的证书
- 防止修改请求和返回数据
【iOS app侧对请求参数进行签名:【请求参数按照ASCII码从小到大排序、拼接、加密】(递归的方式进行实现)】
https://kunnan.blog.csdn.net/article/details/108195721
本文重点:
- 防代理分析请求数据
- SSL证书认证
- 采用签名禁止修改报文
- 不在本地缓存网络请求报文
- 利用NSURLProtocol 拦截修改请求
I 防止抓包
1.1 防代理
#pragma mark ——— 防代理
- (BOOL)getProxyStatusWithURL:(NSString *)url {
NSDictionary *proxySettings = (__bridge_transfer NSDictionary *)(CFNetworkCopySystemProxySettings());
NSArray *proxies = (__bridge_transfer NSArray *)(CFNetworkCopyProxiesForURL((__bridge CFURLRef _Nonnull)([NSURL URLWithString:url]), (__bridge CFDictionaryRef _Nonnull)(proxySettings)));
NSDictionary *settings = [proxies objectAtIndex:0];
NSLog(@"host=%@", [settings objectForKey:(NSString *)kCFProxyHostNameKey]);
NSLog(@"port=%@", [settings objectForKey:(NSString *)kCFProxyPortNumberKey]);
NSLog(@"type=%@", [settings objectForKey:(NSString *)kCFProxyTypeKey]);
//2019-10-11 22:28:29.993974+0800 ShopList[5912:810446] type=kCFProxyTypeHTTPS
if ([[settings objectForKey:(NSString *)kCFProxyTypeKey] isEqualToString:@"kCFProxyTypeNone"]){
//没有设置代理
return NO;
}else{
//设置代理了
return YES;
}
}
1.2 app的SSL证书验证(AFNetworking证书认证)
-【 经过app的SSL证书验证之后,就是这样子,别人无法获取报文,除非服务器的证书信任Charles的证书】
[AFHTTPSessionManager manager].securityPolicy = [self customSecurityPolicyWithCertName:@"myCer2020"];
//设定安全策略未读取指定证书文件进行证书验证
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
//进行SSL证书认证
II 防止修改请求和返回数据
2.1 对请求参数进行签名
【iOS app侧对请求参数进行签名:【请求参数按照ASCII码从小到大排序、拼接、加密】(递归的方式进行实现)】
https://kunnan.blog.csdn.net/article/details/108195721
2.2 不在本地缓存网络请求报文
设置网络请求缓存策略,不在本地缓存网络请求报文
NSURLRequestReloadIgnoringLocalCacheData
NSURLRequestReloadIgnoringCacheData
connection willCacheResponse{
return nil;
}
III 利用NSURLProtocol 拦截请求
3.1 写一个tweak ,修改请求的HTTPHeaderField
原理分析文章:https://kunnan.blog.csdn.net/article/details/78083815
完整的源码请关注公号:iOS逆向:利用NSURLProtocol 拦截 UIURLConnection、NSURLSession的请求,进行HTTPHeaderField的修改
3.2 基于NSURLProtocol实现iOS应用底层所有网络请求拦截
- 基于NSURLProtocol实现iOS应用底层所有网络请求拦截(含网页ajax请求拦截【不支持WKWebView】);
RequestBlock4NSURLProtocol
应用场景:隧道APP请求我们自己接口的都不走隧道、修改请求的HTTPHeaderField,设置代理IP和端口、防抓包(使Thor,Charles,Burp等代理抓包方式全部失效)从CSDN下载Demo:https://download.csdn.net/download/u011018979/16753164
3.3 iOS APP 不走全局proxy的方案
iOS APP 不走全局proxy的方案【 例如:隧道APP的请求接口,一些自己特殊接口不走隧道】(利用NSURLProtocol 进行请求的拦截)
https://kunnan.blog.csdn.net/article/details/78147628
防抓包原理
//APP请求我们自己接口的都不走隧道
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
configuration.connectionProxyDictionary = @{};
————————————————
版权声明:本文为CSDN博主「iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/z929118967/article/details/78147628