简介
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中出现的一段代码为例讲解一下这个设计: