admin 发表于 2017-12-14 10:58:46

QQ勋章墙全版本通用补丁v2.0 (附源码) 配图+下载地址

QQ勋章墙全版本通用补丁v2.0 (附源码) 配图+下载地址

本工具非写入预定文件,而是在当前版本的dll基础上修改,保证了稳定性
在腾讯修改勋章墙功能前,本工具是可以一直用下去的


本地测试通过,测试环境:winxp,windows10 x64
python编译版本:2.7.14

下载地址:https://pan.baidu.com/s/1hsnJVdq 密码:boav

使用方法:
1. 下载exe直接运行即可,无需关闭QQ。
2. 电脑有python环境的下载源码,自行运行。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
import os
import _winreg
from time import sleep
import subprocess
 
 
Debug = False
version = '2.0'
 
def main():
    qqdir = ''
    dllfile = ''
     
    try:
        if ('PROGRAMFILES(X86)' in os.environ) == True:
            key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\Wow6432Node\Tencent\QQ2009",)
        else:
            key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\Tencent\QQ2009",)
    except WindowsError, e:
        print('can\'t find qqdir, maybe not install')
    else:
        qqdir = _winreg.QueryValueEx(key, "Install")
        if Debug == True:
            print(' ' + qqdir)
        if qqdir != '':
            dllfile = qqdir + "\\bin\\OPMiscDll.dll"
            print(' qqdir: ' + qqdir)
            crack(dllfile)
        else:
            print(' can\'t find qqdir, maybe file is missing')
         
def crack(path):
    print(' find file succeed: OPMiscDll.dll')
    print(' start kill progress: QQExternal.exe')
     
    cmd = "taskkill /F /IM QQExternal.exe 2>nul 1>nul"
    ret = subprocess.Popen(cmd, shell=True)
    ret.wait()
     
    f = open(path, 'rb')
    filecontent = f.read()
    f.close()
    byte = bytearray(filecontent)
    if len(byte) == 0:
        print(' read file failed: OPMiscDll.dll')
    else:
        result = modify(byte)
        if filecontent != result:
            g = open(path + '.new', 'wb')
            g.write(result)
            g.close()
         
            if os.path.exists(path):
                if os.path.exists(path + '.bak'):
                    os.remove(path + '.bak')
                sleep(1)
                if Debug == True:
                    print(' ' + path)
                print(' backup file to OPMiscDll.dll.bak')
                os.rename(path, path + '.bak')
            if os.path.exists(path + '.new'):
                print(' build new OPMiscDll.dll')
                os.rename(path + '.new', path)
     
def modify(byte):
    index = find(1, 0, ['b3', '01', 'eb', '02', '32', 'db', '0f'], byte);
    if (index != 0):
        index2 = find(2, index, ['ff', 'ff', '8a', 'd8', '0f', 'b6', 'd3'], byte);
        if (index2 != 0):
            index3 = find(3, index2, ['32', 'db', 'eb', '02', 'b3', '01', '0f'], byte);
            if (index3 != 0):
                index4 = find(4, index3, ['b3', '01', 'eb', '02', '32', 'db', '0f'], byte);
                if (index4 != 0):
                    index5 = find(5, index4, ['00', '00', '8a', 'd8', '0f', 'b6', 'd3'], byte);
                    if (index5 != 0):
                        index6 = find(6, index5, ['00', '00', '8a', 'd8', '0f', 'b6', 'd3'], byte);
 
    if (index != 0 and index2 != 0 and index3 != 0 and index4 != 0 and index5 != 0 and index6 != 0):
        byte = int('b3', 16)
        byte = int('01', 16)
        byte = int('b3', 16)
        byte = int('01', 16)
        byte = int('b3', 16)
        byte = int('01', 16)
        byte = int('b3', 16)
        byte = int('01', 16)
        byte = int('b3', 16)
        byte = int('01', 16)
        byte = int('b3', 16)
        byte = int('01', 16)
        print(' patch succeed')
    else:
        print(' patch failed, maybe it already patched')
    return byte
 
def find(id, index, param, source):
    result = 0
     
    for i in range(index, len(source)):
                 
        if source == int(param, 16):
            if source == int(param, 16):
                if source == int(param, 16):
                    if source == int(param, 16):
                        if source == int(param, 16):
                            if source == int(param, 16):
                                if source == int(param, 16):
                                    if id == 3:
                                        result = int(i)
                                    elif id == 2 or id == 5 or id == 6:
                                        result = int(i + 2)
                                    else:
                                        result = int(i + 4)
                                    print(' find ' + str(id) + ': ' + str(result))
                                    return result
                                 
    return result
                                                                         
if __name__ == '__main__':
    print(" ==========================")
    print(" http://www.52pojie.cn")
    print(" ==========================")
    print(" ")
    print(" medalwall patch... v" + version)
    print(" ")
    main()
    print(" all mission done, Press any key to exit...")
    import msvcrt
    while True:
        if ord(msvcrt.getch()) < 255:
            break

e534093983 发表于 2017-12-15 19:15:34

的点点滴滴多多多多多多多多多多多多多多多多多多多多多多多多多多
页: [1]
查看完整版本: QQ勋章墙全版本通用补丁v2.0 (附源码) 配图+下载地址