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


  • 如果能成功创建互斥体对象,则启动微信
  • 如果不能创建互斥体:
    • 如果找到对应窗口,则置顶之,自己退出
    • 如果没有找到,则启动微信
用伪代码来表示一下:
if (CreateMutex() == SUCCESS) {  启动微信} else {  if (FindWindow() == SUCCESS) {    将已有窗口置顶  } else {    启动微信  }}【揭开电脑上登录多个微信的秘密】而直接使用脚本启动的多个进程,虽然操作系统内核层面保证了互斥体的唯一,但由于启动速度相差不大,相应的窗口还没有来得及创建出来,导致走入上面的第二个启动逻辑,从而可以启动多个实例 。
小发现在分析的过程中,发现了一个有趣的事情:
在WeChatWin.dll中,上面的创建互斥体再上一级函数名字叫StartWaChat,也是作为导出函数被该DLL导出:
揭开电脑上登录多个微信的秘密

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




推荐阅读