手把手教你做 iOS 逆向分析,突破微信的群发多选数量限制
↓推荐关注↓
前言
很久没碰iOS开发了,最近都在web前端
持续输出,加了很多推文群,每次群发文章的时候都要受到这个最多只能选择9个聊天的限制。
很不爽,好歹我也曾是一名iOS开发者呀,弄它~
必备软件
class-dump
class-dump是进行iOS逆向开发常用的一款工具,其主要作用是导出App的头文件内容。根据这些头文件可以大致分析出APP的结构和内容
MonkeyDev
MonkeyDev是一个极为方便的逆向调试平台,集众家所长
一般来说我们要通过以下步骤,才可以在没有源码的情况下,更改一个APP的功能。
而MonkeyDev
把红框中的三步都封装了,非常简单暴li。我们站在MonkeyDev的肩膀上,只需要准备一个砸壳后的ipa
或者app
文件即可,只需要去分析微信APP的头文件,然后hook原方法即可。当然说起来很容易,我带大家一起来看看这个过程
第一步:找到功能所在位置
首先根据MonkeyDev
的说明,把砸壳后的ipa
文件放到TargetApp
目录下
然后连接你的iOS设备,点击运行。注意,只能运行到真机上
这时候如果你更改了bundleid
,那么你就已经得到了一个可以多开的微信了。但我们不只是想要多开这么简单,我们还需要加强微信的一些能力。
等APP在手机上打开后,我们就可以在XCode中使用debug view hierarchy
功能来调试视图
进入我们想要调查的转发分享界面,然后开启debug view hierarchy
,我们就可以把当前所在界面的视图层次结构看得一清二楚
显然在我开篇提到的需求中,我是想更改多选功能的,那么我们选中多选按钮,可以看到这个按钮绑定的方法叫onMutilSelect
,该方法定义在SessionSelectController
这个类中
先记住这两个信息
函数名叫 onShowMutilSelct
所在类名叫 SessionSelectController
第二步:提取应用全部的头文件
class-dump -s -S -H /Users/ezshine/Work/Playgrounds/DKWechatHelper/dkhelper/dkhelper/TargetApp/WeChat.app -o ~/Downloads/wxheaders
安装好class-dump
并使用上述命令将应用中所有的头文件都提取出来
我们可以看到,微信App的实现用到了2.3w
个类,我们用sublime
打开它,并且从已打开的文件及文件夹中搜索onMutilSelect
果不其然吧!被揪出来了!
在SessionSelectController
的头文件中找到了onShowMutilSelect
方法的定义,我们先给它上个hook
,也就是当这个方法被执行时,不再执行原方法实现,而是执行我们自己的实现。
第三步:上钩子改造它
在MonkeyDev
仓库的Logos文件夹中,找到dkhelperDylib.xm
文件,添加如下内容
%hook SessionSelectController
- (void)onShowMultiSelect:(id)arg1
{
UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"我自己的弹窗" message:@"" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* action = [UIAlertAction actionWithTitle:@"你牛逼" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }];
[alert addAction:action];
[(UIViewController*)self presentViewController:alert animated:true completion:nil];
}
%end
TADA!!!!完成,这个时候再点击多选
按钮,竟然弹出了我们自己的弹窗。我们的实现替换掉了原来多选按钮的功能!
结语
就这样,我们魔改了微信的功能,把原本微信app中的功能替换成了我们自己的实现。似乎我们没提到怎么去掉多选限制呀?
其实很简单,如果你对iOS UIKit比较熟悉,就会知道,列表控制器实现的多选,每次选择时会有一个回调函数叫- (_Bool)onShouldSelectContact:(id)arg1
,这个函数是一个布尔类型的返回值,也就是它决定了还能不能继续选择,我猜测9
这个数量判定也是在这个函数里实现的,我们只需要替换掉它的实现,不对已选数量做判断即可
%hook SessionSelectController
- (_Bool)onShouldSelectContact:(id)arg1
{
return YES;
}
%end
逆向所使用的github仓库地址:
github.com/DKJone/DKWechatHelper
转自:掘金 大帅老猿
https://juejin.cn/post/7006067681350647844
- EOF -
看完本文有收获?请分享给更多人
关注「 iOS大全 」加星标,关注 iOS 动态
点赞和在看就是最大的支持❤️