# 描述
PC微信机器人，实现以下功能：
1. 获取通讯录  
2. 发送文本、图片、文件、xml文章、名片、群艾特消息  
3. 根据wxid查询好友信息  
4. 根据群ID获取所有群成员wxid  
5. 检测好友状态（是否好友、被删除、被拉黑）  
6. 接收各类消息，可写回调函数进行处理  
7. 封装COM接口，方便使用自己喜欢的语言进行调用  

# 用途
1. 淘客发单  
2. 无痕清粉  
3. 微信公众号采集  
4. 聊天记录备份  
5. 其他你能想到的用途  

# 可用版本
微信电脑版**3.5.0.46**  
微信电脑版**3.6.0.18**  
微信电脑版**3.7.0.26**  
主分支对应微信3.7.0.26版本，其他版本请查看对应分支。  

# 编译环境
**Visual Studio 2019**(平台配置：win32(x86))
# 原理
通过逆向PC微信，定位到关键CALL，dll内联汇编调用  
注册32位COM组件，供64位/32位进程外部调用  
# 目录说明
`./CWeChatRobot`：COM组件的实现代码  
`./DWeChatRobot`：注入的DLL实现代码，根据平台配置可编译出socket版和COM版  
`./wxRobot`:  包含C#的调用示例  
`./Python`：python示例和接口测试文件  
`./wxDriver`：driver的实现代码，有些函数具有一定的学习意义  
`./Release/CWeChatRobot.exe`：编译的COM组件  
`./Release/DWeChatRobot.dll`：编译的DLL文件  
`./Release/socket`：包含wxDriver.dll和socket接口的DLL  
`./Release/WeChatTools.exe`：用于调试时注入或卸载DLL程序，具体参阅相关代码  
# 注册COM
以管理员权限执行以下命令：  
```shell
# 安装
CWeChatRobot.exe /regserver
# 卸载
CWeChatRobot.exe /unregserver
```
# 调用
**Python：**  
参考[wxRobot.py](/Python/wxRobot.py)  
**C#：**  
参考[ComWechatRobotCsharp](https://github.com/RingoStudio/ComWechatRobotCsharp)，感谢@RingoStudio 的贡献  
**ESDK**  
参考[ESDK](/ESDK)，感谢@lovezm 的贡献  
# 更多功能 
后续计划功能：  
1. 修改好友备注  

有空的时候会按照上述顺序进行开发，不过嘛，计划只是计划，如果未实现也请见谅    
**也欢迎您提交PR**  
# 更新记录
## 2022.04.01
1. 使用SAFEARRAY返回通讯录列表，可正确显示好友昵称中的特殊符号  
2. README中添加目录说明  
3. 更新C#示例代码，添加好友列表的遍历示例  
## 2022.04.11  
1. 修改获取个人信息接口和发送文章接口，兼容老版wxid（未经测试，如有问题请提ISSUE）  
2. 添加接收消息的接口，可以写回调对消息进行处理（参考Python示例文件）  
## 2022.04.12
1. 添加发送群艾特消息的接口  
## 2022.04.12
1. 添加通过群ID获取所有群成员wxid接口  
## 2022.04.13
1. 更新群艾特接口，可同时艾特多人  
## 2022.04.18
1. 添加获取数据库句柄接口（部分句柄，获取全量句柄需Hook）  
2. 添加执行SQL命令接口  
3. 添加在线数据库备份接口  
## 2022.06.01  
1. 适配微信**3.7.0.26**版本，部分功能未经测试，如有问题请报issue  
## 2022.06.02  
1. 添加通过好友申请接口（配合接收消息接口可自动通过好友）  
2. 添加获取聊天记录数据库句柄（好友申请消息类型为0x25）  
3. 优化了StartService接口，重复注入时不再关闭远程进程  
## 2022.06.04  
1. 完成通过wxid和v3数据加好友的COM接口（后续添加通过微信号、手机号、QQ号查询V3数据接口）  
2. 优化接收消息逻辑，添加消息时间；新增Hook发送消息，返回数据中以一个BOOL值区分发送和接收  
3. 修复了一个BUG，该BUG可能导致Release配置下，COM接口无法正常加载DWeChatRobot.dll计算偏移  
## 2022.06.07  
1. 添加获取当前微信版本（读注册表）和启动微信的接口  
2. 优化数据库查询接口，现在可以正常查询BLOB类型  
## 2022.06.10  
1. 新增关注公众号、网络查询用户信息、Hook语音、未加密图片、自定义微信版本号接口  
2. Hook语音和图片的接口暂时还有瑕疵，图片收到后有可能不会自动下载；语音消息的文件名暂时是时间戳，计划替换为该条消息id。有空再做优化。  
## 2022.06.13  
1. 优化发送艾特消息接口，新增一个参数，指示是否自动填充被艾特人昵称  
2. 优化发送文章消息接口，新增一个参数，用于展示消息卡片缩略图  
3. 新增删除好友接口  
4. 新增发送小程序接口  
## 2022.06.18  
1. 修复了多个BUG  
2. 整理代码结构，方便后续开发基于websocket的接口  
3. 添加64位程序注入DLL到32位程序的driver  
## 2022.06.24  
1. 解决Python脚本中，socket接收数据可能不完整的问题  
2. 解决心跳时如果同步了同一个人的多条消息，只会返回一条的问题  
3. 感谢@shangdev 提供的思路，现在开启hook图片的时会修改自动下载图片时段为"00:00-00:00"  
# 打赏作者
请给作者一个star，感谢感谢  
# 免责声明
代码仅供交流学习使用，请勿用于非法用途和商业用途！如因此产生任何法律纠纷，均与作者无关！
