VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 5642|回复: 11

QQ游戏 多开、去反外挂、实名认证弹框广告补丁

[复制链接]
 楼主| 发表于 2012-1-21 15:55:11 | 显示全部楼层 |阅读模式
本帖最后由 JuncoJet 于 2012-1-21 16:05 编辑

有源码  可以下载C-Free或者 GCC来自行编译
使用只要复制dll到qq游戏目录里覆盖就行了,如果是qqgame老版本的需要手工添加导入表

TenSLX.rar (8.48 KB, 下载次数: 67)

本帖被以下淘专辑推荐:

 楼主| 发表于 2012-1-21 16:12:34 | 显示全部楼层
貌似退出时的 MacromediaFlashPlayerActiveX 窗口 WM_CLOSE 没用啊…… 没道理

点评

貌似最后那么Flash广告没调用 ShowWindow,失策啊  发表于 2012-1-21 16:23
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-1-21 16:39:58 | 显示全部楼层
  1. /*
  2.                 if(GetClassName(hWnd,Name,255)){
  3.                         #ifdef _DEBUG
  4.                                 OutputDebugString("ClassName=True");
  5.                                 OutputDebugString(Name);
  6.                         #endif
  7.                         if(strstr(Name,"AtlAxWin")){
  8.                                 #ifdef _DEBUG
  9.                                         OutputDebugString("FlashPlayer=AfxLsT");
  10.                                 #endif                       
  11.                                 goto F;                               
  12.                         }
  13.                 }*/
  14.                 if(GetWindowText(hWnd,Name,255)){
  15.                         #ifdef _DEBUG
  16.                                 OutputDebugString("WindowText=True");
  17.                         #endif
  18.                         if(strstr(Name,"信息")||strstr(Name,"SkinWnd")){
  19.                                 #ifdef _DEBUG
  20.                                         OutputDebugString("WindowText=信息");
  21.                                         //__asm("int 3");
  22.                                 #endif
  23.                                 goto F;                                       
  24.                         }
  25.                 }
复制代码
貌似不需要类名了,直接Hook SkinWnd的窗口就ok了
回复 支持 反对

使用道具 举报

发表于 2012-1-21 16:44:48 | 显示全部楼层
自言自语?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-1-22 09:01:30 | 显示全部楼层
本帖最后由 JuncoJet 于 2012-1-22 20:13 编辑

编译更新

TenSLX.rar

2.43 KB, 下载次数: 526

回复 支持 反对

使用道具 举报

发表于 2012-1-22 11:00:48 | 显示全部楼层
新年快乐!

点评

新年快乐  发表于 2012-1-23 17:00
回复 支持 反对

使用道具 举报

发表于 2012-3-26 17:57:11 | 显示全部楼层
BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
/*
        switch (reason)
        {
                case DLL_PROCESS_ATTACH:
                        APIHOOK();
                break;
                case DLL_PROCESS_DETACH:
                break;
                case DLL_THREAD_ATTACH:
                break;
                case DLL_THREAD_DETACH:
                break;
        }*/
        if(reason==1)
                APIHOOK();
        /* Returns TRUE on success, FALSE on failure */
        return TRUE;
}

/*HANDLE GetProcAddr(char *Dll,char *API)
{
        HANDLE hDll;
        hDll=LoadLibrary(Dll);
        return GetProcAddress(hDll,API);
}*/

void WINAPI MyKiFSC()
{
/*        __asm("int 3\n"
                //"push eax"
                );*/
               
        #ifdef _DEBUG
                //char *tmp=malloc(255);
                OutputDebugString("MyKiFSC O(∩_∩)O哈哈~");
        #endif
       
        HWND hWnd;int nCmdShow;
        __asm(
                "mov eax,[ebp+3*4]\n"
                "mov ebx,[ebp+4*4]"
                :"=a"(hWnd),"=b"(nCmdShow));
/*
        #ifdef _DEBUG
                char *tmp=malloc(255);
                wsprintf(tmp,"hWnd=%x",hWnd);
                OutputDebugString(tmp);
        #endif*/       
        if(nCmdShow){
                #ifdef _DEBUG
                        OutputDebugString("nCmdShow=True");
                #endif
                char Name[255];
                if(GetClassName(hWnd,Name,255)){
                        #ifdef _DEBUG
                                OutputDebugString("ClassName=True");
                        #endif
                        if(strstr(Name,"MacromediaFlashPlayerActiveX")){
                                #ifdef _DEBUG
                                        OutputDebugString("ClassName=AfxLsT");
                                #endif                       
                                goto F;                               
                        }
                }
                if(GetWindowText(hWnd,Name,255)){
                        #ifdef _DEBUG
                                OutputDebugString("WindowText=True");
                        #endif
                        if(strstr(Name,"信息")){
                                #ifdef _DEBUG
                                        OutputDebugString("WindowText=信息");
                                        //__asm("int 3");
                                #endif
                                goto F;                                       
                        }
                }
                goto T;
        }else{
T:                __asm(
                        //"add esp,0x100\n"
                        "lea esp,[ebp-8]\n"
                        "pop ebx\n"
                        "pop esi\n"
                        "pop ebp\n"
                        "jmp %1\n"
                        ::"a"(gEAX),"d"(gKiFSC));
        }
F:
        PostMessage(hWnd,WM_CLOSE,0,0);
}

/*
BOOL BeWriteable(PVOID Addr,DWORD Size)
{
        PDWORD lpflOldProtect;
        return VirtualProtect(Addr,Size,PAGE_EXECUTE_READWRITE,lpflOldProtect);       
}*/

HANDLE WINAPI MyCM(
    DWORD lpMutexAttributes,
    BOOL bInitialOwner,
    LPCTSTR lpName)
{
        //asm("jmp %0"::"r":BeWriteable);
        #ifdef _DEBUG
                OutputDebugString(lpName);
        #endif
        if(lpName&&strstr(lpName,"03/01/2003")){
                //CM CallCM=(CM)OldCM;
                char myName[40];
                wsprintf(myName,"%s%x%",lpName,GetTickCount());
                return OldCM(lpMutexAttributes,bInitialOwner,myName);
        }
        return OldCM(lpMutexAttributes,bInitialOwner,lpName);
}

void APIHOOK()
{
        //GetProcAddr("USER32.DLL","")
        #ifdef _DEBUG
                char tmp[255];
        #endif
        DWORD CMAddr=**(DWORD**)((DWORD)CreateMutex+2);
        DWORD SWAddr=**(DWORD**)((DWORD)ShowWindow+2);
        //CMAddr=*(DWORD*)CMAddr;
        DWORD *KiFSC=(DWORD*)((char*)SWAddr+6);
        DWORD EAX=*(DWORD*)((char*)SWAddr+1);
       
        #ifdef _DEBUG
                wsprintf(tmp,"[TenSLX]CreateMutex:%x\nMyCM %x %x\n",CMAddr,(DWORD)MyCM,(DWORD)&MyCM);
                OutputDebugString(tmp);
                wsprintf(tmp,"[TenSLX]ShowWindow:%x\nKiFSC:%x\nEAX:%x\n",
                                SWAddr,*KiFSC,EAX);
                OutputDebugString(tmp);
        #endif
        /*BeWriteable((PVOID)CMAddr,4);
        //BeWriteable
        *(char*)CMAddr=0x90;//(DWORD)MyCM;
        *((char*)CMAddr+1)=0x90;//(DWORD)MyCM;
        */
        //DWORD NOP=0x90909090;
        DWORD pBRT;
        char JMPC[]={0xE9,0xEB};
        //asm("int3");
        //if(*(DWORD*)(CMAddr-5)==NOP){
        //CreateMutex的Hook
                char JMP[7],*pJMP;
                pJMP=JMP;
                *pJMP=JMPC[0];
                *(DWORD*)((DWORD)pJMP+1)=(DWORD)MyCM-CMAddr;
                //WriteProcessMemory((HANDLE)-1,(void*)(CMAddr-5),pJMP,5,&pBRT);
                *(char*)((DWORD)pJMP+5)=JMPC[1];
                *(char*)((DWORD)pJMP+6)=(char)((CMAddr-5)-(CMAddr+2));               
                WriteProcessMemory((HANDLE)-1,(void*)(CMAddr-5),pJMP,7,&pBRT);
                OldCM=(CM)(CMAddr+2);
        //}
        //ShowWindow的Hook
                pMyKiFSC=(DWORD*)MyKiFSC;
                ppMyKiFSC=&pMyKiFSC;
                //*KiFSC=pMyKiFSC;
                //DWORD *ppMyKiFSC=pMyKiFSC;
                #ifdef _DEBUG
                        wsprintf(tmp,"pMyKiFSC %x %x %x\nKiFSC %x %x\nppMyKiFSC %x %x %x",
                                        &pMyKiFSC,pMyKiFSC,MyKiFSC,
                                        KiFSC,*KiFSC,&ppMyKiFSC,ppMyKiFSC,*ppMyKiFSC);
                        OutputDebugString(tmp);
                #endif
                gKiFSC=**(DWORD**)KiFSC;
                gEAX=EAX;
                WriteProcessMemory((HANDLE)-1,KiFSC,&ppMyKiFSC,4,&pBRT);
        //
}

void GetTSObject(){}


DWORD CMAddr=**(DWORD**)((DWORD)CreateMutex+2);
DWORD SWAddr=**(DWORD**)((DWORD)ShowWindow+2);
API的地址为什么要+2呢?

"jmp %1\n"
::"a"(gEAX),"d"(gKiFSC));
这二段看不懂 大大能解释一下吗?
VC的好像 没这种写法....
回复 支持 反对

使用道具 举报

发表于 2012-3-26 17:59:29 | 显示全部楼层
DWORD CMAddr=**(DWORD**)((DWORD)CreateMutex+2);
DWORD SWAddr=**(DWORD**)((DWORD)ShowWindow+2);
API的地址为什么要+2呢?

"jmp %1\n"
::"a"(gEAX),"d"(gKiFSC));
这二段看不懂 大大能解释一下吗?
VC的好像 没这种写法....

KiFSC函数  是QQ游戏的反外挂函数吗?

点评

KiFSC 是系统的 KiFastSystemCall 的地址  发表于 2012-3-27 09:04
a就是使用eax寄存器,d就是edx,gEAX gKiFSC是两个全局变量,里面保存的是数值和地址。%1是第二个参数 %0是第一个参数。如果没记错的话  发表于 2012-3-27 09:01
回复 支持 反对

使用道具 举报

发表于 2012-3-26 18:14:51 | 显示全部楼层
someon2 发表于 2012-3-26 17:59
DWORD CMAddr=**(DWORD**)((DWORD)CreateMutex+2);
DWORD SWAddr=**(DWORD**)((DWORD)ShowWindow+2);
API ...

LZ不是写了么,要用GCC编译,这不是VC语法,而是GCC语法

点评

这个应该是jmp 导入表地址 jmp [xxx ] 占2字节,后面是导入表的地址  发表于 2012-3-27 08:54
回复 支持 反对

使用道具 举报

发表于 2012-3-27 13:47:59 | 显示全部楼层
学习了谢谢。
不过KiFastSystemCall 系统函数干吗用的…………搜不到说明..

点评

万能的 ……  发表于 2012-3-27 14:30
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2020-6-5 18:20

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表