【Python微信机器人】第八篇: 实战32位和64位接收消息和消息防撤回

目录修整

目前的系列目录(后面会根据实际情况变动):

  1. 在windows11上编译python
  2. 将python注入到其他进程并运行
  3. 注入Python并使用ctypes主动调用进程内的函数和读取内存结构体
  4. 调用汇编引擎实战发送文本和图片消息(支持32位和64位微信)
  5. 允许Python加载运行py脚本且支持热加载
  6. 利用汇编和反汇编引擎写一个x86任意地址hook,实战Hook微信日志
  7. 封装Detours为dll,用于Python中x64函数 hook,实战Hook微信日志
  8. 实战32位和64位接收消息和消息防撤回
  9. 实战读取内存链表结构体(好友列表)
  10. 做一个僵尸粉检测工具
  11. 根据bug反馈和建议进行细节上的优化
  12. 其他功能看心情加

因为基本没有人对原理和代码感兴趣,后面的文章不再讲解原理和代码,有兴趣的可以自己看代码,遇到不懂的可以私聊或群里问我。

使用教程

准备工作

  1. 安装支持的版本微信 (下载链接: https://www.123pan.com/s/ihEKVv-XcWx.html 提取码: 5WLu)
  2. 安装32位或64位Python(取决于你安装的微信是32位还是64位),版本大于等于3.7
  3. pip install --upgrade wechat_pyrobot

如果国内源还没有同步最新版本,可以指定-i https://pypi.org/simple/选项使用pip官方库

注入Python

首先创建一个目录,例如robot_code,再创建一个main.py(名称随意)写入以下代码:

from py_process_hooker import inject_python_and_monitor_dir


if __name__ == "__main__":
    process_name = "WeChat.exe"
    open_console = True
    inject_python_and_monitor_dir(process_name, __file__, open_console=open_console)

启动并登录微信,执行这个main.py就会把Python注入到微信并且打开控制台

接着你在当前目录创建的任何代码文件保存后,都会被自动加载到微信并执行(注意创建的带代码文件名不能以数字开头)

接收消息

创建一个hookmsg.py(名称随意,别数字开头就行),写入以下代码后保存:

from module import HookMsg

def msg_callback(json_msg_str:str):
    print(json_msg_str)

hooker = HookMsg(msg_callback)
hooker.hook() 

这一篇文章只做个雏形,后续再优化使用方式,比如注入后自动hook接收消息,再使用队列存储消息,引入消息插件的模式。这样可以让每个py插件脚本都可以单独处理消息,做不同的事。

现在没有使用队列的话,回调函数是无法执行耗时操作的,不然会卡死微信界面。因为要等回调函数执行完,界面才能显示消息

目前获取的消息字段有:

  • localid: 本地数据库中的localid
  • msgid: 服务器返回的msgid, 多个账号的话不一定是唯一的
  • msg_type: 消息类型,1 文本,3 图片,其他的自己看
  • is_self_msg: 是不是自己发的消息,电脑手机发的都算
  • timestamp: 消息时间
  • sender: 发送人或群的wxid
  • content: 消息内容
  • room_sender: 群发送人的wxid
  • sign: 估计是消息的签名
  • thumb_path: 缩略图路径,
  • file_path: 图片或文件路径

创建一个revoke.py,写入以下代码后保存:

from module import AntiRevoke

ar = AntiRevoke()
ar.hook()

之后界面上的消息不会被撤回,但也不会有撤回提示。不过控制台会打印谁谁谁撤回了一条消息,但是没有消息内容,只有消息的msgid。

你可以先将消息保存在数据库里,然后通过这个msgid来查询撤回的哪个消息。

这个撤回消息的昵称就是空白字符,所以没显示


请使用浏览器的分享功能分享到微信等