目录修整
目前的系列目录(后面会根据实际情况变动):
在windows11上编译python 将python注入到其他进程并运行 注入Python并使用ctypes主动调用进程内的函数和读取内存结构体 调用汇编引擎实战发送文本和图片消息(支持32位和64位微信) 允许Python加载运行py脚本且支持热加载 利用汇编和反汇编引擎写一个x86任意地址hook,实战Hook微信日志 封装Detours为dll,用于Python中x64函数 hook,实战Hook微信日志 实战32位和64位接收消息和消息防撤回 实战读取内存链表结构体(好友列表) 做一个僵尸粉检测工具 根据bug反馈和建议进行细节上的优化 其他功能看心情加
因为基本没有人对原理和代码感兴趣,后面的文章不再讲解原理和代码,有兴趣的可以自己看代码,遇到不懂的可以私聊或群里问我。
使用教程
准备工作
安装支持的版本微信 (下载链接: https://www.123pan.com/s/ihEKVv-XcWx.html
提取码:5WLu
)安装32位或64位Python(取决于你安装的微信是32位还是64位),版本大于等于3.7 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
: 本地数据库中的localidmsgid
: 服务器返回的msgid, 多个账号的话不一定是唯一的msg_type
: 消息类型,1 文本,3 图片,其他的自己看is_self_msg
: 是不是自己发的消息,电脑手机发的都算timestamp
: 消息时间sender
: 发送人或群的wxidcontent
: 消息内容room_sender
: 群发送人的wxidsign
: 估计是消息的签名thumb_path
: 缩略图路径,file_path
: 图片或文件路径
创建一个revoke.py
,写入以下代码后保存:
from module import AntiRevoke
ar = AntiRevoke()
ar.hook()
之后界面上的消息不会被撤回,但也不会有撤回提示。不过控制台会打印谁谁谁撤回了一条消息,但是没有消息内容,只有消息的msgid。
你可以先将消息保存在数据库里,然后通过这个msgid来查询撤回的哪个消息。
这个撤回消息的昵称就是空白字符,所以没显示