微信电脑端 3.8.1.26 提示版本号过低需要升级

需要使用 CE 修改器搜索找到基准地址。

用以下计算工具计算微信版本 3.8.1.26 加尾号计算为 0x6308011a


<!DOCTYPE html>
<html>
<head>
    <title>版本号转换工具</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .container { max-width: 600px; margin: 0 auto; }
        .input-group { margin-bottom: 15px; }
        input, button { margin: 5px; padding: 5px; }
        .result { margin-top: 15px; padding: 10px; background: #f0f0f0; }
    </style>
</head>
<body>
    <div class="container">
        <h2>版本号转换工具</h2>
        
        <div class="input-group">
            <h3>版本号转十六进制</h3>
            <input type="text" id="version" placeholder="版本号 (例如: 3.9.8.25)" />
            <button onclick="convertVersion()">转换</button>
            <div id="versionResult" class="result"></div>
        </div>

        <div class="input-group">
            <h3>十六进制转版本号</h3>
            <input type="text" id="hex" placeholder="十六进制 (例如: 0x63090819)" />
            <button onclick="convertHex()">转换</button>
            <div id="hexResult" class="result"></div>
        </div>
    </div>

    <script>
        function versionToHex(version, tail) {
            if (!/^\d+\.\d+\.\d+\.\d+$/.test(version)) {
                throw new Error('版本号格式必须为 x.x.x.x');
            }
            
            let [major, minor, patch, build] = version.split('.').map(Number);
            
            if (major > 255 || minor > 255 || patch > 255 || build > 255) {
                throw new Error('版本号各部分不能超过255');
            }
            
            let baseHex = `0x6${major.toString(16).padStart(1, '0')}${minor.toString(16).padStart(2, '0')}${patch.toString(16).padStart(2, '0')}00`;
            
            let tailHex = build.toString(16).padStart(2, '0');
            return {
                baseHex: baseHex,
                finalHex: (parseInt(baseHex, 16) | parseInt(tailHex, 16)).toString(16).padStart(8, '0')
            };
        }

        function hexToVersion(hex) {
            hex = hex.replace('0x', '').padStart(8, '0');
            
            if (!/^[0-9a-fA-F]{8}$/.test(hex)) {
                throw new Error('无效的十六进制格式');
            }
            
            if (hex[0] !== '6') {
                throw new Error('十六进制必须以6开头');
            }
            
            const major = parseInt(hex[1], 16);
            const minor = parseInt(hex.substr(2, 2), 16);
            const patch = parseInt(hex.substr(4, 2), 16);
            const tail = parseInt(hex.substr(6, 2), 16);
            
            return {
                version: `${major}.${minor}.${patch}.${tail}`,
                tail: tail
            };
        }

        function convertVersion() {
            const versionInput = document.getElementById('version').value;
            const result = document.getElementById('versionResult');
            
            try {
                const converted = versionToHex(versionInput);
                result.innerHTML = `基础值(去掉尾号): ${converted.baseHex}<br>完整值(包含尾号): 0x${converted.finalHex}`;
            } catch (error) {
                result.innerHTML = `错误: ${error.message}`;
            }
        }

        function convertHex() {
            const hexInput = document.getElementById('hex').value;
            const result = document.getElementById('hexResult');
            
            try {
                const converted = hexToVersion(hexInput);
                result.innerHTML = `版本号: ${converted.version}<br>尾号: ${converted.tail}`;
            } catch (error) {
                result.innerHTML = `错误: ${error.message}`;
            }
        }
    </script>
</body>
</html>

CE 查询修改,找到六个地址,WechatWin.dll+XXXXX 这样

然后照着网上写个 python 写个修改工具

from pymem import Pymem

def fix_version(pm: Pymem):
    WeChatWindll_base = 0
    for m in list(pm.list_modules()):
        path = m.filename
        if path.endswith("WeChatWin.dll"):
            WeChatWindll_base = m.lpBaseOfDll
            break
            
    # 您提供的地址偏移量
    ADDRS = [
        0x2C43B7C,
        0x2C6421C,
        0x2C64370,
        0x2C7D238,
        0x2C80384,
        0x2C818C4
    ]
    
    for offset in ADDRS:
        addr = WeChatWindll_base + offset
        v = pm.read_uint(addr)
        if v == 0x63090a1b:  # 如果已经是目标版本,跳过
            continue
        elif v != 0x6308011a:  # 检查是否为当前版本 3.8.1.26
            raise Exception("版本不匹配,当前代码只适配微信版本3.8.1.26")
        pm.write_uint(addr, 0x63090a1b)  # 修改为目标版本 3.9.10.27
    print("修改完成,可以扫码登录了")

if __name__ == "__main__":
    try:
        pm = Pymem("WeChat.exe")
        fix_version(pm)
    except Exception as e:
        print(f"详细错误信息: {str(e)}")

可惜我不会逆向。

评论已关闭