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

文章目录

    • 微信版本
    • 防多开原理
    • 如何干掉微信防多开
      • 脚本版
      • 调试器版
      • 关闭Mutex版
      • 补丁版

微信版本

PC微信逆向:四种姿势教你干掉防多开_第1张图片

防多开原理

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

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,运行

PC微信逆向:四种姿势教你干掉防多开_第2张图片

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

调试器版

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

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

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

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

在这里插入图片描述

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

PC微信逆向:四种姿势教你干掉防多开_第3张图片

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

PC微信逆向:四种姿势教你干掉防多开_第4张图片

PC微信逆向:四种姿势教你干掉防多开_第5张图片

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

PC微信逆向:四种姿势教你干掉防多开_第6张图片

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

PC微信逆向:四种姿势教你干掉防多开_第7张图片

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

PC微信逆向:四种姿势教你干掉防多开_第8张图片

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

关闭Mutex版

PC微信逆向:四种姿势教你干掉防多开_第9张图片

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

PC微信逆向:四种姿势教你干掉防多开_第10张图片

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

PC微信逆向:四种姿势教你干掉防多开_第11张图片

成功开启了两个微信

补丁版

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

PC微信逆向:四种姿势教你干掉防多开_第12张图片

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

PC微信逆向:四种姿势教你干掉防多开_第13张图片

然后点击K查看调用堆栈

PC微信逆向:四种姿势教你干掉防多开_第14张图片

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

PC微信逆向:四种姿势教你干掉防多开_第15张图片

然后在这个地址上按Enter键
PC微信逆向:四种姿势教你干掉防多开_第16张图片

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

PC微信逆向:四种姿势教你干掉防多开_第17张图片

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

PC微信逆向:四种姿势教你干掉防多开_第18张图片

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

https://github.com/TonyChen56/WeChatRobot

你可能感兴趣的:(软件逆向)