ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

WeChatPlugin-MacOS 微信小助手版本演进全解析:从 v1.0 到 v2.0 的功能迭代与源码实现

WeChatPlugin-MacOS 微信小助手版本演进全解析:从 v1.0 到 v2.0 的功能迭代与源码实现 即时通讯桌面应用逆向工程【免费下载链接】WeChatPlugin-MacOS微信小助手项目地址https://gitcode.com/gh_mirrors/we/WeChatPlugin-MacOS点击查看免费下载导读本文以 CHANGELOG.md 为骨架系统梳理微信小助手 WeChatPlugin-MacOS 从 2017 年 v1.0.0 到 2023 年 v2.0 的完整版本演进脉络逐一还原每次版本迭代引入的核心功能及其底层实现。读者将理解防撤回、自动回复、远程控制、免认证登录、Alfred 集成等核心能力的 Hook 实现原理掌握每个功能对应的源码位置与配置项从而快速定位、理解乃至二次开发这个基于 Objective-C Runtime 的微信 macOS 插件项目。一、项目背景一款基于 Runtime Hook 的 macOS 微信增强插件WeChatPlugin-MacOS微信小助手是一款通过 Objective-C Runtime 消息转发机制Method Swizzling与 fishhook 符号重绑定技术在运行时注入并拦截微信 macOS 客户端方法的插件。所有能力的统一入口位于 WeChathook.m 的hookWeChat方法它会针对微信内部类如FFProcessReqsvrZZ、CUtility、AccountService、MMURLHandler等批量替换方法实现并通过 TKWeChatPluginConfig 集中管理各功能的开关状态。从 v1.0.02017-08-09到 v2.02023-03-12项目历经十余次版本迭代覆盖微信 2.3.x 到 3.7.0 多个版本。CHANGELOG 忠实记录了这一过程下面按版本逐一展开。二、v1.0.02017-08-09奠定四大核心能力首个正式版本便确立了插件最核心的四项能力远程控制通过向自己的微信账号发送特定指令关键字远程执行 macOS 系统命令。微信多开Hook 微信的实例检测逻辑绕过微信已在运行限制。消息防撤回拦截撤回消息把被撤回的内容以本地消息形式重新展示。自动回复收到消息后按关键字匹配规则自动回复。其中微信多开的实现非常典型见 WeChathook.m (BOOL)hook_HasWechatInstance { return NO; // 永远返回无实例从而允许再开一个新微信 }hookWeChat中通过tk_hookClassMethod(objc_getClass(CUtility), hasWechatInstanceMethod, ...)替换CUtility的实例检测类方法2.3.22 之后方法名变为FFSvrChatInfoMsgWithImgZZ使每个新进程都认为自己没有实例在运行实现多开。防撤回的核心在 hook_FFToNameFavChatZZ:sessionMsgList:拦截撤回指令后用XMLDictionaryParser解析sysmsg撤回 XML取出newmsgid与session通过FFProcessReqsvrZZ服务反查原始消息MessageData再以本地消息msgType: 0x2710重新插入会话并把撤回内容转为带定位锚点的可点击文本。三、v1.1.02017-08-23与 v1.2.02017-09-11自动回复重构与修复v1.1.0重构了自动回复模块实现多回复能力不再是一条规则一条回复而是一个关键字可以配置多条回复内容随机取一条发送。对应模型 TKAutoReplyModel 中的replyContent字段——多条回复用|分隔发送时随机挑选NSArray *replyArray [model.replyContent componentsSeparatedByString:|]; int index arc4random() % replyArray.count; NSString *randomReplyContent replyArray[index];见 WeChathook.m。v1.2.0进一步为自动回复增加正则匹配与私聊开关同时修复了两个痛点 bug聊天记录在部分场景下消失的问题插件在用户~/Documents目录生成MMappedKV、JietuSDKStat.plist等沙盒残留文件的问题。后者的修复思路极具参考价值在 WeChathook.m 中通过 fishhook 的rebind_symbols替换NSSearchPathForDirectoriesInDomains与NSHomeDirectory两个 C 函数把主目录统一重定向到~/Library/Containers/com.tencent.xinWeChat/Data见 swizzled_NSHomeDirectory从根源上避免污染用户文档目录。四、v1.3.02017-09-17置底与免认证登录最近联系人置底将指定会话固定在列表底部与置顶相对对应配置中的ignoreSessionModels数组。免认证登录第二次登录时免扫码认证。实现上 HookAccountService的onAuthOKOfUser:withSessionKey:withServerId:autoAuthKey:isAutoAuth:方法见 WeChathook.m并支持在登录界面勾选自动登录selectAutoLogin:WeChathook.m开关状态由 TKWeChatPluginConfig.h 中的autoAuthEnable/autoLoginEnable控制。五、v1.4.02017-10-11窗口置顶与远程控制回调微信窗口置顶HookNSWindow的makeKeyAndOrderFront:WeChathook.m把窗口层级提升为NSNormalWindowLevel 2同时在窗口最小化时恢复层级避免置顶窗口遮挡其他应用。最近联系人多选删除对应multipleSelectionEnable开关与selectSessions选中集合。远程控制信息回调执行完远程指令后通过 TKRemoteControlManager 向自己账号回发一条执行完成确认消息assistant.remoteControl.recall本地化文案并清空自己的未读数。手机端获取指令信息向自己账号发送获取指令列表的关键字插件会返回所有可用的远程指令及其开关状态实现见 remoteControlCommandsString。六、v1.5.02018-02-24自动登录开关、检测更新与通知中心快捷回复优化防撤回提醒撤回提示中显示撤回人昵称与消息类型见 WeChathook.m 中对撤回人消息内容的拼接逻辑。新增自动登录开关可在登录界面手动开关。新增小助手检测更新checkPluginVersion 启动时调用 TKVersionManager 检测远端版本发现新版本时弹出NSAlert提示可选择直接打开下载窗口或忽略。通知中心快捷回复将微信通知接入 macOS 通知中心的可回复按钮收到通知即可直接回复对应 README 中的notification_quick_reply.gif演示。表情包复制 存储由 TKEmoticonManager 提供copyEmoticonWithMd5:按表情 MD5 复制到剪贴板exportEmoticonWithMd5:window:弹窗导出保存。自动回复 远程控制设置存储到本地配置由内存模型升级为本地持久化TKWeChatPluginConfig提供saveAutoReplyModels/saveRemoteControlModels等方法落盘。七、v1.5.12018-03-03语音远程控制 macOS这是远程控制能力的重大升级——不再局限于文字指令可直接发送语音消息控制 Mac。两条路径并存文字路径remoteControlWithMsg: 收到msgType 34语音的消息时自动调用MMVoiceTranslateMgr doTranslate:isAuto:把语音转成文字语音回调路径HookMMVoiceTranslateMgr的updateTranscribeVoiceMessage:voiceText:voiceToTextStatus:WeChathook.m语音转写完成后直接交给executeRemoteControlCommandWithVoiceMsg:执行。语音指令的匹配比文字宽松文字指令要求完全相等语音指令只要包含关键字即可命中shouldExecuteRemoteControlWithModel:msg:msgType:。同时 v1.5.1 还修复了快捷回复后未读数不更新的问题并把防撤回提醒优化为展示撤回人昵称与消息类型。语音远程控制需要麦克风转写权限README 明确提示使用网易云音乐远程控制时需在系统偏好设置 → 安全性与隐私 → 隐私 → 辅助功能中添加微信与脚本编辑器。八、v1.62018-03-18与 v1.6.12018-04-07Alfred 集成与延迟回复v1.6新增 Alfred 快捷发送消息与打开聊天窗口。插件通过 TKWebServerManager 启动本地 HTTP 服务基于 GCDWebServerAlfred Workflow配套项目 wechat-alfred-workflow调用该接口实现搜索最近聊天列表、查看聊天记录、快捷发消息。服务在登录成功后自动启动见 hook_onAuthOKOfUser:... 中if ([[TKWeChatPluginConfig sharedConfig] alfredEnable]) { [[TKWebServerManager shareManager] startServer]; }由alfredEnable开关控制。v1.6.1为自动回复新增延迟回复能力对应模型字段enableDelay与delayTime单位秒TKAutoReplyModel.h发送时通过 TKMessageManager 的sendTextMessage:toUsrName:delay:延迟投递。同时调整置顶窗口快捷键、更新 README 文档。九、v1.72018-05-12最重磅的功能聚合版本这是功能数量最多的一次迭代核心亮点不同账户设置不同的自动回复 远程控制配置按账号隔离多开场景下每个微信账号可独立配置。自动回复新增总开关 指定联系人新增enableSpecificReply与specificContacts字段——开启特定联系人回复后原本的群聊/私聊回复规则对该联系人失效匹配逻辑见 autoReplyWithMsg:。远程控制新增控制小助手配置可通过指令远程切换小助手自身的开关executePluginCommand:TKRemoteControlManager.m支持getDirectiveList获取指令、AutoReplySwitch自动回复开关、PreventRevokeSwitch防撤回开关、AutoAuthSwitch免认证开关切换后通过NSNotificationCenter广播NOTIFY_AUTO_REPLY_CHANGE等通知同步 UI 状态。一键已读调用 TKMessageManager 的clearUnRead:清空所有会话未读数。一键清除空会话批量清理无消息的空会话。国际化支持英文、简体、繁体多语言文案由各语言目录的Localizable.strings提供如 en.lproj/Localizable.strings、zh-Hans.lproj/Localizable.strings。关于小助手新增关于窗口展示插件版本与信息。在线更新小助手检测到新版本后直接下载安装。去除微信 URL 转链hook_startGetA8KeyWithURL:拦截微信的 A8 跳转链改为直接用默认浏览器打开目标链接从而可以直达抖音等被微信转链洗过的链接CHANGELOG 原文的从此直接打开抖音链接即指此。修复免认证登录 多开等 bug。远程控制在 v1.7 同时正式定型为四大类指令见remoteControlCommandsString中的分组TKRemoteControlManager.m指令分组典型能力Mac 系统屏幕保护、锁屏、休眠、关机、重启、清空废纸篓应用退出 QQ、WeChat、Chrome、Safari、所有程序网易云音乐播放、暂停、下一首、上一首、喜欢、取消喜欢小助手获取指令、防撤回开关、自动回复开关、免认证开关指令模型 TKRemoteControlModel 定义了typeShell / AppleScript / 插件指令三种执行方式、keyword触发关键字、executeCommand具体命令等字段Shell 指令通过NSTask执行/bin/bash -cAppleScript 指令则调用osascript .../TKRemoteControlScript.scptTKRemoteControlManager.m预置脚本位于 TKRemoteControlScript.scpt可编辑的指令清单见 TKRemoteControlCommands.plist。十、v1.7.12018-07-24Alfred 搜索加强适配微信 2.3.17新增Alfred 搜索最近聊天列表Alfred 查看用户聊天记录。能力由配套的 wechat-alfred-workflow 配合插件本地 HTTP 服务完成聊天记录读取走 TKMessageManager 的getMsgListWithChatName:minMesLocalId:limitCnt:接口。十一、v1.7.32018-10-23安全修复与浏览器开关修复安全漏洞适配微信 2.3.19同时修复了随 2.3.19 引入的注入问题。菜单栏新增 alfred 开关在微信小助手菜单中可直接开关 Alfred 服务alfredEnable。更改更新弹窗逻辑更新提示弹窗由强制改为可关闭并新增禁止检测版本选项forbidCheckVersion。新增自带浏览器浏览开关systemBrowserEnable开关控制是否使用微信内置浏览器打开链接。关闭后hook_preHandleUrlStr:withMessage:会调用openURLWithDefault:改用系统默认浏览器WeChathook.m。十二、v1.7.52019-01-13最后的功能性更新与优化适配微信 2.3.22多开检测方法同步更换为FFSvrChatInfoMsgWithImgZZ消息同步方法更换为FFImgToOnFavInfoInfoVCZZ:isFirstSync:代码中通过LargerOrEqualVersion(2.3.22)做版本分支WeChathook.m。新增禁止微信检测更新开关checkUpdateWechatEnable控制微信自身非 App Store 版本的启动更新检测HookcheckForUpdatesInBackground后按开关决定是否放行WeChathook.m。优化 XML 解析防撤回模块改用XMLDictionaryParser统一解析撤回 XML提升兼容性。十三、v2.02023-03-12适配微信 3.7.0 的收官迭代v2.0 是 CHANGELOG 记录的最后一个版本时隔四年后针对微信 3.7.0 进行适配并带来两项新能力新增撤回消息定位撤回提示中的被撤回内容变为可点击超链接点击后自动滚动定位到原始消息位置。实现位于 hook_populateWithMessage: 与 hook_textView:clickedOnLink:atIndex:撤回消息以kTKRevokeLocationKey锚点标记mesLocalID渲染时转为NSLinkAttributeName链接点击后调用showLocatedMessage:定位到对应消息。新增群聊监控memberExitMonitoringEnable开关控制退群监控。HookGroupStorage的notifyModifyGroupContactsOnMainThread:WeChathook.m对比群成员变更检测到有人退群后以本地消息提示XX 退出群聊并记录退群成员与时间quitChatRoomMemberDict同一成员 30 天内不重复提示间隔常量kTKMemberQuitDayInterval。退群提示中的成员昵称同样做成可点击链接点击可查看该成员资料页。移除官方已支持的功能自动登录、移除会话、标为未读等官方原生支持的功能被移除插件回归差异化价值。此外 v2.0 还延续了 v1.7.3/v1.7.5 的不支持消息展示优化小程序、转账、未支持消息等卡片会在内容后追加来源应用与标题信息hook_makeAppBrandTableItemWithItem:、hook_makePayTransferTableItemWithItem:等WeChathook.m转账消息还会额外展示金额提升信息可读性。十四、版本演进全景与源码索引结合 CHANGELOG 与源码可将各版本核心能力映射到对应实现文件版本核心能力关键源码v1.0.0防撤回 / 自动回复 / 远程控制 / 多开WeChathook.mv1.1.0多回复、代码重构TKAutoReplyModel.hv1.2.0正则匹配、沙盒路径修复WeChathook.mv1.3.0置底、免认证登录TKWeChatPluginConfig.hv1.4.0窗口置顶、远程回调WeChathook.mv1.5.x语音控制、检测更新、快捷回复、表情管理TKRemoteControlManager.m、TKEmoticonManager.hv1.6.xAlfred 集成、延迟回复TKWebServerManager.h、TKMessageManager.hv1.7多账号配置、一键已读、国际化、URL 直开TKRemoteControlManager.mv1.7.5禁止微信检测更新、XML 解析优化WeChathook.mv2.0撤回定位、退群监控、适配 3.7.0WeChathook.m十五、总结从 CHANGELOG 反推工程演化规律纵观 CHANGELOG 的版本记录可以提炼出该项目三条清晰的工程演化主线安全与体验优先v1.2.0 修复沙盒污染、v1.2.0/v1.5.1 修复聊天记录与未读数 bug、v1.7.3 修复安全漏洞——稳定性修复贯穿始终能力渐进叠加而非推翻重构自动回复从单回复v1.0到多回复v1.1到正则/私聊开关v1.2到指定联系人v1.7再到延迟回复v1.6.1是同一模型字段不断扩展的典型增量演进远程控制同样从纯文字指令逐步叠加语音、回调与插件自身开关控制与微信版本强耦合几乎每个版本都对应一个微信版本适配2.3.17 → 2.3.19 → 2.3.22 → 3.7.0微信侧方法签名变化会直接触发LargerOrEqualVersion:分支兼容这也解释了为何 v2.0 会移除已被官方支持的功能——插件的生命周期始终跟随微信客户端的迭代。对于希望深入理解该项目的开发者建议按 main.mm → WeChathook.m → TKWeChatPluginConfig → 各功能 Manager 的顺序阅读即可完整还原 CHANGELOG 中每个条目背后的实现细节。赞分享即时通讯桌面应用逆向工程【免费下载链接】WeChatPlugin-MacOS微信小助手项目地址https://gitcode.com/gh_mirrors/we/WeChatPlugin-MacOS点击查看免费下载相关推荐SmartRefreshLayout版本迭代史从v1.0到v2.0的技术演进之路SmartRefreshLayout版本迭代史从v1.0到v2.0的技术演进之路 引言下拉刷新的技术痛点与解决方案 你是否还在为Android应用中的下拉刷移动开发UI组件FunClip版本更新解析从v1.0到v2.0的功能演进与改进FunClip版本更新解析从v1.0到v2.0的功能演进与改进 FunClip作为基于阿里巴巴通义实验室FunASR工具包开发的智能视频剪辑工具在从v1.0音视频语音人工智能AI 应用本地部署Whispering版本迭代解析v1.0到最新版的功能演进与改进Whispering版本迭代解析v1.0到最新版的功能演进与改进 你还在为语音转文字工具的卡顿和复杂操作烦恼吗Whispering从v1.0到最新版的进化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表