分析微信防多开功能
防多开程序的一些思路
常用的windows下防多开的技术有以下几种:
互斥体防多开
这种防多开技术主要就是在第一次程序运行开始的时候,会使用 CreateMutexW或CreateMutexA创建一个以当前程序为相关名称的互斥体,当第二次启动程序时,会检测是否创建相同的互斥体,如果有,则会退出程序。
一般 CreateMutexW或CreateMutexA调用完之后,返回值为NUL即为失败,可以使用 API GetLastError获取错误码。如果句柄已经存在了,返回值不是0,也可以使用 API GetLastError获取错误码ERROR_ALREADY_EXISTS,值是0xB7。
窗口名、类名防多开
这种防多开的技术主要就是在程序启动时会使用FindWindowW或FindWindowA查找窗口名或窗口类名进行比对,看窗口是否存在,存在则退出。
微信防多开主要应用到的技术是使用互斥体防多开,所以需要对这两个API下断。
知识补充:
Windows SDK API一般与字符串相关的API都会有两个版本
- A版,例如CreateMutexA,FindWindowA
- U版,例如CreateMutexW,FindWindowW
这两种版本代表两种字符编码方式的字符串形式
- A版,ascii版
- U版,unicode版
使用x64dbg对API设置断点
有了对防多开的认识之后,接下来就是使用x64dbg实际上手对微信进行分析。
① 首先要定位到PC微信的主程序WeChat.exe。