您当前的位置:首页 > 手机百科 > 微信

揭开电脑上登录多个微信的秘密

时间:2020-07-23 17:17:17  来源:  作者:

微信电脑端也能多开

昨天,偶然从好朋友小林(微信公众号:小林Coding)处得知,他的电脑居然可以同时上两个微信号。

手机端多开微信我知道,像华为、小米等手机系统都对此做了支持,不过在运行windows系统的电脑上怎么启动两个微信呢,这倒是一下引起了我的好奇。

小林告诉我他是这样做的,写了一个批处理:

start D:WeChatWeChat.exe
start D:WeChatWeChat.exe

然后直接双击批处理文件,就能启动两个微信进程。

我试了一下,果然如此!

随后我又加了一行,竟然还能启动3个:

揭开电脑上登录多个微信的秘密

 

接着我在网络上搜了一下,原来这一招早就被人用过了,看来是我火星了。不过到底为什么用这种方式就能多开,我倒是很想知道这个迷底。

TIPS:如果对技术分析部分不感兴趣,可以跳过直接来到后面的真相部分。

微信的单例模式

正常情况下,直接手动双击微信图标启动,后面启动的进程会进行全局单例模式检查,如果发现已经存在微信进程,就会直接把对应进程的微信窗口激活,定位到桌面最前面,随后自己退出。

但为什么用上面的方式就能启动俩呢?我们来一探究竟。

首先,分析一下上面描述的微信单个实例是如何实现的。

做过Windows平台应用程序开发的朋友可能对此比较熟悉,一般是进程启动后创建一个全局唯一名字的互斥体,创建成功则正常启动,创建失败则判断一下是否这个互斥体已经存在。如果已经存在则说明已经有对应程序之前启动。

带着这种猜想,用工具procexp查看一下微信进程打开的所有内核对象,并找到互斥体部分:

揭开电脑上登录多个微信的秘密

 

果然,这其中有一个名字叫_WeChat_App_Instance_Identity_Mutex_Name的互斥体,从这个名字可以猜出,这个跟微信的单例模式绝对有关系。

接着,启动神器APIMonitor,它可以帮你监控指定进程的API调用情况,勾选上CreateMutexGetLastError这两个Windows API函数。在已经有微信在运行的情况下,用这个工具再启动一个微信进程,看一下函数调用情况:

揭开电脑上登录多个微信的秘密

 

可以看到,创建这个名字的互斥体后,随后又调用了GetLastError函数,并返回了0x000000b7,查看手册,其含义:

揭开电脑上登录多个微信的秘密

 

表示已经存在。

来看一下,这个CreateMutex调用的堆栈,看看是哪个地方的代码在创建这个全局互斥体:

揭开电脑上登录多个微信的秘密

 

从堆栈看出,调用来自于微信目录下的一个动态库WeChatWin.dll。具体位置在偏移0x8e271b处的前一条指令。

接下来就要祭出神器中的神器,大名鼎鼎的反汇编软件IDA,这家伙支持x86、x64、ARM、MIPS等多种处理器架构和Windows、linuxAndroidmacOS、JVM等多种系统平台的程序分析。

用IDA打开这个WeChatWin.dll文件,并定位到偏移0x8e271b处:

揭开电脑上登录多个微信的秘密

 

如上图所示,创建互斥体的动作,发生在函数sub_108e26d0。

上层是sub_108e2660函数在调用它:

揭开电脑上登录多个微信的秘密

 

上面这张图反映了创建互斥体后的判断逻辑:

  • 如果sub_108e26d0的返回值为0,表示没有错误,当前函数也直接返回0。
  • 如果sub_108e26d0的返回值不为0,表示出现了错误,则依次判断WeChatMainWndForPCWeChatLoginWndForPC两个窗口是否存在,如果存在则使用BringWindowToTop函数将其置顶弹出。这两个窗口分别代表的是微信的主界面窗口和登陆界面窗口,如果一个微信实例已经存在,则势必处于这两种状态之一。

问题就出在上面这个判断中,汇编代码看起来有点辣眼睛,咱们F5来还原一下C代码(还原效果只能凑合看,能看清楚逻辑就行):

揭开电脑上登录多个微信的秘密

 

上面图片的注解已经说明了,函数sub_108e2660的返回值将决定是否启动微信实例进程,还是直接退出。

真相只有一个

事情到这里就真相大白了,来总结一下。

微信判断是否启动的2个条件:

  • 如果能成功创建互斥体对象,则启动微信
  • 如果不能创建互斥体:
    • 如果找到对应窗口,则置顶之,自己退出
    • 如果没有找到,则启动微信

用伪代码来表示一下:

if (CreateMutex() == SUCCESS) {
  启动微信
} else {
  if (FindWindow() == SUCCESS) {
    将已有窗口置顶
  } else {
    启动微信
  }
}

而直接使用脚本启动的多个进程,虽然操作系统内核层面保证了互斥体的唯一,但由于启动速度相差不大,相应的窗口还没有来得及创建出来,导致走入上面的第二个启动逻辑,从而可以启动多个实例。

小发现

在分析的过程中,发现了一个有趣的事情:

在WeChatWin.dll中,上面的创建互斥体再上一级函数名字叫StartWaChat,也是作为导出函数被该DLL导出:

揭开电脑上登录多个微信的秘密

 

这里不知道是故意还是不小心把微信的WeChat写成了WaChat,如果是笔误,这位程序员同学看到了赶紧偷偷去改一下吧。



Tags:微信   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
今天在登录PC版微信的时候,发现了一个新的功能,在界面上多了一个,仅文件传输,出于好奇,我点击了一下。于是发现了一个新的天地。登录页面点击后,出来了一个二维码,微信居然出网页版...【详细内容】
2021-12-27  Tags: 微信  点击:(2)  评论:(0)  加入收藏
现在大家都非常喜欢用微信进行社交。如果微信上有一些重要的聊天记录,我们可以将它保存成文档,这样后续查找也更方便,还能防止丢失。小编带来了具体的介绍,赶紧来看下吧。微信聊...【详细内容】
2021-12-24  Tags: 微信  点击:(11)  评论:(0)  加入收藏
微信开放平台:微信扫码登录功能官方文档: https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html1. 授权流程说明微信OAuth2.0授权登...【详细内容】
2021-12-23  Tags: 微信  点击:(9)  评论:(0)  加入收藏
大家好,欢迎来到大雨静听的生活。你们还在用微信授权登录吗?一个方法关闭微信授权登录,让微信更加安全。有些时候安装不明软件,用微信授权登录可能会影响微信的安全,那么今天就分...【详细内容】
2021-12-23  Tags: 微信  点击:(8)  评论:(0)  加入收藏
华为手机怎样同时登录3个微信?相信很多人都有2、3个微信号,有家庭号、工作号、同学号等等,所以,我们经常会看到他们身上随身携带了2个或3个手机。如果你的手机是华为手机的话,就...【详细内容】
2021-12-21  Tags: 微信  点击:(8)  评论:(0)  加入收藏
不管你是社交牛X还是社交自闭,出来工作后,微信列表上的好友数量只会随着工作时间增加而增多。躺在列表里的好友有很多其实并不是“好友”,有的甚至没讲过一句话,不知不觉就加上...【详细内容】
2021-12-17  Tags: 微信  点击:(16)  评论:(0)  加入收藏
1.首先打开微信-支付页面 2.点击进入 城市服务 3.点击进入 热门服务——的社保综合 4.点击进入 山西城乡居民社保缴纳 5.点击进入 城乡居民医疗保险 6.输入缴费人...【详细内容】
2021-12-16  Tags: 微信  点击:(11)  评论:(0)  加入收藏
近日,微信虽然没有推出什么新版本,但是却悄悄上线了两项新功能,分别为“每日一看”和“查看名片”。目前,这项功能都属于灰度测试功能,因此只有拥有测试权限的用户可以使用。 至...【详细内容】
2021-12-16  Tags: 微信  点击:(8)  评论:(0)  加入收藏
微信小程序“无障碍急救平台”日前上线,解决听障人士120急救呼叫难题。听障人士在日常生活、工作中常有信息缺失、沟通不良的困难。如果自身或身边人突发急症,则需要依靠他人...【详细内容】
2021-12-15  Tags: 微信  点击:(9)  评论:(0)  加入收藏
问:随着互联网时代的发展,电子证据早已从原先审判实践中的“边角料”变成现在的“主角”。微信聊天记录、支付软件的转账记录也已成为名正言顺的电子证据。但微信号可以更改,如...【详细内容】
2021-12-14  Tags: 微信  点击:(8)  评论:(0)  加入收藏
▌简易百科推荐
今天在登录PC版微信的时候,发现了一个新的功能,在界面上多了一个,仅文件传输,出于好奇,我点击了一下。于是发现了一个新的天地。登录页面点击后,出来了一个二维码,微信居然出网页版...【详细内容】
2021-12-27  程序员老王聊科技    Tags:微信网页版   点击:(2)  评论:(0)  加入收藏
现在大家都非常喜欢用微信进行社交。如果微信上有一些重要的聊天记录,我们可以将它保存成文档,这样后续查找也更方便,还能防止丢失。小编带来了具体的介绍,赶紧来看下吧。微信聊...【详细内容】
2021-12-24  IE浏览器中文网     Tags:聊天记录   点击:(11)  评论:(0)  加入收藏
微信开放平台:微信扫码登录功能官方文档: https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html1. 授权流程说明微信OAuth2.0授权登...【详细内容】
2021-12-23  老炮说Java    Tags:微信扫码   点击:(9)  评论:(0)  加入收藏
大家好,欢迎来到大雨静听的生活。你们还在用微信授权登录吗?一个方法关闭微信授权登录,让微信更加安全。有些时候安装不明软件,用微信授权登录可能会影响微信的安全,那么今天就分...【详细内容】
2021-12-23  大雨静听生活    Tags:微信   点击:(8)  评论:(0)  加入收藏
华为手机怎样同时登录3个微信?相信很多人都有2、3个微信号,有家庭号、工作号、同学号等等,所以,我们经常会看到他们身上随身携带了2个或3个手机。如果你的手机是华为手机的话,就...【详细内容】
2021-12-21  码不亭蹄    Tags:微信   点击:(8)  评论:(0)  加入收藏
不管你是社交牛X还是社交自闭,出来工作后,微信列表上的好友数量只会随着工作时间增加而增多。躺在列表里的好友有很多其实并不是“好友”,有的甚至没讲过一句话,不知不觉就加上...【详细内容】
2021-12-17  雷科技    Tags:微信   点击:(16)  评论:(0)  加入收藏
1.首先打开微信-支付页面 2.点击进入 城市服务 3.点击进入 热门服务——的社保综合 4.点击进入 山西城乡居民社保缴纳 5.点击进入 城乡居民医疗保险 6.输入缴费人...【详细内容】
2021-12-16  坚持住    Tags:微信   点击:(11)  评论:(0)  加入收藏
近日,微信虽然没有推出什么新版本,但是却悄悄上线了两项新功能,分别为“每日一看”和“查看名片”。目前,这项功能都属于灰度测试功能,因此只有拥有测试权限的用户可以使用。 至...【详细内容】
2021-12-16  果粉之家    Tags:微信   点击:(8)  评论:(0)  加入收藏
微信设置铃声语音之后,无论是朋友给你开视频还是开语音,你都由之前的“叮叮,叮叮,叮叮叮”的声音变成自己设置的铃声。那我们该如何设置呢?前提条件:你的微信版本最低要8.0.8+,当然...【详细内容】
2021-12-14  蜜蜂攻城狮    Tags:微信语音铃声   点击:(13)  评论:(0)  加入收藏
一、怎么在微信上激活医保卡?1、进入微信后,点击右下方的我,选择支付的选项进入 2、点击城市服务的图标-进入医保的选项中 3、点击医保下方的激活选项4、输入支付密码,授权激活...【详细内容】
2021-12-09    社保网  Tags:激活医保卡   点击:(14)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条