手把手教你做 iOS 逆向分析,突破微信的群发多选数量限制

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

作者丨大帅老猿

转自:掘金 

https://juejin.cn/post/7006067681350647844

前言

很久没碰iOS开发了,最近都在web前端持续输出,加了很多推文群,每次群发文章的时候都要受到这个最多只能选择9个聊天的限制。

d0e15bc5a4feb22f14e651eeff8b3fd8.png

很不爽,好歹我也曾是一名iOS开发者呀,弄它~

b228712a6d8ebc19d1e08f034e6159fe.png

必备软件

  • class-dump

class-dump是进行iOS逆向开发常用的一款工具,其主要作用是导出App的头文件内容。根据这些头文件可以大致分析出APP的结构和内容

  • MonkeyDev

MonkeyDev是一个极为方便的逆向调试平台,集众家所长

一般来说我们要通过以下步骤,才可以在没有源码的情况下,更改一个APP的功能。

e622f7c0f79766a5c6842b574ec3f927.png

MonkeyDev把红框中的三步都封装了,非常简单暴li。我们站在MonkeyDev的肩膀上,只需要准备一个砸壳后的ipa或者app文件即可,只需要去分析微信APP的头文件,然后hook原方法即可。当然说起来很容易,我带大家一起来看看这个过程

第一步:找到功能所在位置

首先根据MonkeyDev的说明,把砸壳后的ipa文件放到TargetApp目录下

7bde24687094992b5031f3e2c38cc0eb.png

然后连接你的iOS设备,点击运行。注意,只能运行到真机上

3ea70a18c1cfb374c0af6c320ca96b32.png

这时候如果你更改了bundleid,那么你就已经得到了一个可以多开的微信了。但我们不只是想要多开这么简单,我们还需要加强微信的一些能力。

等APP在手机上打开后,我们就可以在XCode中使用debug view hierarchy功能来调试视图

a70dd33f8d898649c4a7875761528b80.png

进入我们想要调查的转发分享界面,然后开启debug view hierarchy,我们就可以把当前所在界面的视图层次结构看得一清二楚

c77613451f1ce3ddb38568e6a16f8cb2.png

显然在我开篇提到的需求中,我是想更改多选功能的,那么我们选中多选按钮,可以看到这个按钮绑定的方法叫onMutilSelect,该方法定义在SessionSelectController这个类中

930de8fa795a01808710651f030ccae7.png

先记住这两个信息

  • 函数名叫onShowMutilSelct

  • 所在类名叫SessionSelectController

第二步:提取应用全部的头文件

class-dump -s -S -H /Users/ezshine/Work/Playgrounds/DKWechatHelper/dkhelper/dkhelper/TargetApp/WeChat.app -o ~/Downloads/wxheaders

安装好class-dump并使用上述命令将应用中所有的头文件都提取出来

d9b38347fbeeb22922510a71fd968cc6.png

我们可以看到,微信App的实现用到了2.3w个类,我们用sublime打开它,并且从已打开的文件及文件夹中搜索onMutilSelect

05946c6a43c2847adb2c35f0b91fb8e1.png

果不其然吧!被揪出来了!

SessionSelectController的头文件中找到了onShowMutilSelect方法的定义,我们先给它上个hook,也就是当这个方法被执行时,不再执行原方法实现,而是执行我们自己的实现。

第三步:上钩子改造它

448b56f7a49e51e94ad64fb25bbdef21.png

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!!!!完成,这个时候再点击多选按钮,竟然弹出了我们自己的弹窗。我们的实现替换掉了原来多选按钮的功能!

3460e60c99a9bbaa81efcd20eab7bbcd.png

结语

就这样,我们魔改了微信的功能,把原本微信app中的功能替换成了我们自己的实现。似乎我们没提到怎么去掉多选限制呀?

其实很简单,如果你对iOS UIKit比较熟悉,就会知道,列表控制器实现的多选,每次选择时会有一个回调函数叫- (_Bool)onShouldSelectContact:(id)arg1,这个函数是一个布尔类型的返回值,也就是它决定了还能不能继续选择,我猜测9这个数量判定也是在这个函数里实现的,我们只需要替换掉它的实现,不对已选数量做判断即可

%hook SessionSelectController

- (_Bool)onShouldSelectContact:(id)arg1
{
    return YES;
}

%end
8e1f7159d5c023a022986a1abad3a577.png

逆向所使用的github仓库地址:
github.com/DKJone/DKWechatHelper

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

e83b4460313be9648492839ff2d3f607.png

点击👆卡片,关注后回复【面试题】即可获取

在看点这里9dd935a65bbfa367f3b62456e9284ad4.gif好文分享给更多人↓↓

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值