微信逆向浅谈
因公司需求,需要造一款微信机器人
作为编程佬,原则是:能在 GitHub 上找,就在 GitHub 上找。
搜了一圈,确实有一些结果。
之前稍有了解:微信协议基本没人能逆开,大多是通过 Hook 或 RPA 自动操作实现。

结果发现,不是被和谐,就是远古遗产,比化石还稀有。
南山必胜客,你懂的。
所以笔者仅提供思路,抛砖引玉,各位请自己保重。
看到一个“新”的,结果……

我滴天呐,我一个穷学生,800 块钱?不如把我命拿去。
如果跟老板讲,老板肯定说:那为什么不直接找他买?
于是决定 自研。
机器人核心需求
机器人唯一需要的两个元素就是:
- 接收消息
- 发送消息
我不是开发者,所以只能 逆向。
流程
注意到 weixin.exe 仅几 MB,可以断定核心逻辑在 weixin.dll 中。
但 weixin.dll 一百多 MB,用 IDA Pro 导入,我这轻薄本怕是要加载爆了。

于是开始寻思 歪门邪道。
突破口:内存搜索
中文文本在内存中的编码有多种。
用小号发个文本过来,然后进行内存搜索,看看地址旁有什么规律。

这一搜不要紧,哟呵,规律不就出来了吗? Encoding: UTF-8 Address: 0x16BFEFACE41 Region Base: 0x16BFEEDA000 Size: 0x129000 Protect: 0x4
HEX: 6A 6C 73 39 7C 76 31 5F 42 79 44 70 57 39 6A 58 3C 2F 73 69 67 6E 61 74 75 72 65 3E 0A 09 3C 74 6D 70 5F 6E 6F 64 65 3E 0A 09 09 3C 70 75 62 6C 69 73 68 65 72 2D 69 64 3E 3C 2F 70 75 62 6C 69 73 68 65 72 2D 69 64 3E 0A 09 3C 2F 74 6D 70 5F 6E 6F 64 65 3E 0A 3C 2F 6D 73 67 73 6F 75 72 63 65 3E 0A 5A 21 E7 8E 8B E7 94 9F EF BC 88 E5 91 98 E5 B2 97 E8 80 81 E6 9D BF EF BC 89 20 3A 20 E4 BD A0 E5 A5 BD 60 AF 9F BE F4 C3 AE A9 89 0D 68 C9 F2 DC 86 03 72 02 08 00 78 00 18 80 02 22 F0 02 08 EA 02 12 EA 02 08 2F 12 08 08 01 10 F5 80 FB A4 03 12 04 08 65 10 00 12 08 08 02 10 C9 F2 DC 86 03 12 04 08 66 10 00 12 04 08 0D 10 00 12 05 08 CC 01 10 00 12 08 08 03 10 AE 81 FB A4 03 12 04 08 67 10 00 12 08 08 0B 10 B8 81 FB A4 03 12 04 08 6F 10 00 12 04 08 04 10 00 12 04 08 68 10 00 12 04 08
TEXT:
jls9|v1_ByDpW9jX..<tmp_node>…
text
发现规律:
ZX脏字符 + 账号名 + 内容 + XXX脏字符,前面还带个 XML 格式。
不小心一正则……
哎呀,就出来了。

接收消息 ✅
发送消息的波折
笔者用 x64dbg 一路追踪,发现参数全是加密的,于是只好放弃(其实是 下班时间快到了)。
赶工方案:使用 pyweixin 库进行发送消息。
于是,如你所见,一个简单的机器人就出来了。

QA 环节
Q:为什么不直接用 pyweixin 读消息,非要自己折腾?
A:点来点去找新消息,你电脑不用了吗?而且效率跟乌龟一样。
Q:为什么不继续捣鼓发送消息?
A:下班了。后面有兴趣会继续说的。
20260414
由 LiangYu 的 Hugo Manager 编写并一键推送到 GitHub 上