PC微信逆向:四种姿势教你干掉防多开

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38474570/article/details/93304599

微信版本

在这里插入图片描述

防多开原理

大多数应用程序防止多开的方法无非就只有两种,一种是利用互斥体,另一种就是通过遍历当前窗口的方式查找是否有同名窗口。微信用是的互斥体的方法。典型的防双开的示例代码如下:

int main()
{
	HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, L"AAA");
	if (hMutex==NULL)
	{
		CreateMutex(NULL, NULL, L"AAA");
	}
	else
	{
		MessageBox(NULL, L"已经检测到有一个实例运行,即将退出", 0, 0);
		return 0;
	}
    return 0;
}

如何干掉微信防多开

脚本版

新建一个txt文件,然后在txt上复制下面的代码

@echo off
start /d "C:\Program Files (x86)\Tencent\WeChat" WeChat.exe
start /d "C:\Program Files (x86)\Tencent\WeChat" WeChat.exe
exit

然后将后缀改为.bat,运行

在这里插入图片描述

此时已经打开了两个微信。这种方法的原理就是在微信创建互斥体之前把微信抢先多开。

调试器版

破解微信多开的关键就在于CreateMutex这个函数,详细解释如下:

HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针
BOOL bInitialOwner, // 初始化互斥对象的所有者
LPCTSTR lpName // 指向互斥对象名的指针
);

这个函数在创建互斥体的时候需要指定一个互斥对象的名称,那么如果我们能注入一个dll,然后让互斥体的名称随机改变,不就能达到多开微信的目的吗?

直接用OD打开微信,在CreateMutex函数下断点,我们需要找到微信创建的互斥体名

在这里插入图片描述

直接F9,程序断下(微信会创建多个互斥体,如果看见互斥体名称为NULL 继续F9即可)

在这里插入图片描述

可以看到微信创建了一个名为_WeChat_App_Instance_Identity_Mutex_Name的互斥体。我们临时修改这个名称看看能否实现微信多开

在这里插入图片描述

在这里插入图片描述

用CE添加互斥体名称的地址,当然你也可以直接在OD中修改(用CE修改要方便一点),然后修改互斥体名称

在这里插入图片描述

返回到OD,可以看到此时名称已经修改成功

在这里插入图片描述

清除断点,按F9运行,然后再打开微信

在这里插入图片描述

此时已经成功开启两个微信

关闭Mutex版

在这里插入图片描述

用PCHunter打开微信,然后点击右键查看->查看句柄,按照句柄名排序

在这里插入图片描述

找到这个用于防多开的句柄,右键->关闭句柄。然后再次打开微信

在这里插入图片描述

成功开启了两个微信

补丁版

用OD载入微信,在CreateMutexW函数下断点,

在这里插入图片描述

按F9让程序运行,等待断点断下

在这里插入图片描述

然后点击K查看调用堆栈

在这里插入图片描述

找到这个地址在堆栈中跟随地址

在这里插入图片描述

然后在这个地址上按Enter键
在这里插入图片描述

将这一行的je修改为jmp,接着复制到可执行文件,接着替换掉原来的dll

在这里插入图片描述

此时,微信可以开任意多个

在这里插入图片描述

目前微信机器人的成品已经发布,需要代码请移步Github。还请亲们帮忙点个star

https://github.com/TonyChen56/WeChatRobot

展开阅读全文

没有更多推荐了,返回首页