微信低版本登录,有一台老的电脑用的版本是2.6.0.56,因为有聊天记录,并且电脑比较老,不打算升级新版本,但是老版本提示.
查资料https://www.52pojie.cn/forum.php?mod=viewthread&tid=1400757得知
微信版本号2.6.0.56在内存中用16进制通过算法表示为0x62060038,这个数字怎么来的呢?
其实就是几个数字异或计算,看下面
计算方式:0x60000000 ^ 版本号前3位16进制表示 ^ 末尾版本号16进制表示
前三位版本号2.6.0写作0x02060000
末尾版本号56十六进制写作0x38
0x60000000 ^ 0x02060000 ^ 0x38 = 0x62060038
2.6.0.56在内存中就是0x62060038
我们把需要一个新版本号3.9.10.27计算得0x63090A1B,如下
#3.9.10.27版本计算
0x60000000 ^ 0x03090A00 ^ 0x1B = 0x63090A1B
是不是还挺简单.
手动操作
打开微信二维码登录界面,然后打开ce加载weichat.exe的内存.
接下来在ce中搜索0x62060038这个值,把他修改为新版本的数值,就可以用修改后的新版本号登录了
勾选16进制,开始扫描
我们把wechatwin.dll作为偏移的地址保存到下面, 把这几个地址内存值得修改为3.9.10.27 版本计算出的16进制:63090A1B
修改完成后,扫码登录.
登录成功.
代码实现
思路
1.首选获取wechatwin.dll的内存地址
2.根据ce里面显示版本数值的那4个地址偏移,修改内存值
从上面ce中扫描得知微信版本号所在内存地址偏移
WeChatWin.dll+FC576C
WeChatWin.dll+FC9E08
WeChatWin.dll+FCA880
WeChatWin.dll+FD98F4
DWORD g_hModule = GetModuleHandle(_T("WeChatWin.dll"));
DWORD dwAddr = (DWORD)g_hModule + 0xFC576C;
DWORD *p = (DWORD*)dwAddr;
*p = 0x63090A1B;