ljc545w / ComWeChatRobot

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

微信多开的情况 #55

Closed amchii closed 2 years ago

amchii commented 2 years ago

首先感谢作者的Com接口! 我准备按照提供的Com接口封装一个Python和Go的上层接口,在使用时我发现好像没有考虑到多开这种特殊情况。 Windows上按住shift多次点击微信图标可以打开多个微信进程(窗口名一致),通过FindWindow只会找到第一个窗口,我没有逆向相关的知识,但设想是否可以找到所有微信窗口并获得当前微信用户信息以提供选择注入,或者更简单的,提供一个方法接受用户传入的pid来对其注入,至于用户是怎么来区分获取pid的不用关心。后者貌似更容易?

hibmm commented 2 years ago

Python不是很懂,可以用psutil模块枚举所有pid然后再筛选,就可以拿出所有微信的pid,之后全部注入,然后再获取登录信息做区分,个人愚见。 当然,更准确一点的方法还可以用进程快照来搞,就是麻烦了点

amchii commented 2 years ago

Python不是很懂,可以用psutil模块枚举所有pid然后再筛选,就可以拿出所有微信的pid,之后全部注入,然后再获取登录信息做区分,个人愚见。 当然,更准确一点的方法还可以用进程快照来搞,就是麻烦了点

和语言倒没什么关系,因为各个语言都可以拿到进程的信息。我所说的两个设想中,前者是先找出所有微信进程(作者是通过窗口来找进程的,我觉得这样有点不好)并注入获取登录用户信息来选择注入(并卸载不需要的);后者则是不注入让用户根据列出的微信进程信息选择所需注入的微信,这里面有个trick是可以根据进程的启动时间以及该进程打开的文件(\WeChat Files\<wxid>\)来辨别目标。

ljc545w commented 2 years ago

这个项目在设计之初并没有考虑多开,都是给个人用户使用的。 如果你想研究多开相关的,可以给你提供一点方向,CreateMutex,这是一个windows API 微信互斥体名字是_WeChat_App_Instance_Identity_Mutex_Name,通过CE把这个改掉就能多开一个 遍历pid,正如你所说的,使用进程快照

最近一直在修公司项目的bug,下班就没太多精力看逆向了。。时间充裕的时候,群管理和多开,都会慢慢加的。

amchii commented 2 years ago

嗯,倒不是怎么多开微信,而是如何对多个微信进程选择注入。我有时间把项目clone下来看能不能搭好配置编译吧,还得装个VS,工作电脑是mac还不好搞。

ljc545w commented 2 years ago

进程快照,CreateToolhelp32Snapshot,找到所有进程名为WeChat.exe的pid,其他的都一样的。

ljc545w commented 2 years ago

@amchii multiprocess分支已经添加多开管理,如果稳定将会合并到主分支。

amchii commented 2 years ago

@ljc545w image 刚才使用最新的Release,开了两个微信试了下,好像不行

ljc545w commented 2 years ago

@amchii 获取个人信息这个有点问题,需要再改一下。试试别的吧。