前提 : 有时会遇到这样的需求:将一些别人app上比较优质的内容,用到自己产品中.由于别人的app做了大量的参数加密, 我们获取不到加密规则,所以使用接口直接调用的方法就走不通.
本文就是要介绍使用逆向技术拦截目标app的所有网络请求.对于我们需要的接口数据上传到我们自己的服务器中
工具:
monkeyDev
PPSNetworkMonitor开源库中的代码
代码如下:
PPSURLSessionConfiguration.h
@interface PPSURLSessionConfiguration : NSObject
@property (nonatomic,assign) BOOL isSwizzle;
+ (PPSURLSessionConfiguration *)defaultConfiguration;
/**
* swizzle NSURLSessionConfiguration's protocolClasses method
*/
- (void)load;
/**
* make NSURLSessionConfiguration's protocolClasses method is normal
*/
- (void)unload;
@end
PPSURLSessionConfiguration.m
#import "PPSURLSessionConfiguration.h"
#import
#import "PPSURLProtocol.h"
@implementation PPSURLSessionConfiguration
+ (PPSURLSessionConfiguration *)defaultConfiguration {
static PPSURLSessionConfiguration *staticConfiguration;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
staticConfiguration=[[PPSURLSessionConfiguration alloc] init];
});
return staticConfiguration;
}
- (instancetype)init {
self = [super init];
if (self) {
self.isSwizzle=NO;
}
return self;
}
- (void)load {
self.isSwizzle=YES;
Class cls = NSClassFromString(@"__NSCFURLSessionConfiguration") ?: NSClassFromString(@"NSURLSessionConfiguration");
[self swizzleSelector:@selector(protocolClasses) fromClass:cls toClass:[self class]];
}
- (void)unload {
self.isSwizzle=NO;
Class cls = NSClassFromString(@"__NSCFURLSessionConfiguration") ?: NSClassFromString(@"NSURLSessionConfiguration");
[self swizzleSelector:@selector(protocolClasses) fromClass:cls toClass:[self class]];