利用hook技术破解APP-hook破解版下载

广告 X
欧意最新版本

欧意最新版本

欧意最新版本app是一款安全、稳定、可靠的数字货币交易平台。

APP下载  官网地址

Android高级架构师:Android平台HTTPS抓包解决方案及问题分析

2022最新慕课imooc所有Ke程资料大全分享学习课程均为百度网盘链接的形式保存下载 mp4格式支持任何设备

download:https://www.666xit.com

备用 3w 666xit com

全网最全it资源体系课大数据工程师2022版2.0升级版体系课-Java工程师2022版Python全能工程师2022版完结2022升级—TypeScript系统入门到项目实战完结无密【2022版】Vue3 系统入门与项目实战微信小程序入门与实战-2022全新版2022新版计算机基础-更适合程序员的编程必备基础知识完结点击下载地址:百度网盘自主搭建5个精品脚手架,玩转前端提效2022新版Scrapy打造搜索引擎 畅销4年的Python分布式爬虫课2022升级版Spring Cloud 进阶 Alibaba 微服务体系自媒体实战2022全面升级Vue3+TS 仿知乎专栏企业级项目2022升级百度大牛带你结合实践重学C++Java分布式架构设计与开发实战2022全新版体系课全能软件测试工程师Node.js工程师养成计划【某课】SpringCloud整合Dubbo3实战高并发下的微服务架构设计点击下载地址:百度网盘Vue3 + React18 + TS4 入门到实战借助产品思维解决人生难题(含实践方法论+分析工具)Selenium3+Pytest+Allure落地Python Web自动化测试PHP+Go 开发仿简书,实战高并发高可用微服务架构海量数据高并发场景 构建Go+ES8企业级搜索微服务Go开发者的涨薪通道:自主开发 PaaS 平台核心功能Web安全实战宝典高级前端进阶必修:自主打造高扩展的业务组件库前端模拟面试:给你真实的求职体验和面试经验Spark+ClickHouse实战企业级数据仓库,进军大厂必备构建数据工程师能力模型,实战八大企业级项目新互联网人必学-产品经理课点击下载地址:百度网盘【微体系】多端全栈项目实战:商业级代驾全流程落地基于 Flutter 3.x 实战跨平台混合开发职业生涯第一课,重塑自我认知,做出理想职业规划

前端工程师2022版Java工程师2022版Python全能工程师2022版Java 亿级项目架构设计与落地应用全能软件测试工程师Java架构师-技术专家Web前端架构师2022版Java架构师-十项能力修炼大前端2022版大数据工程师2022版Go开发工程师移动端架构师人工智能:深度学习从入门到精通Java全栈工程师人人都能学的数据分析算法与数据结构新互联网人必学-产品经理课计算机基础课物联网/嵌入式工程师自主搭建5个精品脚手架,助力前端研发全流程提效前端面试全家桶:从求职准备到面试演练Vue3 + React18 + TS4 入门到实战SpringCloud整合Dubbo3实战高并发微服务架构设计信息系统项目管理师(软考高级)一站式通关课程全栈开发高可扩展,高可维护性“当当书城WebApp”多端全栈项目实战:商业级代驾全流程落地Node.js工程师养成计划算法与数据结构高手养成-求职提升特训课9大业务场景实战Hadoop+Flink,完成大数据能力进修数据可视化,打造前端差异化竞争力Go+Python打造电商系统 自研微服务框架吃透前端工程化,大厂级实战项目以战带练全新升级,基于Vue3新标准,打造后台综合解决方案C/C++气象数据中心实战,手把手教你做工业级项目互联网人副业指南 启动你的首个副业项目产品经理电商系统实战,掌握前后端设计精髓2周刷完100道前端优质面试真题 双越最新力作轻松入门大数据:玩转Flink,打造湖仓一体架构数据可视化,打造前端差异化竞争力 作者:冲回天 https://www.bilibili.com/read/cv19296768 出处:bilibili

构建千万级高可用企业级Node.js应用Vue3+Nuxt3打造SSR网站应用,0到1实现服务端渲染C#速成指南:从入门到进阶,实战WPF与Unity3D开发拉钩教育-数据分析实练营点击下载地址:百度网盘小程序音乐项目开发实战-大神coderwhy新课Android面试超级攻略,全面攻破技术疑难及面试痛点2周刷完100道前端优质面试真题破解JavaScript高级玩法,成为精通JS的原生专家Web前端架构师廖师兄亲授-Java分布式系统解决方案深度剖析C语言知识体系 原理+实践,一课带你吃透C语言python进阶训练营点击下载地址:百度网盘JavaEE在线就业班2.0【最新升级版】算法训练营架构师训练营JAVA进阶训练营(2021最新版)GO进阶训练营Vue3 从入门到实战 进阶式掌握完整知识体系大数据开发工程师移动端架构师【完结】Go开发工程师:迎接上升风口,踏入蓝海行业!人人都能学会数据分析【16周完结】Java架构师-十项全能Python全栈工程师2020升级版【完结】前端工程师-2020版Java工程师【2020升级版已完结】Java全栈工程师【已完结】算法与数据结构体系课【已完结】体系课-数据可视化入门到精通-打造前端差异化竞争力(已完结)体系课-Go+Python双语言混合开发 盯紧技术先机 抓紧高薪机遇【完结】uni-app实战仿微信app开发2021必修 首门CSS架构系统精讲 理论+实战玩转蘑菇街Java异常与调优一站式解决方案首门程序员理财课 Python量化交易系统实战Spring Boot + Vue3 前后端分离 实战wiki知识库系统Python自动化测试开发实战 一门能就业的测试课Flutter高级进阶实战 仿哔哩哔哩APP笑傲Java面试:面霸修炼手册Kubernetes 入门到进阶实战React17 系统精讲 结合TS打造旅游电商平台SpringBoot 在线协同办公小程序开发 全栈式项目实战React17+React Hook+TS4 最佳实践 仿 Jira 企业级项目开课吧—web前端全栈开发(2020年最新)开课吧-Java企业级分布式架构师(2020最新)Kubernetes/K8s架构师实战集训营【2020最新】迈向高级的Java面试突围课Android 应用程序构建实战+原理精讲微信授权扫码点餐-新特性React16用 React.js+Egg.js 造轮子 全栈开发旅游电商应用Spark3大数据实时处理-Streaming+Structured Streaming 实战Spring Security + OAuth2 精讲 多场景打造企业级认证与授权新RabbitMQ精讲,项目驱动落地,分布式事务拔高Vue3.0+TS打造企业级组件库 快速掌握Vue3企业实际应用Spring Cloud分布式微服务实战养成应对复杂业务的综合技术能力协程原理从入门到精通 每个后端开发都需要掌握的高性能开发技术Go微服务入门到容器化实践,落地可观测的微服务电商项目极客大学-前端进阶训练营【2020最新版】算法面试专题课(Java版)毕设一课通 从开题到答辩高效完成(含全栈项目)Laravel重构企业级电商项目 全面强化职场核心竞争力高级Redis应用进阶课 一站式Redis解决方案PyTorch入门到进阶 实战计算机视觉与自然语言处理项目1:Java架构师成长直通车2: java全栈工程师:从java后端到全栈,高级电商全栈系统大课点击下载地址:百度网盘3:Java工程师4:算法与数据结构体系课5:大前端6:体系课-数据可视化入门到精通-打造前端差异化竞争力点击下载地址:百度网盘7:Python工程师8:前端工程师9:Android工程师10:.Net Core 开发电商后端API 从0到精通吃透RESTful百度网盘11:实战课程 Java企业级支付全家桶设计与实战12:从零开始学调优-Java 全技术栈 性能调优13:ReactNative+TypeScript仿喜马拉雅开发App14:JAVA互联网架构师专题/分布式/高并发/微服务【第三期】15:微专业-Python爬虫工程师 - 3个月成为网络爬虫工程师16:(毕设项目)Vue+Go前端后端一体化 企业级微服务网关项目百度网盘点击下载地址:百度网盘17:仿阿里系优酷网-企业级Go改造PHP项目踩坑避坑指北18:理论+实战 构建完整JVM知识体系19:JavaScript版数据结构与算法 轻松解决前端算法面试20:React+TypeScript高仿AntDesign开发企业级UI组件库21:移动端Python爬虫实战-2020版22:Node.js从零开发Web Server博客项目 前端晋升全栈工程师必备23:Java可视化UML工作流系统(Activiti7+SpringBoot)24:快速搞定前端技术一面 匹配大厂面试要求(升级版)25:微信小程序云开发-从0打造云音乐全栈小程序百度网盘26:Spring Cloud + Vue 前后端分离 开发企业级在线视频课程系统27:(2020新版)基于Spring Cloud微服务架构 广告系统设计与实现点击下载地址:百度网盘28:全面系统Python3.8入门+进阶 (程序员必备第二语言)29:2020全新升级版-Google资深工程师深度讲解Go语言30:微专业—数据可视化掌握高效数据可视化技法31:2020最新版React Native从入门到实战打造高质量上线App32:Vue 实战商业级读书Web APP 全面提升技能33:SparkSQL极速入门 整合Kudu实现广告业务数据分析34:网易“白帽子黑客”训练营35:2020全面系统学测试 从小白入门到实战就业36:Vue.js源码全方位深入解析 (含Vue3.0源码分析)37:混合开发入门 Vue结合Android/iOS开发仿京东项目App38:一站式学习Redis 从入门到高可用分布式实践39:Vue全家桶实战 从零独立开发企业级电商系统(免费升级Vue3.0)

40:前端框架及项目面试 聚焦Vue/React/Webpack41:主流技术栈的Restful API接口测试实战42:2020升级版系统学习Docker 践行DevOps理念43:精讲Elastic-job + Quartz实现企业级定时任务44:零基础入门 Python Web 自动化测试45:React16组件化+测试+全流程 实战在线账本项目46:WebRTC实时互动直播技术入门与实战 5G时代必备技能47:零基础入门 全角度解读企业主流数据库MySQL8.048:强力Django+杀手级xadmin开发在线教育网站 采用 Python3.7全新开发49:Node.js从零开发Web Server博客项目 前端晋升全栈工程师必备50:基于GitHub App 深度讲解Kotlin高级特性与框架设计51:Gradle3.0自动化项目构建技术精讲+实战52:畅销3年的Python分布式爬虫课程 Scrapy打造搜索引擎53:专为程序员设计的统计课 彻底学会统计分析54:Python接口自动化测试框架实战 从设计到开发55:全方位深入解析最新版SpringBoot源码56:玩转算法系列--图论精讲 面试升职必备(Java版)57:Python3入门机器学习 经典算法与应用 轻松入行人工智能58:Python3入门人工智能 掌握机器学习+深度学习 提升实战能力59:Spring Cloud + Vue 前后端分离 开发企业级在线视频课程系统60:Spark2.x+协同过滤算法,开发企业级个性化推荐系统点击下载地址:百度网盘61:Go读书社区web开发与高性能架构优化62:Spark2.x+协同过滤算法,开发企业级个性化推荐系统ElasticSearch7+Spark 构建高匹配度搜索服务+千人千面推荐系统剑指Java自研框架,决胜Spring源码Spark + ElasticSearch 构建电商用户标签系统实现精准营销剑指Java项目面试 助你顺利Offer告别996,开启Java高效编程之门线程八大核心+Java并发底层原理精讲Spring Cloud微服务实战 打造企业级优惠卷系统Spring Cloud微服务安全实战点击下载地址:百度网盘一站式学习Java网络编程 全面理解BIO/NIO/AIO聚焦Java性能优化 打造亿级流量秒杀系统(附赠秒杀项目)从0开始 独立完成企业级Java电商网站服务端开发(服务端)Spring Cloud Alibaba微服务从入门到进阶阿里新零售数据库设计与实战 (升级版)编程必备基础-音视频小白系统入门课大学计算机必修课新讲--编译原理+操作系统+图形学点击下载地址:百度网盘算法与数据结构-综合提升 C++版2020 重学C++ 重构你的C++知识体系FFmpeg音视频核心技术精讲与实战Python Flask高级编程之从0到1开发《鱼书》精品项目Django入门到进阶-适合Python小白的系统课程Python爬虫工程师从入门到进阶点击下载地址:百度网盘Node.js+Koa2框架生态实战 - 从零模拟新浪微博React全家桶+AntD共享单车后台管理系统开发React劲爆新特性Hooks 重构旅游电商网站火车票PWANode.js+Koa2+MySQL打造前后端分离精品项目《旧岛》

破坏性使用微信数据资源:营销工具聚客通被判赔偿腾讯260万

今天欧仔给大家准备文章有点长,如果您有耐心看完这篇文章,您将懂得如何着手进行app的分析、追踪、注入等实用的破解技术,另外,通过“入侵”,将帮助您理解如何规避常见的安全漏洞。

文章大纲:

黑客的素养

iOS黑客关键字

iOS的入侵离不开越狱开发,一切的破解、入侵都是建立在越狱的基础上的,如果没有拿到系统级权限,一切的想法都是空谈了,当然,市面上存在免越狱的破解补丁,但是它的开发过程,也是基于越狱环境的

tweak

在iOS的黑客界,要做破解或越狱开发,就必须了解tweak,它是各种破解补丁的统称,在google上,如果你想搜索一些越狱开发资料或者开源的破解补丁代码,它是最好的关键字。

iOS的tweak大致分为两种:

没有越狱的机器由于系统中没有mobilesubstrate这个库,我们有二个选择,第一个是直接把这个库打包进ipa当中,使用它的api实现注入,第二个是直接修改汇编代码;第一个适用于较为复杂的破解行为,而且越狱tweak代码可以复用,第二种适用于破解一些if…else…之类的条件语句

Mobilesubstrate

下面的图展示的就是oc届著名的method swizzling技术,他就是iOS的注入原理,类似于windows的钩子,所以我们注入也称为hook

Mobilesubstrate为了方便tweak开发,提供了三个重要的模块:

app注入原理

上面讲到了mobileloader,他是怎么做到把第三方的lib注入进目标程序的呢?这个我们要从二进制文件的结构说起,从下面的图来看,Mach-O文件的数据主体可分为三大部分,分别是头部(Header)、加载命令(Load commands)、和最终的数据(Data)。mobileloader会在目标程序启动时,会根据指定的规则检查指定目录是否存在第三方库,如果有,则会通过修改二进制的loadCommands,来把自己注入进所有的app当中,然后加载第三方库。

为了让大家看的更清楚,下面我用machoview来打开一个真实的二进制文件给大家看看,可以看出,二进制当中所有引用到的动态库都放在Load commands段当中,所以,通过给这个段增加记录,就可以注入我们自己写的动态库了

那么问题来了,在这里插入我们自己的动态库有什么用?我们自己写的代码没有执行的入口,我们一样没发干坏事,嗯,恭喜你问到点子上了,我们还需要一个”main”函数来执行我们自己的代码,这个”main”函数在oc里面称为构造函数,只要在函数前声明 “attribute((constructor)) static” 即可,有了它我们就可以发挥想象力,进行偷天换日干点坏事了:

#import <CaptainHook/CaptainHook.h>

CHDeclareClass(AnAppClass);

CHMethod(1, void, AnAppClass, say, id, arg1)

{

NSString* tmp=@"Hello, iOS!";

CHSuper(1, AnAppClass, say, tmp);

}

__attribute__((constructor)) static void entry()

{

NSLog(@"Hello, Ice And Fire!");

CHLoadLateClass(AnAppClass);

CHClassHook(1, AnAppClass,say);

}

到这里为止,我们已经知道了怎么在目标程序注入自己的代码,那么我们怎么知道需要hook哪些方法?怎么找到关键点进行实际的破解呢?下面讲一下常见的app入侵分析方法

iOS逆向分析方法

逆向分析最常用的有三种方法:

demo:微信抢红包插件

上面讲了很多原理性的东西,相信大家已经看的不耐烦了,下面我们一起动点真格的,我们从头开始,一步一步的做一个微信的自动抢红包插件,当然,网上可能已经有相关的开源代码了,但是我这里要讲的是,这些代码是怎么得出来的,我么重点讲一讲分析过程

工欲善其事,必先利其器

一台越狱的手机,并装有以下软件

一台苹果电脑,并装有以下软件

寻找注入点

砸壳

首先我们要做的就是把微信的壳砸掉,砸壳其实是为了把它的头文件classdump出来,因为从appstore下载的app二进制都是经过加密的,直接进行classdump操作是啥也看不出来的

执行完这几行命令后,会在微信的documents目录生成一个WeChat.decrypted文件,这就是砸壳后的二进制文件;当然了,这一步不是必须的,我们可以直接从91或者pp助手下载一个已经砸过壳的版本

动态分析-cycript

要想实现自动抢红包,我们必须找到收到红包消息的handler方法,怎么入手呢?我们先从界面出发,进入微信的消息首发窗口:

ps aux | grep WeChat

cycript -p pidxxx

UIApp.keyWindow.recursiveDescription().toString()

最终的输出如下,内容太多,大家肯定看不清楚,不过没关系,这个不是重点,这里只是展示一下打印的结果形式:

我们可以随机的选取一个节点不要太靠树叶,也不要太靠树根,例如我选的是标红的部分,把这个节点的内存地址copy出来,这个内存地址,就代表了这个节点的view对象,ios开发的老油条们都知道,通过view的nextResponder方法,可以找出它所属的视图控制器ViewController,所以我么在cycript的控制台中持续输入如下的命令:

看到没有,通过四个nextResponder方法调用,我么找到了当前聊天窗口的ViewController类名,他就是BaseMsgContentViewController,现在我们缩小了目标范围,下面我们还需要继续缩小范围,要找到具体的消息处理函数才行。

动态分析-Logify

要继续缩小范围,就得祭起神器Logify了,它是theos的一个模块,作用就是根据头文件自动生成tweak,生成的tweak会在头文件的所有方法中注入NSLog来打印方法的入参和出参,非常适合追踪方法的调用和数据传递

现在我们根据此前砸壳后class_dump出来的头文件,找到BaseMsgContentViewController在pc终端执行如下命令:

logify.pl /path/to/BaseMsgContentViewController.h > /out/to/Tweak.xm

输出的tweak文件大概是这个样子的:

这里带百分号的关键字,例如 %hook、%log、%orig 都是mobilesubstrate的MobileHooker模块提供的宏,其实也就是把method swizzling相关的方法封装成了各种宏标记,使用起来更简单,大家想要更深入了解各种标记,可以google一下logos语言

theos创建tweak

上面我们用logify生成了一个tweak代码,我们要把它安装到手机上,首先需要使用theos进行编译,安装了theos之后,在pc终端输入nic.pl:

首先选择项目模版当然是tweak啦,然后是项目名称、作者,后面两个选项要注意:

最后一切都完成后,在当前目录会生成下列文件:

把上面logify生成的tweak文件覆盖到当前目录,并用文本编辑器打开makefile文件,在文件的开头增加你的ios设备的ip地址和ssh端口:

最后在pc终端进入项目目录,输入 make package install 命令:

期间会让你输入设备的ssh密码,越狱机器的默认ssh密码是alpine,make命令会生成deb安装包,放在debs目录,我们如果想对外发布自己的插件,可以把生成的安装包上传到cydia即可

安装成功后再次进入微信的聊天界面,并使用另外一个微信在群里发个普通消息,连接xcode打开越狱机器控制台,查看输出,会发现有类似下面的输出:

Jun 7 09:56:13 Administratorde-iPhone WeChat[85972] <Notice>: [1;36m[WxMsgPreview] [m[0;36mTweak.xm:308[m [0;30;46mDEBUG:[m -[<BaseMsgContentViewController: 0x15e0c9a00> addMessageNode:{m_uiMesLocalID=2, m_ui64MesSvrID=0, m_nsFromUsr=ccg*675~9, m_nsToUsr=1037957572@chatroom, m_uiStatus=1, type=1, msgSource="(null)"} layout:1 addMoreMsg:0]

看出来了吧,消息处理函数是BaseMsgContentViewController的addMessageNode:layout:addMoreMsg:方法,大家可以看出,方法的参数内容也打印出来了

动态分析-lldb

利用hook技术破解APP-hook破解版下载

到目前为止,我么已经把范围缩小到了具体的函数,看起来注入点已经找到了,但是请大家思考一下,如果我们在这个函数中注入抢红包逻辑,那我们的tweak会不会有什么致命的缺陷?

是的,因为BaseMsgContentViewController这个类是微信群聊天窗口对应的controller,我么必须进入到群的聊天界面,这个类才会创建,如果不进入聊天窗口,我们的插件就不生效了,而且,即使进入聊天窗口,也只是能自动枪当前群的红包而已,其他群就无能为力了,是不是有点low?

所以为了使我们的插件显得上流一些,我么还要继续追根溯源,寻找消息的源头,这里就用到了lldb远程调试,使用lldb打断点的方式,通过调用栈,我们可以就可以看到当消息来到时,方法的调用顺序,找到最先执行的消息处理函数。

要在刚刚追踪到的addMessageNode:layout:addMoreMsg:方法中打断点,首先我们得知道它在运行时的内存地址,那么内存地址怎么来呢?有这么一个公式:

首先偏移量我们可以通过反汇编工具hooper来查,在pc上用hooper打开微信的二进制文件(注意,打开时会让你选择armv7或者arm64,这需要根据你越狱手机的cpu类型来选,一定要和你的手机一致),hooper的界面非常简洁,左侧有个搜索框,可以输入函数名,直接找到函数在二进制中的位置

通过左侧的搜索框搜addMessageNode关键字,找到它的偏移量是0x00000001017d7c6c:

找到了偏移量,还需要进程的基地址,这个地址需要连lldb,所以下面讲一下如何连接lldb进行远程调试,先ssh进越狱手机的终端,在终端输入如下命令(注意,你的手机必须连xcode调试过才会有这个命令):

debugserver *:19999 -a WeChat

然后在pc端新起一个终端窗口,输入如下命令来连接手机端进行调试:

lldb -> process connect connect://deviceIP:19999

如果连接成功,会进入lldb的控制台,我们在lldb的控制台输入如下命令来获取微信进程的基地址:

image list -o -f

执行这个命令会打印很多行数据,像下面图中这样,我么要找到微信的二进制文件所在的行,记录它的内存地址0X00000000000E800:

到这里我们两个地址都找到了,再通过br命令打断点:

br s -a '0X00000000000E800+0x00000001017d7c6c'

打好断点后继续向群里面发消息,我们会发现进程被断掉了,这时输入bt指令,就可以看到当前的调用栈,就像下图这样:

分析堆栈的时候,重点找出模块时WeChat的项,这些都是微信模块的方法调用,有了堆栈,我们需要根据堆栈的内存地址找出它的具体函数名,思路还是先根据上面讲到的公式来计算出栈地址在二进制中的偏移量,然后用hooper找到偏移量对应的函数名

例如根据箭头所指的内存地址和刚刚得到的进程基地址,计算偏移量:

0x0000000101ad02f4 – 0x00000000000e8000 = 1019E82F4

然后在hooper中搜索这个地址,得到结果如下:

最终把所有的栈都进行还原,得出调用栈是这个样子的:

-[CMessageMgr MainThreadNotifyToExt:]:

–>

-[BaseMsgContentLogicController OnAddMsg:MsgWrap:]:

——>

-[RoomContentLogicController DidAddMsg:]

———->

-[BaseMsgContentLogicController DidAddMsg:]

—————->

-[BaseMsgContentViewController addMessageNode:layout:addMoreMsg:]:

CMessageMgr这个类浮出水面了,是时候发挥黑客的嗅觉了,根据方法名我们能判断出MainThreadNotifyToExt:这个方法仅仅是用来发送通知的,如果hook这个方法,我们是拿不到消息内容的

由于这里可能是一个异步调用,用断点的方式,可能已经打印不出来栈信息了,所以还得使用logify来继续追踪CMessageMgr这个类,讲过的内容我就不重复了,直接得到最终的消息处理函数:

-(void)AsyncOnAddMsg:(id)message MsgWrap:(CMessageWrap* )msgWrap

实现“抢”的动作

上一节我们已经找到了hook的关键点,那么该如何去实现抢的动作?同样我们需要结合动态分析和静态分析,首先得到红包消息体的数据特征,然后再分析处理消息的关键点

数据包分析

首先我们的代码需要分辨哪些才是红包消息,方法很简单,用logify追踪BaseMsgContentViewController,然后向微信群发一个红包,观察手机日志输出,我们可以看出消息的数据结构中有个type字段,值是49,这个type应该就是标记消息类型的,如果不确定,可以再发个图片或者文本之类的消息,这个值是不同的:

Administratorde-iPhone WeChat[47410] <Notice>: [1;36m[WxMsgPreview] [m[0;36mTweak.xm:308[m [0;30;46mDEBUG:[m -[<BaseMsgContentViewController: 0x15e0c9a00> addMessageNode:{m_uiMesLocalID=16, m_ui64MesSvrID=1452438635530425509, m_nsFromUsr=1037957572@chatroom, m_nsToUsr=ccg*675~9, m_uiStatus=4, type=49, msgSource="<msgsource>

<silence>0</silence>

<membercount>3</membercount>

</msgsource>

"} layout:1 addMoreMsg:0]

现在我们能分辨消息类型了,重点来了,怎么实现这个事呢,可能聪明人已经猜到了,从ui入手,先找到微信本身的抢红包函数,我们自己来给它构造参数并调用他不就行了?

把红包点开后,用cycript打印出当前view的层次,就像下面这个,一眼就可以看到重点,WCRedEnvelopesReceiveHomeView就是开红包弹框的类名

知道类名后,用cycript追踪它,点击开红包,在日志中找到了下图中的内容,从名字来看,这是一个事件处理函数,我们现在要做的,就是把他还原成oc代码,真正实现抢红包功能

Administratorde-iPhone WeChat[91173] <Notice>: [1;36m[WxMsgPreview] [m[0;36mTweak.xm:8[m [0;30;46mDEBUG:[m -[<WCRedEnvelopesReceiveHomeView: 0x13cdda8c0> OnOpenRedEnvelopes]

静态分析法

怎么把他还原成oc代码,真正实现抢红包功能呢?还得借助一点点汇编技能,只是一点点而已,因为现在的反汇编工具已经很强大了,我们不需要挨个去看寄存器了

在pc上用hooper打开微信的二进制文件,搜索OnOpenRedEnvelopes,查看汇编代码,注意在图片中最后一行调用了一个WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes函数

继续搜索WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes这个方法,找到它的汇编代码

最终反解出的代码如下,是不是很简单?

NSString *nativeUrl = [[msgWrap m_oWCPayInfoItem] m_c2cNativeUrl];

nativeUrl = [nativeUrl substringFromIndex:[@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao?" length]];NSDictionary *nativeUrlDict = [%c(WCBizUtil) dictionaryWithDecodedComponets:nativeUrl separator:@"&"];

继续往下看, 在这里前面三行创建了一个mutable dictionary:

最终得到的代码如下:

NSMutableDictionary *args = [[%c(NSMutableDictionary) alloc] init];

[args setObject:nativeUrlDict[@"msgtype"] forKey:@"msgType"];

[args setObject:nativeUrlDict[@"sendid"] forKey:@"sendId"];

[args setObject:nativeUrlDict[@"channelid"] forKey:@"channelId"];

继续往下看从箭头所指的几处,我们可以看见,它的代码是这样的,共分为四步

最终还原的到的代码如下:

CContactMgr *contactManager = [[%c(MMServiceCenter) defaultCenter] getService:[%c(CContactMgr) class]];

CContact *selfContact = [contactManager getSelfContact];

继续往下看,这里使用刚刚得到的selfcontact来获取displayname和headimgurl,并把它们设置到刚刚的字典里面了,key分别是nickname和headimg

最终的代码:

[args setObject:[selfContact getContactDisplayName] forKey:@"nickName"];

[args setObject:[selfContact m_nsHeadImgUrl] forKey:@"headImg"];

接着看,接下来这两段就比较了,完全是从内存地址里面取的值,我也不知道他从哪里来,怎么办呢?有没有不懂汇编就能搞定它的捷径呢,答案是有!

最终的结果如下:

[args setObject:nativeUrl forKey:@"nativeUrl"];

[args setObject:xxx forKey:@"sessionUserName"];

继续往下看,接下来这一段还是用mmservicecenter来获取WCRedLogicMgr对象,然后调用WCRedLogicMgr的open方法来拆红包,可以想象open方法的参数就是上面我们辛苦组装的字典

代码如下:

[[[%c(MMServiceCenter) defaultCenter] getService:[%c(WCRedEnvelopesLogicMgr) class]] OpenRedEnvelopesRequest:args];

领红包逻辑

到这里,我们再总结一下我们上面分析的过程……

最终的抢红包代码合并起来如下:

#import "WxMsgPreview.h"

%hook CMessageMgr

-(void)AsyncOnAddMsg:(id)message MsgWrap:(CMessageWrap* )msgWrap {

%log;

%orig;

if(msgWrap.m_uiMessageType == 49){

CContactMgr *contactManager = [[%c(MMServiceCenter) defaultCenter] getService:[%c(CContactMgr) class]];

CContact *selfContact = [contactManager getSelfContact];

if ([msgWrap.m_nsContent rangeOfString:@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao"].location != NSNotFound) { // 红包

NSString *nativeUrl = [[msgWrap m_oWCPayInfoItem] m_c2cNativeUrl];

nativeUrl = [nativeUrl substringFromIndex:[@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao?" length]];

NSDictionary *nativeUrlDict = [%c(WCBizUtil) dictionaryWithDecodedComponets:nativeUrl separator:@"&"];

NSMutableDictionary *args = [[%c(NSMutableDictionary) alloc] init];

[args setObject:nativeUrlDict[@"msgtype"] forKey:@"msgType"];

[args setObject:nativeUrlDict[@"sendid"] forKey:@"sendId"];

[args setObject:nativeUrlDict[@"channelid"] forKey:@"channelId"];

[args setObject:[selfContact getContactDisplayName] forKey:@"nickName"];

[args setObject:[selfContact m_nsHeadImgUrl] forKey:@"headImg"];

[args setObject:nativeUrl forKey:@"nativeUrl"];

[args setObject:msgWrap.m_nsFromUsr forKey:@"sessionUserName"];

[[[%c(MMServiceCenter) defaultCenter] getService:[%c(WCRedEnvelopesLogicMgr) class]] OpenRedEnvelopesRequest:args];

}

}

}

%end

刚才说了,有两个疑难点没有解决:

通过一番折腾,得出了抢红包的核心代码,再结合上面章节所讲的theos制作tweak包的方法,打包并安装到手机,发个红包试试,是不是秒抢?

免越狱插件

检查依赖项

如果设备没有越狱,是没有mobilesubstrate等环境的,而且一些系统目录是没有读写权限的,这时我么只能从目标app的二进制文件入手,通过手动修改load commands来加载自己的dylib,那么上面我们的插件又是使用theos基于mobilesubstrate编译的,有没有办法确定我们的dylib有没有依赖其他的库呢?

使用osx自带的otool工具即可,可以看出,我们的lib是依赖于substrate库的,其他的都是系统库,所以我们从越狱设备中把cydiasubstrate文件copy出来重命名为libsunstrate.dylib,和我们的dylib一起放入wechat.app目录中

最后使用install_name_tool命令修改动态库的路径把它指向app二进制文件的同级目录

制作安装包

解决了依赖问题,然后要把我们的库注入到二进制weixin的二进制文件,这一步使用开源的insert_dylib即可 (@executable_path是一个环境变量,指的是二进制文件所在的路径)

//注入动态库

./insert_dylib @executable_path/wxmsgpreview.dylib WeChat

//打包成ipa

xcrun -sdk iphoneos PackageApplication -v WeChat.app -o ~/WeChat.ipa

最后使用用企业证书或者开发证书签名对ipa重新签名,就可以放到自己的渠道进行发布了!

结语

通过综合运用各种工具,进行静态和动态分析,我们通过实战破解了微信的抢红包逻辑,明白了入侵常用的工具,上面的抢红包代码还有很多改进之处,比如没有判断红包的发送者是不是自己、也没有判断红包里面的文字是不是抢错三倍,有兴趣的童鞋可以尝试优化一下!

喜欢你就点赞,有用你就收藏,认识程序员你就转发。

我们是一群热爱IT的年轻人,如果你也爱IT、爱移动端开发,欢迎加入我们,让我们共同为梦想发声。

关注“蓝鸥

推送IT新知识与资讯,让你每天进步一点点

上一篇: ERC标准,erc标准
下一篇: 什么叫做区块链技术_何谓区块链技术

为您推荐