前言
网上有一堆微信电脑版多开、防撤回等破解补丁,可以实现类似的功能,但是微信是比较涉及个人隐私的社交软件,所以网上公开的补丁基本都不敢用,万一自带木马后门什么的就惨了。
泽东同志说得好:自己动手,丰衣足食!,所以核总在这里教大家纯手工修改方法。
准备工作
1. OllyDbg 或 OllyICE(OllyDbg 爱好者二次开发升级版本) 等反汇编软件。
2. 安装好微信电脑版,提取安装路径文件夹中的 WeChatWin.dll 备用。
使用 OllyDbg 纯手工修改微信电脑版 WeChatWin.dll 的汇编代码,实现无限多开和消息防撤回功能,并且有撤回提示。
该方法适用于微信电脑版(Windows PC 版)近几年的所有版本,甚至未来新版本。
有一定的技术门槛,需要了解基本的反汇编破解知识,如果不能熟练掌握 OllyDbg 等反汇编软件,那么底下内容就可以不用看了。
破解流程
1.解除多开限制
微信启动后,会先尝试创建互斥体,如果创建成功则直接启动微信,否则依次判断 WeChatMainWndForPC 和 WeChatLoginWndForPC 两个窗口是否存在,如果存在则使用 BringWindowToTop 函数将其置顶并弹出,如果不存在则启动微信。
上述两个窗口分别代表的是微信的主界面窗口和登陆界面窗口,如果一个微信实例已经存在,则势必处于这两种状态之一。
微信判断是否重复启动运行的条件:
1.如果互斥体创建成功,则直接启动微信。
2.如果互斥体创建失败,如果查找微信相关窗口,找到则置顶并退出,未找到则启动微信。
用伪代码表示一下判断逻辑:
1
2
3
4
5
6
7
8
9
10
11
|
// 尝试创建互斥体
if (CreateMutex() == SUCCESS) {
// 创建成功则启动微信
} else {
// 创建失败则尝试查找窗口
if (FindWindow() == SUCCESS) {
// 找到微信窗口,则将已有窗口置顶,然后结束程序
} else {
// 未找到微信窗口,则启动微信
}
}
|
所以破解思路就很简单了,首先使用 OllyDbg 查找所有参考文本字符串:
WeChatMainWndForPC 或 WeChatLoginWndForPC
然后找到以下这段代码并修改(看右侧的注释说明,需要修改 1 处星标的行):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
5B36F8B0 /$ E8 6B000000 call WeChatWi.5B36F920 创建互斥体
5B36F8B5 84C0 test al,al 判断互斥体是否创建成功
5B36F8B7 |. 74 56 je short WeChatWi.5B36F90F ★ je 改为 jmp,不管是否创建成功都强制跳转,并且跳过底下的窗口查找判断
5B36F8B9 |. 56 push esi
5B36F8BA |. 6A 00 push 0x0 ; /Title = NULL
5B36F8BC |. 68 2819105C push WeChatWi.5C101928 ; |Class = "WeChatMainWndForPC"
5B36F8C1 |. FF15 1CD8F15B call dword ptr ds:[<&USER32.FindWindowW>>; \FindWindowW
5B36F8C7 |. 8BF0 mov esi,eax ; WeChatWi.5A960000
5B36F8C9 |. 85F6 test esi,esi
5B36F8CB |. 75 12 jnz short WeChatWi.5B36F8DF > 如果找到窗口 WeChatMainWndForPC 则将该窗口切换到顶层然后退出(按理说修改这个字符串也可以实现绕过多开检测)
5B36F8CD |. 50 push eax ; /Title = "婍?"
5B36F8CE |. 68 9C0D105C push WeChatWi.5C100D9C ; |Class = "WeChatLoginWndForPC"
5B36F8D3 |. FF15 1CD8F15B call dword ptr ds:[<&USER32.FindWindowW>>; \FindWindowW
5B36F8D9 |. 8BF0 mov esi,eax ; WeChatWi.5A960000
5B36F8DB |. 85F6 test esi,esi
5B36F8DD |. 74 2B je short WeChatWi.5B36F90A > 如果找到窗口 微信:WeChatLoginWndForPC 则将该窗口切换到顶层然后退出(按理说修改这个字符串也可以实现绕过多开检测)
5B36F8DF |> 6A 01 push 0x1
5B36F8E1 |. 56 push esi
5B36F8E2 |. FF15 88D7F15B call dword ptr ds:[<&USER32.SwitchToThis>; user32.SwitchToThisWindow 以下代码为置顶已登录的窗口
5B36F8E8 |. 56 push esi ; /hWnd = 00000001
5B36F8E9 |. FF15 8CD7F15B call dword ptr ds:[<&USER32.BringWindowT>; \BringWindowToTop
5B36F8EF |. 6A 00 push 0x0 ; /pResult = NULL
5B36F8F1 |. 68 E8030000 push 0x3E8 ; |Timeout = 1000. ms
5B36F8F6 |. 6A 02 push 0x2 ; |Flags = SMTO_NORMAL|SMTO_ABORTIFHUNG
5B36F8F8 |. 6A 00 push 0x0 ; |lParam = 0x0
5B36F8FA |. 6A 00 push 0x0 ; |wParam = 0x0
5B36F8FC |. 68 E00B0000 push 0xBE0 ; |Message = MSG(0xBE0)
5B36F901 |. 56 push esi ; |hWnd = 00000001
5B36F902 |. FF15 74D9F15B call dword ptr ds:[<&USER32.SendMessageT>; \SendMessageTimeoutW
5B36F908 |. 85F6 test esi,esi
5B36F90A |> 0f95c0 setne al
5B36F90D |. 5E pop esi ; LoadDl_1.60001057
5B36F90E |. C3 retn 函数返回(有多开时)
5B36F90F |> 32C0 xor al,al 函数返回(没有多开时)
5B36F911 \. C3 retn
|
2.消息防撤回
消息防撤回,带对方撤回消息提示!
和上边一样,先查找所有参考文本字符串:pStrMsgid value is null
然后找到以下这段代码并修改(看右侧的注释说明,需要修改 1 处星标的行):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
68E854DA |> \8B06 mov eax,dword ptr ds:[esi]
68E854DC |. 8BCE mov ecx,esi
68E854DE |. FF50 18 call dword ptr ds:[eax+0x18]
68E854E1 |. 85C0 test eax,eax ; WeChatWi.68B90000
68E854E3 |.^ 74 9D je short WeChatWi.68E85482
68E854E5 |. 68 F4C7336A push WeChatWi.6A33C7F4 ; ASCII "revokemsg"
68E854EA |. 8BC8 mov ecx,eax ; WeChatWi.68B90000
68E854EC |. E8 0F2F7700 call WeChatWi.695F8400
68E854F1 |. 8BF0 mov esi,eax ; WeChatWi.68B90000
68E854F3 |. 85F6 test esi,esi
68E854F5 |.^ 74 8B je short WeChatWi.68E85482
68E854F7 |. 68 F8D4336A push WeChatWi.6A33D4F8 ; ASCII "newmsgid"
68E854FC |. 8BCE mov ecx,esi
68E854FE |. E8 FD2E7700 call WeChatWi.695F8400
68E85503 |. 85C0 test eax,eax ; WeChatWi.68B90000 ★ 修改为 xor eax,eax
68E85505 |. 74 7B je short WeChatWi.68E85582 > PS:或者把 je 改为 jne 也可以?待测试!
68E85507 |. 8BC8 mov ecx,eax ; WeChatWi.68B90000
68E85509 |. E8 82377700 call WeChatWi.695F8C90
68E8550E |. 85C0 test eax,eax ; WeChatWi.68B90000
68E85510 |. 75 62 jnz short WeChatWi.68E85574
68E85512 |. 0F1005 98F52B>movups xmm0,dqword ptr ds:[0x6A2BF598]
68E85519 |. 83EC 10 sub esp,0x10
68E8551C |. BA C0C3336A mov edx,WeChatWi.6A33C3C0 ; ASCII "02_manager\ChatMgr.cpp"
68E85521 |. 8BC4 mov eax,esp
68E85523 |. B9 02000000 mov ecx,0x2
68E85528 |. 83EC 10 sub esp,0x10
68E8552B |. 0F1100 movups dqword ptr ds:[eax],xmm0
68E8552E |. 8BC4 mov eax,esp
68E85530 |. 83EC 10 sub esp,0x10
68E85533 |. 0F1100 movups dqword ptr ds:[eax],xmm0
68E85536 |. 8BC4 mov eax,esp
68E85538 |. 83EC 10 sub esp,0x10
68E8553B |. 0F1100 movups dqword ptr ds:[eax],xmm0
68E8553E |. 8BC4 mov eax,esp
68E85540 |. 83EC 10 sub esp,0x10
68E85543 |. 0F1100 movups dqword ptr ds:[eax],xmm0
68E85546 |. 8BC4 mov eax,esp
68E85548 |. 83EC 10 sub esp,0x10
68E8554B |. 0F1100 movups dqword ptr ds:[eax],xmm0
68E8554E |. 8BC4 mov eax,esp
68E85550 |. 68 E0D4336A push WeChatWi.6A33D4E0 ; ASCII "pStrMsgid value is null"
68E85555 |. 68 F8C3336A push WeChatWi.6A33C3F8 ; ASCII "ChatMgr"
68E8555A |. 68 C4D4336A push WeChatWi.6A33D4C4 ; ASCII "ChatMgr::parseRevokeContent"
68E8555F |. 68 8B080000 push 0x88B
68E85564 |. 0F1100 movups dqword ptr ds:[eax],xmm0
68E85567 |. E8 54732900 call WeChatWi.6911C8C0
68E8556C |. 83C4 70 add esp,0x70
68E8556F |.^ E9 0EFFFFFF jmp WeChatWi.68E85482
|
3.破解完成
复制所有修改并保存到文件,然后替换 WeChatWin.dll 原文件,重新运行微信即可。
下载地址
不提供任何破解文件下载,免得腾讯律师函警告。
参考资料
微信PC端多开的秘密
微信PC段防撤回DLL(WeChatWin.dll)修改测试
深扒微信多开的秘密后,我竟然发现了个 bug
微信 最新 电脑版 绿色修改版,和官方同步更新,有现成破解补丁下载,安全性自测!
微信 最新 电脑版 正式版+测试版+开发版(多开+防撤回,带撤回提示),和官方同步更新,有现成破解补丁下载,安全性自测!
文章作者
Nuclear'Atk
上次更新
2021-04-26
许可协议
Nuclear'Atk(核攻击)网络安全实验室版权所有,转载请注明出处。