微信逆向浅谈

微信逆向浅谈

因公司需求,需要造一款微信机器人

作为编程佬,原则是:能在 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>…..</tmp_node>..Z!测试号 : 你好`����î��.h��܆.r…x..�."�..�..�../…..����….e…….��܆….f………..�……..����….g…….����….o………..h…..

text

发现规律:
ZX脏字符 + 账号名 + 内容 + XXX脏字符,前面还带个 XML 格式。
不小心一正则……

哎呀,就出来了。

微信逆向浅谈

接收消息


发送消息的波折

笔者用 x64dbg 一路追踪,发现参数全是加密的,于是只好放弃(其实是 下班时间快到了)。

赶工方案:使用 pyweixin 库进行发送消息。

于是,如你所见,一个简单的机器人就出来了。

微信逆向浅谈


QA 环节

Q:为什么不直接用 pyweixin 读消息,非要自己折腾?
A:点来点去找新消息,你电脑不用了吗?而且效率跟乌龟一样。

Q:为什么不继续捣鼓发送消息?
A:下班了。后面有兴趣会继续说的。


20260414



由 LiangYu 的 Hugo Manager 编写并一键推送到 GitHub 上