前言
第一步
首先需要一个砸过壳子的ipa包。获取砸过壳子ipa一种是通过PP助手下载,另一种则是用一台越狱手机把里面的ipa给拿出来。网上相关资料有很多。
2. 安装MonkeyDev
其实为什么安装MonkeyDev呢?MonkeyDev是集成与OpenDev的,但是OpenDev在13年就不在更新了,所以AloneMonkey就在此基础上做了进一步的更新,而且更加简单,更加傻瓜式.具体安装步骤可以查看原文博客.
安装完成之后,在新建项目的时候就会有如下的模块.
使用MonkeyDev创建动态调试工程
具体 使用 MonkeyDev 方法请参照 http://www.alonemonkey.com/2017/06/28/monkeydev/
3 编写代码
CHDeclareClass(AFHTTPSessionManager)
CHMethod5(NSURLSessionDataTask *, AFHTTPSessionManager, POST, NSString *, arg1, parameters, id, arg2, progress, id, arg3, success, id, arg4, failure, id, arg5){
NSLog(@"-------POST---当前请求地址-%@-----当前请求参数--%@",arg1,arg2);
return CHSuper5(AFHTTPSessionManager, POST, arg1, parameters, arg2, progress, arg3, success, arg4, failure, arg5);
}
CHMethod5(NSURLSessionDataTask *, AFHTTPSessionManager, GET, NSString *, arg1, parameters, id, arg2, progress, id, arg3, success, id, arg4, failure, id, arg5){
NSLog(@"----GET------当前请求地址-%@-----当前请求参数--%@",arg1,arg2);
return CHSuper5(AFHTTPSessionManager, GET, arg1, parameters, arg2, progress, arg3, success, arg4, failure, arg5);
}
CHConstructor{
CHLoadLateClass(AFHTTPSessionManager);
CHClassHook5(AFHTTPSessionManager, POST, parameters, progress, success, failure);
CHClassHook5(AFHTTPSessionManager, GET, parameters, progress, success, failure);
}
可以看到当前请求的URL 跟参数 我们当前 Hook 的的是 AFHTTPSessionManager 里面的 POST 请求与GET请求方法,很清楚的可以看到APP发送的网络请求以及参数。
image.png
image.png
5 如果二进制文件里 有集成 AFNetworking 怎么调用呢
typedef void (^afNSuccess) (NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject);
typedef void (^afNError) (NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error);
Class classAf = NSClassFromString(@"AFHTTPSessionManager");
//获取 AFHTTPSessionManager单利
NSObject *sessionManager = ((NSObject * (*)(id,SEL))objc_msgSend)((id)classAf,@selector(manager));
NSDictionary *dicSuccess = @{
};
NSString *url = @"";
((void(*)(id, SEL,NSString*,NSDictionary*, id,afNSuccess,afNError)) objc_msgSend)(sessionManager, @selector(POST:parameters:progress:success:failure:),url,dicSuccess,nil,^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject){
NSLog(@"--afNSuccess---%@",responseObject);
},^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error){
NSLog(@"--afNError---%@",error);
});
以上只是抛砖引玉,当然了也可以分析其他方法。
网友评论