Giter Site home page Giter Site logo

smilezxlee / zxrequestblock Goto Github PK

View Code? Open in Web Editor NEW
329.0 5.0 85.0 5.17 MB

基于NSURLProtocol一句话实现iOS应用底层所有网络请求拦截(含网页ajax请求拦截【不支持WKWebView】)、一句话实现防抓包(使Thor,Charles,Burp等代理抓包方式全部失效,且即使开启了代理,也不影响App内部的正常请求)。包含http-dns解决方法,有效防止DNS劫持。用于分析http,https请求等

License: MIT License

Objective-C 99.22% Ruby 0.78%
network network-monitoring network-security urlprotocol

zxrequestblock's Introduction

ZXRequestBlock

License MIT  CocoaPods  CocoaPods  Support 

安装

通过CocoaPods安装

pod 'ZXRequestBlock'

手动导入

  • 将ZXRequestBlock拖入项目中。

导入头文件

#import "ZXRequestBlock.h"

注意

WKWebView内的请求无效!!


使用方法

拦截全局请求

[ZXRequestBlock handleRequest:^NSURLRequest *(NSURLRequest *request) {
    //拦截回调在异步线程
    NSLog(@"拦截到请求-%@",request);
    dispatch_async(dispatch_get_main_queue(), ^{
        self.blockTv.text = [self.blockTv.text stringByAppendingString:[NSString stringWithFormat:@"拦截到请求--%@\n",request]];
    });
    //在这里可以将request赋值给可变的NSURLRequest,进行一些修改(例如根据request的url过滤单独对一些请求的请求体进行修改等)然后再return,达到修改request的目的。
    return request;
}];

拦截全局请求与响应

[ZXRequestBlock handleRequest:^NSURLRequest *(NSURLRequest *request) {
    //拦截请求处理
    return request;
} responseBlock:^NSData *(NSURLResponse *response, NSData *data) {
    //拦截响应数据
    //如果为http请求,则响应为NSHTTPURLResponse,可进行强制转换
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
    NSLog(@"拦截到响应url-%@", httpResponse.URL);
    NSLog(@"拦截到响应数据-%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
    //这里返回的data就是最终的响应数据,可以自行修改
    //可以通过[str dataUsingEncoding:NSUTF8StringEncoding];来将字符串转NSData
    return data;
}];   

防代理抓包

禁止网络代理抓包(开启后将无法通过网络代理抓包,通过Thor,Charles,Burp等均无法抓取此App的包,且在代理网络下App内部请求不受任何影响)

[ZXRequestBlock disableHttpProxy];

允许网络代理抓包【默认为允许】

[ZXRequestBlock enableHttpProxy];

注意


HTTPDNS

启用HTTPDNS(将会直接从本地或http://119.29.29.29 进行DNS解析,是一种避免DNS劫持的措施)

[ZXRequestBlock enableHttpDns];

关闭HTTPDNS【默认为关闭】

[ZXRequestBlock disableHttpDns];

禁止/恢复所有网络请求

禁止所有网络请求

[ZXRequestBlock cancelAllRequest];

恢复所有网络请求

[ZXRequestBlock resumeAllRequest];

防抓包Demo演示

zxrequestblock's People

Contributors

rtcatc avatar smilezxlee avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

zxrequestblock's Issues

大佬,能帮帮忙吗?

thor 已下架,无法购买了,给我分享账号下载一下吗?

感谢了。

买都买不到,真够难受的。

大佬

大佬你好,你的抓包代码是怎么写的,方便交流一下么?

闪退

注入测试了。会导致有些APP闪退

crash

image

你好,我们这边有crash,能从这看出什么吗

代码卡顿

网页重定向时,返回卡顿延迟严重!代码执行如下,作者可以测一下
//网页重定向

  • (void)urlChange:(NSString*)urlStr
    {
    NSURLRequest * request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:urlStr]];
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:config
    delegate:self
    delegateQueue:[NSOperationQueue mainQueue]];
    NSURLSessionDataTask * task = [session dataTaskWithRequest:request];
    [task resume];
    }

开启防代理抓包云信im消息图片 语音 发送失败

Task <33422CEA-CA34-4031-92C2-49A16CF59C23>.<1> finished with error [-1202] Error Domain=NSURLErrorDomain Code=-1202 "此服务器的证书无效。您可能正在连接到一个伪装成“45.127.129.8”的服务器,这会威胁到您的机密信息的安全。" UserInfo={NSLocalizedRecoverySuggestion=您仍要连接此服务器吗?, _kCFStreamErrorDomainKey=3, NSErrorPeerCertificateChainKey= (
<cert(0x1130a4400) s: *.127.net i: GeoTrust CN RSA CA G1>,
<cert(0x1130a4e00) s: GeoTrust CN RSA CA G1 i: DigiCert Global Root CA>,
), NSErrorClientCertificateStateKey=0, NSErrorFailingURLKey=https://45.127.129.8/nim/MTY4MzY2Mzg%3D%2FbmltYV8yMTg2NTQxNzc0NV8xNjA1OTMwMjM4MjM1XzBlZDJkOTUzLTY1MjktNGRlYy05NDJmLTk0OGExN2MzYmIwYQ%3D%3D?offset=0&complete=true&version=1.0, NSErrorFailingURLStringKey=https://45.127.129.8/nim/MTY4MzY2Mzg%3D%2FbmltYV8yMTg2NTQxNzc0NV8xNjA1OTMwMjM4MjM1XzBlZDJkOTUzLTY1MjktNGRlYy05NDJmLTk0OGExN2MzYmIwYQ%3D%3D?offset=0&complete=true&version=1.0, NSUnderlyingError=0x13df4d990 {Error Domain=kCFErrorDomainCFNetwork Code=-1202 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x13d0a9d30>, _kCFNetworkCFStreamSSLErrorOriginalValue=-9843, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9843, kCFStreamPropertySSLPeerCertificates= (
<cert(0x1130a4400) s: *.127.net i: GeoTrust CN RSA CA G1>,
<cert(0x1130a4e00) s: GeoTrust CN RSA CA G1 i: DigiCert Global Root CA>,
)}}, _NSURLErrorRelatedURLSessionTaskErrorKey= (
"LocalDataTask <33422CEA-CA34-4031-92C2-49A16CF59C23>.<1>",
), _kCFStreamErrorCodeKey=-9843, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <33422CEA-CA34-4031-92C2-49A16CF59C23>.<1>, NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x13d0a9d30>, NSLocalizedDescription=此服务器的证书无效。您可能正在连接到一个伪装成“45.127.129.8”的服务器,这会威胁到您的机密信息的安全。}

最好在代码中加入#if #else #endif的宏,否则影响调试.

影响到了React Native iOS的调试.

static BOOL isDisableHttpProxy = NO;
@implementation NSURLSession (ZXHttpProxy)
+(void)load{
    [super load];
#if DEBUG
#else
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        [NSURLProtocol registerClass:[ZXURLProtocol class]];
        Class class = [NSURLSession class];
        [self swizzingMethodWithClass:class orgSel:NSSelectorFromString(@"sessionWithConfiguration:") swiSel:NSSelectorFromString(@"zx_sessionWithConfiguration:")];
        [self swizzingMethodWithClass:class orgSel:NSSelectorFromString(@"sessionWithConfiguration:delegate:delegateQueue:") swiSel:NSSelectorFromString(@"zx_sessionWithConfiguration:delegate:delegateQueue:")];
    });
#endif
}

crash 原因-[NSURLSessionConfiguration disposition] unrecognized selector

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSURLSessionConfiguration disposition]: unrecognized selector sent to instance 0x2839e96c0'
*** First throw call stack:
(0x1bcd1498c 0x1bca3d0a4 0x1bcc1843c 0x1bcd18e08 0x1bcd1abec 0x1bff0ede4 0x10d508380 0x10d508468 0x105dbd160 0x1bca44ecc 0x10767a0d4 0x10768958c 0x107688308 0x1076883d0 0x10767a420 0x10767edb4 0x107679208 0x107679038)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.