ljc545w / ComWeChatRobot

PC微信机器人,实现获取通讯录,发送文本、图片、文件等消息,封装COM接口供Python、C#调用
1.61k stars 437 forks source link

微信收到一条订阅号的消息后挂了,日志如下 #51

Closed tmsdy closed 2 years ago

tmsdy commented 2 years ago

Windows Server 2016 Datacenter [Build 10.0.14393] CPU: Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz 微信 3.70.0030 2022/7/10 12:22:43

Type: EXCEPTION_ACCESS_VIOLATION Error: Read address 0x03101000 Address: 6646AA84

CallStack: DWeChatRobot + AA84 DWeChatRobot + AA10 KERNEL32 + 162C4 ntdll + 61B69 show in line:DWeChatRobot + AA84 DWeChatRobot + AA10 KERNEL32 + 162C4 ntdll + 61B69

Regs: EAX=00000074, EBX=03110000, ECX=03100000, EDX=03101000 ESI=03100002, EDI=6646AA00, EBP=083AFDC8, ESP=083AF9C0, EIP=6646AA84

DWORD_PTRs at CS:EIP: 83028B66 856602C2 2BF575C0 89FAD1D6 518DEC55 801F0F02 00000000 83018B66 pid=00001B24 init_tid=00001814 crashtid=0000156C DWORD_PTRs at teb: 083AE404 083B0000 083A7000 00000000 00001E00 00000000 00ABE000 00000000 00001B24 0000156C 00000000 0E2E4F00 00A5B000 00000012 00000000 00000000 00000000

最后收到的一条消息是: {'time': '2022-07-10 12:22:38', 'type': 49, 'isSendMsg': 0, 'wxid': 'gh_8ec531665608', 'from': 'gh_8ec531665608', 'message': '<?xml version="1.0"?>\n\n\t\n\t\t<![CDATA[设备事件通知]]>\n\t\t<![CDATA[东东农场互助版\n设备名称:请点击查看通知内容\n发生时间:2022-07-10 12:22:37\n群组:京东(jd)\n退订请回复“td2190”\n回复“拒收”屏蔽所有消息]]>\n\t\t\n\t\t5\n\t\t1\n\t\t0\n\t\t<![CDATA[]]>\n\t\t0\n\t\t<![CDATA[http://s.pushplus.plus/84b1c59e960a4d6f9888c68f6519699c]]>\n\t\t<![CDATA[]]>\n\t\t\n\t\t\t0\n\t\t\t\n\t\t\t\n\t\t\t<![CDATA[]]>\n\t\t\t<![CDATA[]]>\n\t\t\t<![CDATA[]]>\n\t\t\n\t\t\n\t\t<![CDATA[]]>\n\t\t<![CDATA[]]>\n\t\t\n\t\t\t\n\t\t\t\t<![CDATA[pushplus 推送加]]>\n\t\t\t\t\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t0\n\t\t\t\t\t0\n\t\t\t\t\t<![CDATA[东东农场互助版\n设备名称:请点击查看通知内容\n发生时间:2022-07-10 12:22:37\n群组:京东(jd)\n退订请回复“td2190”\n回复“拒收”屏蔽所有消息]]>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t4\n\t\t\t\t\t<![CDATA[设备事件通知]]>\n\t\t\t\t\t<![CDATA[http://s.pushplus.plus/84b1c59e960a4d6f9888c68f6519699c]]>\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t1657426957\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t\n\t\t\t\t\t<![CDATA[东东农场互助版\n设备名称:请点击 查看通知内容\n发生时间:2022-07-10 12:22:37\n群组:京东(jd)\n退订请回复“td2190”\n回复“拒收”屏蔽所有消息]]>\n\t\t\t\t\t0\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t<![CDATA[pushplus 推送加]]>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<![CDATA[#000000]]>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t0\n\t\t\t\t\t0\n\t\t\t\t\t0\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t0\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t0\n\t\t\t\t\t0\n\t\t\t\t\t0\n\t\t\t\t\t0\n\t\t\t\t\t1\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t\n\t\t\t\t\t0\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t0\n\t\t\t\t\t0\n\t\t\t\t\t0\n\t\t\t\t\t0\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t<![CDATA[pushplus]]>\n\t\t\t\t<![CDATA[pushplus 推送加]]>\n\t\t\t\n\t\t\t\n\t\t\t\t<![CDATA[设备事件通知]]>\n\t\t\t\t<![CDATA[]]>\n\t\t\t\t1657426957\n\t\t\t\t<![CDATA[东东农场互助版]]>\n\t\t\t\t<![CDATA[]]>\n\t\t\t\t1\n\t\t\t\n\t\t\t\n\t\t\t\t1\n\t\t\t\t\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<![CDATA[设备名称 :]]>\n\t\t\t\t\t\t\t\t<![CDATA[#888888]]>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<![CDATA[请点击查看通知内容]]>\n\t\t\t\t\t\t\t\t<![CDATA[#000000]]>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<![CDATA[发生时间:]]>\n\t\t\t\t\t\t\t\t<![CDATA[#888888]]>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<![CDATA[2022-07-10 12:22:37]]>\n\t\t\t\t\t\t\t\t<![CDATA[#000000]]>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<![CDATA[备注:]]>\n\t\t\t\t\t\t\t\t<![CDATA[#888888]]>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<![CDATA[群 组:京东(jd)\n退订请回复“td2190”\n回复“拒收”屏蔽所有消息]]>\n\t\t\t\t\t\t\t\t<![CDATA[#173177]]>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t<![CDATA[查看详情]]>\n\t\t\t\t\t\t<![CDATA[http://s.pushplus.plus/84b1c59e960a4d6f9888c68f6519699c]]>\n\t\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t\t<![CDATA[#000000]]>\n\t\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t\t0\n\t\t\t\t\t\t0\n\t\t\t\t\t\t0\n\t\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t\t0\n\t\t\t\t\t\t0\n\t\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t\t0\n\t\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t\t0\n\t\t\t\t\t\t<![CDATA[]]>\n\t\t\t\t\t\n\t\t\t\t\t0\n\t\t\t\t\n\t\t\t\t0\n\t\t\t\n\t\t\t0\n\t\t\t\n\t\t\n\t\t<![CDATA[]]>\n\t\t<![CDATA[PxhkTGgkNTNrujrKwAE3ONm57t8nw0q5UhEsZEDCMvk]]>\n\t\n\t<![CDATA[gh_8ec531665608]]>\n\t\n\t\t0\n\t\t<![CDATA[pushplus 推送加]]>\n\t\t1\n\t\n\n', 'nickname': 'pushplus 推送加', 'alias': 'pushplus'}

详细日志如下 WeChat5dbe1b.txt WeChat5dbe1bFMD5.txt

tmsdy commented 2 years ago

在我本机测试后,发现如果是接收 http://www.pushplus.plus/ 的消息, 必挂。

Windows 10 Enterprise [Build 10.0.22000] CPU: 12th Gen Intel(R) Core(TM) i5-12400F 微信 3.70.0030 2022/7/10 14:10:14

Type: EXCEPTION_ACCESS_VIOLATION Error: Read address 0x06B81000 Address: 7155AA84

CallStack: DWeChatRobot + AA84 DWeChatRobot + AA10 KERNEL32 + 16739 ntdll + 68AFF show in line:DWeChatRobot + AA84 DWeChatRobot + AA10 KERNEL32 + 16739 ntdll + 68AFF

Regs: EAX=0000002F, EBX=06B90000, ECX=06B80000, EDX=06B81000 ESI=06B80002, EDI=7155AA00, EBP=118FFA34, ESP=118FF62C, EIP=7155AA84

DWORD_PTRs at CS:EIP: 83028B66 856602C2 2BF575C0 89FAD1D6 518DEC55 801F0F02 00000000 83018B66 pid=00003EC0 init_tid=00000BB8 crashtid=000058F8 DWORD_PTRs at teb: 118FE78C 11900000 118F7000 00000000 00001E00 00000000 00B5E000 00000000 00003EC0 000058F8 00000000 10B21DA8 00AC7000 00000000 00000000 00000000 00000000

ljc545w commented 2 years ago

可能有特殊的数据结构吧,有空我去定位下。

ljc545w commented 2 years ago

我这边用那个API推消息完全正常,之前用过Server酱,也都是OK的

tmsdy commented 2 years ago

已经查到原因了,是因为我在 msgcallback里面加了一个转发消息的逻辑,调用的是robot.SendText,当待发送消息过长超过2000, 就会挂,各种订阅号公众号的图文消息长度都超过5000了。我只截取前200就正常了。

`

def msgcallback(self,data):
    # 主线程中已经注入,此处禁止调用StartService和StopService

    robot = WeChatRobot()
    msg = {'time':data.time,'type':data.type,'isSendMsg':data.isSendMsg,'wxid':data.wxid,
           'sendto' if data.isSendMsg else 'from':data.sender,'message':data.message}
    if '@chatroom' in data.sender:
        chatroominfo = robot.GetWxUserInfo(data.sender)
        userinfo = robot.GetWxUserInfo(data.wxid)
        msg['chatroomname'] = chatroominfo['wxNickName']
    else:
        userinfo = robot.GetWxUserInfo(data.sender)
    msg['nickname'] = userinfo['wxNickName']
    msg['alias'] = userinfo['wxNumber']
    print(msg)
    self.forward(msg,robot)

# 添加转发逻辑
def forward(self,msg, robot):
    nickname = msg['nickname'] if msg['nickname']  else msg['wxid']
    message = msg['message']
    if '<emoji' in message:
        message = '表情包'
    elif '<img' in message:
        message = '图片'
    elif '<md5>' in message:
        message = '文件'

    forward_msg = nickname + '说:' + message

    robot.SendText(boss_wxid,forward_msg)

`