简介

WechatSpellbook 是微信巫师作者在微信巫师的基础提取出来的通用微信 Xposed 插件框架。它提供了友好的的 API,提供自动分析微信内部结构特征的API(忽略微信版本差异),对 hook 微信出现的常见问题都做了优化,总之就是使用它会更容易对微信 hook

上手

实现IXposedHookLoadPackage接口之后,在任意一个应用开启新进程时,Xposed都会唤醒插件、调用handleLoadPackage方法。所以需要使用isImportantWechatProcess来检查这个进程属不属于微信。

“Spellbook插件”是对Spellbook框架中所有监视微信事件并进行处理的类的统称,通过实现Spellbook制定的接口并且在启动时进行注册,这个插件就能够从Spellbook接收到微信事件的回调。插件可以实现的接口有两种风格:EventCenter和HookerProvider

关键概念

入口类
入口函数
Spellbook插件

事件机制

EventCenter机制

Spellbook首要想解决的,就是封装出一套简单好用的接口,让开发者能够轻松地基于事件驱动的模型来开发自己的微信插件,这也就是EventCenter机制的初衷。
EventCenter的接口:https://github.com/Gh0u1L5/WechatSpellbook/tree/master/src/main/kotlin/com/gh0u1l5/wechatmagician/spellbook/interfaces

HookerProvider机制

显然,EventCenter对细节的简化和封装意味着灵活性上的牺牲。当然,因为Xposed框架还在,开发者完全可以像平时写Xposed插件一样自己调用findAndHookMethod等方法劫持函数。但是WechatSpellbook与其前身WechatMagician核心的设计风格就是,让每个功能都干净利落地封装成独立的插件类,而不是一团乱糟糟的findAndHookMethod。

因此在Spellbook中,如果一个插件想要单独以Xposed的风格劫持函数的话,建议实现一个名为HookProvider的接口。这个接口里有两个函数: provideStaticHookers 和 provideEventHooker 。 provideEventHooker 是用来写自定义的EventCenter用的(对,EventCenter也是一种特殊的HookerProvider),因此这个函数我们会放到后面讲怎么拓展EventCenter的时候再去讲。

一个插件想使用Xposed的话,其实只需要实现 provideStaticHookers 就可以,我们以WeChatMagician中出现的一段代码为例讲解一下这个设计:

WechatSpellbook学习笔记相关推荐

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  2. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  3. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  5. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  6. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)

    Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...

  9. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

最新文章

  1. UDT源码剖析(五):UDT::cleanup()过程代码注释
  2. Unknown system variable 'tx_isolation'报错
  3. matlab调用自己写的函数时报错: reference to a cleared variable
  4. python软件中文翻译_python 写一个桌面版的翻译软件
  5. Apache Calcite官方文档中文版-概览-1.背景
  6. 【iOS开发】理解Action、IBACtion、Action Connection
  7. 漫画:图的最短路径问题
  8. modelsim安装_XLINUXFPGA开发工具篇modelsim的安装
  9. 报修下单上门维修小程序开发制作
  10. Could not find conduit initiator for address
  11. android简单的自定义涂鸦控件
  12. Missing instance name in instantiation of '*'.
  13. 几种经典的卷积神经网络
  14. 每天都在用电脑、玩手机的你,现在的眼睛有多干?
  15. PKCS #5: Password-Based Cryptography Specification Version 2.1 中文翻译
  16. 计算机英语 美剧,给力美剧口语IT篇(83):冒充电脑高手
  17. 全面深改直面民生“硬骨头” 这些领域获得感满满
  18. MAC Python环境配置
  19. Win10 更新又爆 BUG:删除音频驱动;苹果拒绝法院送达禁令裁定
  20. Python:7-1 jmu-python-分段函数数学函数 (15分)

热门文章

  1. 使用python opencv批量对贴图进行除透明边并压缩
  2. 微商怎么引流?不懂这些就引不来流量!
  3. vue3+vite+antd——后台管理系统——基础模板
  4. “次世代”游戏建模技术真的那么火吗?那容易学会吗?如何去学?
  5. nginx 在线一键安装
  6. uniapp 开发小程序使用iconfont彩色图标
  7. 谷歌发现利用零日漏洞的攻击、黑客通过漏洞入侵红十字会|2月17日全球网络安全热点
  8. 南京美食指南(完美篇)
  9. IEEE 802.3标准就是ISO 802.3标准
  10. day04-硅谷课堂-前端基础知识(二)