微信多开检测主要通过FindWindows查找微信登入界面窗口类名
和CreateMutex函数来创建互斥量实现单开
WeChat.exe里面的FindWindow
通过在OD的FindWindowW函数下断点,通过堆栈返回调用反代码
HWND FindWindowW(
[in, optional] LPCWSTR lpClassName,
[in, optional] LPCWSTR lpWindowName
);
FindWindowW("WeChatLoginWndForPC",NULL)
将两处的jnz改为用nop填充保存
WeChatWin.dll里面的CreateMutex
方法一样下断点回追堆栈
CreateMutex(0,0,"WeChat_App_Instance_Identity_Mutex_Name")
这个互斥体是命名互斥体,并且对象在调用此函数之前就存在,则返回值是现有对象的句柄, 而 GetLastError函数返回 ERROR_ALREADY_EXISTS(0xB7)。
CreateMutex返回值从eax传到esi,如果esi==0,代表创建互斥量失败,je跳转到退出代码
esi!=0;通过GetLastError()==0xB7判断是否多开
将jnz改为jmp
趣味:
1.bat脚本为什么可以实现多开
bat脚本实现速度快,在这个软件检测开始之前,任务就已经提交操作系统,运行起来了
2.关闭互斥量句柄实现
CloseHandle()