微信低版本登錄,有一臺老的電腦用的版本是2.6.0.56,因為有聊天記錄,并且電腦比較老,不打算升級新版本,但是老版本提示.
image.png
查資料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進制,開始掃描
image.png
我們把wechatwin.dll作為偏移的地址保存到下面, 把這幾個地址內存值得修改為3.9.10.27 版本計算出的16進制:63090A1B
image.png
image.png
修改完成后,掃碼登錄.
登錄成功.
代碼實現
思路
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;