iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >IOS怎么防止抓包
  • 887
分享到

IOS怎么防止抓包

2023-06-15 09:06:44 887人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关iOS怎么防止抓包的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。抓包原理其实原理很是简单:一般抓包都是通过代理服务来冒充你的服务器,客户端真正交互的是这个假冒的代理服务,这个假冒的服务再

这篇文章给大家分享的是有关iOS怎么防止抓包的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

抓包原理

其实原理很是简单:一般抓包都是通过代理服务来冒充你的服务器,客户端真正交互的是这个假冒的代理服务,这个假冒的服务再和我们真正的服务交互,这个代理就是一个中间者 ,我们所有的数据都会通过这个中间者,所以我们的数据就会被抓取。https 也同样会被这个中间者伪造的证书来获取我们加密的数据。

防止抓包

为了数据的更安全,那么我们如何来防止被抓包。

第一种思路是:如果我们能判断是否有代理,有代理那么就存在风险。

第二种思路:针对HttpS 请求。我们判断证书的合法性。

第一种方式的实现:

一、发起请求之前判断是否存在代理,存在代理就直接返回,请求失败。

CFDictionaryRef dicRef = CFNetworkCopySystemProxySettings();CFStringRef proxyStr = CFDictionaryGetValue(dicRef, kCFNetworkProxiesHTTPProxy);NSString *proxy = (__bridge NSString *)(proxyStr);
+ (BOOL)getProxyStatus {    NSDictionary *proxySettings = NSMakeCollectable([(NSDictionary *)CFNetworkCopySystemProxySettings() autorelease]);    NSArray *proxies = NSMakeCollectable([(NSArray *)CFNetworkCopyProxiesForURL((CFURLRef)[NSURL URLWithString:@"http://www.baidu.com"], (CFDictionaryRef)proxySettings) autorelease]);    NSDictionary *settings = [proxies objectAtIndex:0];        NSLog(@"host=%@", [settings objectForKey:(NSString *)kCFProxyHostNameKey]);    NSLog(@"port=%@", [settings objectForKey:(NSString *)kCFProxyPortNumberKey]);    NSLog(@"type=%@", [settings objectForKey:(NSString *)kCFProxyTypeKey]);        if ([[settings objectForKey:(NSString *)kCFProxyTypeKey] isEqualToString:@"kCFProxyTypeNone"])    {        //没有设置代理        return NO;    }    else    {        //设置代理了        return YES;    }}

二、我们可以在请求配置中清空代理,让请求不走代理

我们通过hook到sessionWithConfiguration: 方法。然后清空代理

+ (void)load{  Method method1 = class_getClaSSMethod([NSURLSession class],@selector(sessionWithConfiguration:));  Method method2 = class_getClassMethod([NSURLSession class],@selector(px_sessionWithConfiguration:));  method_exchangeImplementations(method1, method2);  Method method3 = class_getClassMethod([NSURLSession class],@selector(sessionWithConfiguration:delegate:delegateQueue:));  Method method4 = class_getClassMethod([NSURLSession class],@selector(px_sessionWithConfiguration:delegate:delegateQueue:));  method_exchangeImplementations(method3, method4);}+ (NSURLSession*)px_sessionWithConfiguration:(NSURLSessionConfiguration*)configuration delegate:(nullable id)delegate delegateQueue:(nullable NSOperationQueue*)queue{      if(configuration) configuration.connectionProxyDictionary = @{};  return [self px_sessionWithConfiguration:configuration delegate:delegate delegateQueue:queue];}+ (NSURLSession*)px_sessionWithConfiguration:(NSURLSessionConfiguration*)configuration{      if(configuration) configuration.connectionProxyDictionary = @{};  return [self px_sessionWithConfiguration:configuration];}

第二种思路的实现:

主要是针对HTTPS 请求,对证书的一个验证。

通过 SecTrustRef 获取服务端证书的内容

static NSArray * AFCertificateTrustChainForServerTrust(SecTrustRef serverTrust) {   CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust);   NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount];   for (CFIndex i = 0; i < certificateCount; i++) {       SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i);       [trustChain addObject:(__bridge_transfer NSData *)SecCertificateCopyData(certificate)];   }   return [NSArray arrayWithArray:trustChain];}

然后读取本地证书的内容进行对比

NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"certificate" ofType:@"cer"];//证书的路径NSData *certData = [NSData dataWithContentsOfFile:cerPath];SSet<NSData*> * set = [[NSSet alloc]initWithObjects:certData  , nil];  // 本地证书内容// 服务端证书内容NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust);for (NSData *trustChainCertificate in [serverCertificates reverseObjectEnumerator]) {    if ([set containsObject:trustChainCertificate]) {        // 证书验证通过    }}

SSL Pinning(AFN+SSL Pinning)推荐

SSL Pinning,即SSL证书绑定。通过SSL证书绑定来验证服务器身份,防止应用被抓包。

取到证书

客户端需要证书(Certification file), .cer格式的文件。可以跟服务器端索取。

如果他们给个.pem文件,要使用命令行转换:

openssl x509 -infORM PEM -in name.pem -outform DER -out name.cer

如果给了个.crt文件,请这样转换:

openssl x509 -in name.crt -out name.cer -outform der

如果啥都不给你,你只能自己动手了:

openssl s_client -connect www.WEBsite.com:443 </dev/null 2>/dev/null | openssl x509 -outform DER > myWebsite.cer**

把证书加进项目

把生成的.cer证书文件直接拖到你项目的相关文件夹中,记得勾选Copy items if neede和Add to targets。

参数名意思

AFSecurityPolicy

SSLPinningMode

AFSecurityPolicy是AFNetworking中网络通信安全策略模块。它提供三种SSL Pinning Mode

AFSSLPinningModeNone:完全信任服务器证书;

AFSSLPinningModePublicKey:只比对服务器证书和本地证书的Public Key是否一致,如果一致则信任服务器证书;

AFSSLPinningModeCertificate:比对服务器证书和本地证书的所有内容,完全一致则信任服务器证书;

选择那种模式呢?

AFSSLPinningModeCertificate:最安全的比对模式。但是也比较麻烦,因为证书是打包在APP中,如果服务器证书改变或者到期,旧版本无法使用了,我们就需要用户更新APP来使用最新的证书。

AFSSLPinningModePublicKey:只比对证书的Public Key,只要Public Key没有改变,证书的其他变动都不会影响使用。
如果你不能保证你的用户总是使用你的APP的最新版本,所以我们使用AFSSLPinningModePublicKey。

allowInvalidCertificates

@property (nonatomic, assign) BOOL allowInvalidCertificates;

是否信任非法证书,默认是NO。

validatesDomainName

@property (nonatomic, assign) BOOL validatesDomainName;

是否校验证书中DomainName字段,它可能是IP,域名如*.Google.com,默认为YES,严格保证安全性。

使用AFSecurityPolicy设置SLL Pinning

+ (AFHTTPSessionManager *)manager{    static AFHTTPSessionManager *manager = nil;    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{            NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];        manager =  [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];        AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey withPinnedCertificates:[AFSecurityPolicy certificatesInBundle:[NSBundle mainBundle]]];        manager.securityPolicy = securityPolicy;    });    return manager;}

扩展

Android 防止抓包

单个接口访问不带代理的

URL url = new URL(urlStr);  urlConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);

OkHttp框架

OkHttpClient client = new OkHttpClient().newBuilder().proxy(Proxy.NO_PROXY).build();

感谢各位的阅读!关于“IOS怎么防止抓包”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: IOS怎么防止抓包

本文链接: https://www.lsjlt.com/news/279336.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • IOS怎么防止抓包
    这篇文章给大家分享的是有关IOS怎么防止抓包的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。抓包原理其实原理很是简单:一般抓包都是通过代理服务来冒充你的服务器,客户端真正交互的是这个假冒的代理服务,这个假冒的服务再...
    99+
    2023-06-15
  • Android App怎么防止抓包
    本篇内容主要讲解“Android App怎么防止抓包”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android App怎么防止抓包”吧!正文当我们进行网络请求的时候,一般通...
    99+
    2023-06-29
  • AndroidApp如何防止抓包
    目录前言正文补充:使用证书校验总结前言 App安全非常重要,尤其是数据安全。但是我们知道通过Charles等工具可以对App的网络请求进行抓包,如果我们的数据没有进行加密,这样这些信...
    99+
    2024-04-02
  • iOS怎么防止dns劫持
    iOS中防止dns劫持的方法首先,在iOS中打开“设置”应用程序;进入到设置页面后,点击“无线局域网”设置;在无线局域网设置中,找到已连接的WiFi,并点击WiFi后面的符号;进入Wi-Fi网络详情页面后,在页面中找到“dns”选项;最后,...
    99+
    2024-04-02
  • IOS - 抓包通杀篇
    IOS中大多数情况,开发者都会使用OC提供的api函数,CFNetworkCopySystemProxySettings来进行代理检测; CFNetworkCopySystemProxySettings 检测函数直接会检测这些ip和端口...
    99+
    2023-08-16
    ios javascript 开发语言
  • IOS 手机抓包 频繁 访问 gateway.icloud.com.cn:443
    在抓包的时候,有时候苹果手机在重启后频繁出现gateway.icloud.com.cn:443请求 这种情况需要在手机上进行设置,适用于IOS16.0以上版本,其他版本不清楚,没有尝试过 进入  设置--点击AppleID ,进入个人...
    99+
    2023-08-31
    ios 智能手机 gateway 抓包
  • Android Charles抓包,怎样抓包
    Android端Charles抓包 作者:杨充 来源:https://juejin.cn/post/6874903020677791758 目录介绍 01.下载安装02.抓包代理设置03.抓包Https操作04.抓包原理介绍05.抓包...
    99+
    2023-08-16
    android java 网络
  • Fiddler抓取IOS数据包实践教程
    Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。 本章教程,主要介绍如何利用Fid...
    99+
    2023-09-01
    fiddler 前端 测试工具
  • 【MAC、IOS】charles抓包配置教程,亲测有效
    环境:mac ios 1.电脑端设置 在电脑端下载完charles后,默认情况下应该就可以抓HTTP的包,但如果想抓取HTTPS的需要进行额外的设置。 第一步,如下图所示安装mac端的证书,会让你添加钥匙串的访问,筛选一下证书查询到char...
    99+
    2023-08-31
    单元测试 测试用例 程序人生 软件测试 自动化测试
  • 怎么实现Charles抓包
    这篇文章主要介绍“怎么实现Charles抓包”,在日常操作中,相信很多人在怎么实现Charles抓包问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么实现Charles抓包”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-04
  • 抓包工具tcpdump怎么用
    小编给大家分享一下抓包工具tcpdump怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现...
    99+
    2023-06-15
  • wireshark抓包数据怎么看
    要查看Wireshark抓取的包数据,可以按照以下步骤进行:1. 打开Wireshark软件,并选择一个网络接口开始抓包。2. Wi...
    99+
    2023-09-27
    wireshark
  • 怎么使用wireshark usb抓包
    要使用Wireshark进行USB抓包,您可以按照以下步骤操作:1. 下载并安装Wireshark软件。您可以从官方网站(https...
    99+
    2023-10-19
    wireshark
  • fiddler抓包抓不到关键数据怎么解决
    如果Fiddler无法捕获到关键数据,可能有以下几种原因和解决方法:1. 应用程序使用了HTTPS协议进行通信:Fiddler默认只...
    99+
    2023-09-21
    fiddler
  • linux怎么防止ddos2017
    linux防止ddos2017的方法:借助ddos deflate来防止/减轻类DDOS攻击,安装方法:在终端输入以下命令:wget http://www.inetbase.com/scripts/ddos/install.shchmod ...
    99+
    2024-04-02
  • 【APP爬虫-抓包篇】巧妙使用工具与技巧绕过安卓APP抓包防护
    文章目录 1. 写在前面 2. 代理检测绕过 2.1. Postern 2.2. Drony 2.3. ProxyDroid 2.4. HttpCana...
    99+
    2024-01-21
    android APP抓包 移动安全
  • 怎么防止SQL注入
    这篇文章主要介绍了怎么防止SQL注入,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SQL注入即是指web应用程序对用户输入数据的合法性没有判...
    99+
    2024-04-02
  • 怎么防止XSS漏洞
    这篇文章主要介绍了怎么防止XSS漏洞,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。XSS攻击可用于获得对特权信息的访问,本文讲的就是应对它们的方法。美国国土安全部(Depar...
    99+
    2023-06-17
  • mysql怎么防止死锁
    这篇文章主要介绍“mysql怎么防止死锁”,在日常操作中,相信很多人在mysql怎么防止死锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql怎么防止死锁”的疑惑有所帮...
    99+
    2024-04-02
  • Linux下抓包工具tcpdump怎么样
    这篇文章主要介绍了Linux下抓包工具tcpdump怎么样,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最...
    99+
    2023-06-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作