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

简介: 很久没碰iOS开发了,最近都在web前端持续输出,加了很多推文群,每次群发文章的时候都要受到这个最多只能选择9个聊天的限制。很不爽,好歹我也曾是一名iOS开发者呀,弄它~

必备软件


  • class-dump


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


  • MonkeyDev


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


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


image.png


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


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


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


image.png


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


image.png


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


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


image.png


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


image.png


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


image.png


先记住这两个信息


  • 函数名叫onShowMutilSelct


  • 所在类名叫SessionSelectController


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


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


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


image.png


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


image.png


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


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


第三步:上钩子改造它


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


image.png


结语


就这样,我们魔改了微信的功能,把原本微信app中的功能替换成了我们自己的实现。似乎我们没提到怎么去掉多选限制呀?其实很简单,如果你对iOS UIKit比较熟悉,就会知道,列表控制器实现的多选,每次选择时会有一个回调函数叫- (_Bool)onShouldSelectContact:(id)arg1,这个函数是一个布尔类型的返回值,也就是它决定了还能不能继续选择,我猜测9这个数量判定也是在这个函数里实现的,我们只需要替换掉它的实现,不对已选数量做判断即可


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



相关文章
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
1411 4
|
iOS开发 开发者
iOS微信分享配置universal links步骤
iOS微信分享配置universal links步骤
6843 58
|
安全 Android开发 数据安全/隐私保护
深入探讨iOS与Android系统安全性对比分析
在移动操作系统领域,iOS和Android无疑是两大巨头。本文从技术角度出发,对这两个系统的架构、安全机制以及用户隐私保护等方面进行了详细的比较分析。通过深入探讨,我们旨在揭示两个系统在安全性方面的差异,并为用户提供一些实用的安全建议。
|
开发工具 Android开发 Swift
安卓与iOS开发环境对比分析
在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统无疑是主角。它们各自拥有独特的特点和优势,为开发者提供了不同的开发环境和工具。本文将深入浅出地探讨安卓和iOS开发环境的主要差异,包括开发工具、编程语言、用户界面设计、性能优化以及市场覆盖等方面,旨在帮助初学者更好地理解两大平台的开发特点,并为他们选择合适的开发路径提供参考。通过比较分析,我们将揭示不同环境下的开发实践,以及如何根据项目需求和目标受众来选择最合适的开发平台。
221 2
企业微信批量加好友脚本,企业微信自动加手机号好友软件,自动同意群发消息自动回复
这是一款为企业微信设计的自动化营销工具,能够一键批量加好友并自动回复消息。通过模拟操作实现自动化流程,提升网络营销效率。
|
安全 Android开发 数据安全/隐私保护
深入探索Android与iOS系统安全性的对比分析
在当今数字化时代,移动操作系统的安全已成为用户和开发者共同关注的重点。本文旨在通过比较Android与iOS两大主流操作系统在安全性方面的差异,揭示两者在设计理念、权限管理、应用审核机制等方面的不同之处。我们将探讨这些差异如何影响用户的安全体验以及可能带来的风险。
963 21
|
Java 开发工具 Android开发
安卓与iOS开发环境对比分析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据半壁江山。本文深入探讨了这两个平台的开发环境,从编程语言、开发工具到用户界面设计等多个角度进行比较。通过实际案例分析和代码示例,我们旨在为开发者提供一个清晰的指南,帮助他们根据项目需求和个人偏好做出明智的选择。无论你是初涉移动开发领域的新手,还是寻求跨平台解决方案的资深开发者,这篇文章都将为你提供宝贵的信息和启示。
255 8
|
开发工具 Android开发 Swift
安卓与iOS开发环境对比分析
在移动应用开发的大舞台上,安卓与iOS两大操作系统各占半壁江山。本文将深入浅出地比较两者的开发环境,从开发工具、编程语言到用户界面设计等多个维度进行剖析,旨在为初入行的开发者们提供一盏明灯,帮助他们选择适合自己的开发路径。通过实例分析和数据支持,我们将揭示这两个平台的独特优势和潜在挑战,以及它们如何影响应用的性能和用户体验。
262 33
|
人工智能 自然语言处理 搜索推荐
评测:AI客服接入钉钉与微信的对比分析
【8月更文第22天】随着人工智能技术的发展,越来越多的企业开始尝试将AI客服集成到自己的业务流程中。本文将基于《10分钟构建AI客服并应用到网站、钉钉或微信中》的解决方案,详细评测AI客服在钉钉和微信中的接入流程及实际应用效果,并结合个人体验分享一些心得。
10723 10
|
开发工具 Android开发 Swift
安卓与iOS开发环境对比分析
在移动应用开发的广阔天地中,安卓和iOS平台如同双子星座般耀眼。本文将深入探讨这两大操作系统的开发环境,从语言、工具到生态系统,揭示它们的独特魅力与挑战。通过比较,我们不仅能更清晰地看到各自的特点,还能理解开发者如何在这两个平台上进行高效工作。无论你是安卓的忠实拥趸还是iOS的狂热粉丝,这篇文章都将为你提供一个全面的视角,让你对移动应用开发有更深的认识。
194 28