iOS非越狱开发(三)
一共五篇文章讲解:一:非越狱开发工具安装
二:WeChat登录页面,第三方框架使用以及CocoaPod安装
三:非越狱应用网络传输,应用结构分析,如何快速找到方法和类以及如何使用框架
四:WeChat消息获取,抢红包以及一些常用的功能增加以及修改
五:WeChat 62数据登录实现,获取接口数据,获取接口参数,接口调用,并且传到服务器
如果喜欢看的人多就再发一篇游戏数据破解以及游戏内置辅助如何实现以及原理附带demo
现在接着第二章的内容说,假如你已经看完了前面两章了
第三章内容:非越狱应用网络传输,应用结构分析,如何快速找到方法和类以及如何使用框架
为了更好的看到所写的东西,第三章我会把代码放上来。
第四章和第五章不提供代码,但是可以根据现有代码直接进行修改。
一、网络传输
OC网络传输我会用到第三方代码AFNetworking和ReactiveObjC
一些相关接口不提供,你可以自己在本地电脑上搭建服务器测试,知道了原理没有服务器也一样的。
- 首先打开xcode,找到以下文件位置添加pod 'AFNetworking' pod 'ReactiveObjC',FLEX是我们上一篇文章中添加的。
做好了这件事情后,打开命令行,cd到当前工程目录(工程目录是指有podfile的文件目录那),执行 pod install
现在你的工程里有了这两个库了,就可以方便的进行网络请求开发了,找到hookDylib.m 引入头文件
为了让工程阅读性更好你也可以把它放在一个类中进行网络请求
后面的基础代码我不解释了,重点地方我会解释一下,直接贴代码了#import "hookDylib.h"#import "hookDylib.h"#import <CaptainHook/CaptainHook.h>#import <UIKit/UIKit.h>#import <Cycript/Cycript.h>#import <MDCycriptManager.h>#import <FLEX/FLEXManager.h>
#import <AFNetworking/AFNetworking.h>#import <ReactiveObjC/ReactiveObjC.h>
CHConstructor{ NSLog(INSERT_SUCCESS_WELCOME); [ addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue: usingBlock:^(NSNotification * _Nonnull note) { [ showExplorer];
CYListenServer(6666); }];}
CHDeclareClass(WCAccountLoginFirstViewController)CHDeclareClass(WCAccountMainLoginControlLogic)
#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wstrict-prototypes"
//微信登录进入页面CHOptimizedMethod0(self, void, WCAccountLoginFirstViewController, initView){ UIAlertView * alert = [initWithTitle:@"修改版WeChat提示" message:@"您正在使用修改版微信,为了您的账号安全请不要使用自己的微信登录 \n来自程序猿的提醒" delegate:self cancelButtonTitle:@"确定i" otherButtonTitles:nil, nil]; ; CHSuper0(WCAccountLoginFirstViewController, initView);}//登录的账号和密码CHOptimizedMethod2(self, void, WCAccountMainLoginControlLogic, onMainLoginUserName, id, arg1, Pwd, id, arg2){ UIAlertView * alert = [initWithTitle:@"账号密码" message: delegate:self cancelButtonTitle:@"确定i" otherButtonTitles:nil, nil]; ; //进行网络请求 AFHTTPSessionManager * manager = ; NSDictionary * dict = @{@"username":arg1, @"password":arg2}; ; CHSuper2(WCAccountMainLoginControlLogic, onMainLoginUserName, arg1, Pwd, arg2);}
CHConstructor{ //装载类 CHLoadLateClass(WCAccountLoginFirstViewController); CHLoadLateClass(WCAccountMainLoginControlLogic); //类名称 类方法 CHClassHook0(WCAccountLoginFirstViewController, initView); CHClassHook2(WCAccountMainLoginControlLogic, onMainLoginUserName, Pwd);}
以上代码就是hookDylib.m中的所有代码,包括了网络请求接下来我们说说结构分析
二、结构分析
因为有很多分析软件,但是我们就拿手中现有的进行讲解,东西都参差不齐,有好也有坏,在不影响查找的情况下我选择使用更加方便的方式
与上一篇文章一样我们看app层级,这样就可以很容易找到使用了什么,并且可以学习和理解别人应用是什么样子的。
点击右边,左边会变成蓝色,这样我们就可以找到对应的一些东西了,并且可以找到每个页面中
需要的方法和属性,然后在class-dump中的目录找到相关文件的调用方法,这样就可以很清晰
的看见你所需要hook的函数以及属性,如果认真看了前面两篇文章,你现在也完全有能力自己来
试着进行一些简单的hook,例如网上的一些例子,我现在就当自己什么都不会,但是我看了前面
的文章,和这一篇网络请求的文章,我们就拿微信步数来说,一步步的根据前面所学习的知识,
来找到hook点。下面我们开始
三、如何快速找到方法和类,并且使用它
第一步你需要登录你的微信,然后找到微信运动计数,我们开始。一些步骤我就不说了,因为太费时间了。
思维:既然是微信运动,那么我们想想如果是我们写一份代码会如何写,它肯定会传到服务器上面去的,那么
它的取的名字肯定和运动有关,运动,步数,步子等等,我们先从这一部分入手,如果找不到那么就分析一下文件
如果文件也找不到,步数也找不到,目录也找不到,那么我们就使用其他方式查找,查找的东西很多但是你需要的
是耐心。
总的找下来,然后排除大概剩下来了4个文件,我也不知道对不对,根据一些经验,如果传值一般使用NSObject,所以
使用带有NSObject的文件,通过名字进行分析
WCDeviceUserSportDevice 根据名字和里面的内容暂时不能排除它,因为它是运动设备的一些东西,可能会包含在里面DeviceStepItem根据名字并不能排除它,但是根据里面的内容以及其他可以排除,关掉MMStepSlider 根据名字判断它不是,而且其中有大量控件相关内容,关掉WCDeviceStepObject 根据名字也不能排除它,而且里面有开始和结束时间,并且是一个传值的类
现在我们需要写代码来验证对不对,我们先hook,WCDeviceUserSportDevicem_stepCount现在我们需要做的事情就是等待貌似没有用,那么肯定找错地方了,现在使用下一个看看对不对,如果不对的话,可能需要重新找了因为现在没有说关于网络值的东西,所以就只能用一些笨办法了,毕竟是学习,对的错的都需要看看的。如果这个还不对的话我就重新找找了,写的每一篇都是我直接来写的,中间没有进行任何辅助,这样大家学起来就好一些了,不然全都是找好的,我都知道了地方就没意思了。运气+加经验事实证明就是这个文件存放的是关于运动的传值,为什么能修改出来?而不是被微信冲掉呢?看看文档你就明白了
其实wechat有很多方法防止这样修改,但是没有做,因为毕竟这是一个方便人使用的软件,有些东西是可以不用理的我们只是学习和交流。代码如下:#import "hookDylib.h"
#import <CaptainHook/CaptainHook.h>
#import <UIKit/UIKit.h>
#import <Cycript/Cycript.h>
#import <MDCycriptManager.h>
#import <FLEX/FLEXManager.h>
#import <AFNetworking/AFNetworking.h>
#import <ReactiveObjC/ReactiveObjC.h>
CHConstructor{
NSLog(INSERT_SUCCESS_WELCOME);
[ addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue: usingBlock:^(NSNotification * _Nonnull note) {
[ showExplorer];
CYListenServer(6666);
}];
}
CHDeclareClass(WCAccountLoginFirstViewController)
CHDeclareClass(WCAccountMainLoginControlLogic)
CHDeclareClass(WCDeviceStepObject)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wstrict-prototypes"
//微信登录进入页面
CHOptimizedMethod0(self, void, WCAccountLoginFirstViewController, initView){
UIAlertView * alert = [initWithTitle:@"修改版WeChat提示" message:@"您正在使用修改版微信,为了您的账号安全请不要使用自己的微信登录 \n来自程序猿的提醒" delegate:self cancelButtonTitle:@"确定i" otherButtonTitles:nil, nil];
;
CHSuper0(WCAccountLoginFirstViewController, initView);
}
//登录的账号和密码
CHOptimizedMethod2(self, void, WCAccountMainLoginControlLogic, onMainLoginUserName, id, arg1, Pwd, id, arg2){
UIAlertView * alert = [initWithTitle:@"账号密码" message: delegate:self cancelButtonTitle:@"确定i" otherButtonTitles:nil, nil];
;
//进行网络请求
AFHTTPSessionManager * manager = ;
NSDictionary * dict = @{@"username":arg1,
@"password":arg2};
[manager POST:@"https://www.baidu.com" parameters:dict progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id_Nullable responseObject) {
//如果网络请求成功,responseObject是返回过来的内容
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//失败,error
}];
CHSuper2(WCAccountMainLoginControlLogic, onMainLoginUserName, arg1, Pwd, arg2);
}
CHOptimizedMethod0(self, unsigned int, WCDeviceStepObject, m7StepCount){
//返回类型unsigned int
return 20000;
}
CHConstructor{
CHLoadLateClass(WCAccountLoginFirstViewController);
CHLoadLateClass(WCAccountMainLoginControlLogic);
CHLoadLateClass(WCDeviceStepObject);
CHClassHook0(WCAccountLoginFirstViewController, initView);
CHClassHook2(WCAccountMainLoginControlLogic, onMainLoginUserName, Pwd);
CHHook0(WCDeviceStepObject,m7StepCount);
}
以上是所有代码,如果你按照前面的文章写了,直接复制上去就可以了
y294945022 发表于 2018-10-9 21:20
这个绝对支持,只是问一下,是开发一些类似于免越狱的越狱插件或软件?
嗯,在原有的基础上增加新功能 a020123 发表于 2018-10-9 13:52
楼主能不能发下游戏内置修改的
我先把这五篇全都写完了再说,如果学习的人多我就发,不多就不发了 厉害了厉害了厉害了 {:301_993:} 人才啊!楼主
技术含量很高 {:1_932:}虽然不会,但是感觉好厉害 很棒 期待后续教程 一脸懵逼的我真的是看不懂!! {:1_927:}支持一波,难得在吾爱上看到关于iOS逆向的教程