war3多开的实现

好孩子不怎么玩游戏,就拿这个练下手了,看郁的教程装了个热血,那个直接SetWindowText然后将游戏换个目录就可以多开。

先运行一个Frozen Throne.exe,然后再运行一个提示“魔兽争霸资料片:冰封王座已经运行”,OD载入bp MessageBoxA下断,执行后ait+f9返回用户代码

004010AE  |.  6A 00         PUSH 0                                   ; /Style = MB_OK|MB_APPLMODAL
004010B0  |.  8D4C24 40     LEA ECX,DWORD PTR SS:[ESP+40]            ; |
004010B4  |.  50            PUSH EAX                                 ; |Title
004010B5  |.  51            PUSH ECX                                 ; |Text
004010B6  |.  6A 00         PUSH 0                                   ; |hOwner = NULL
004010B8  |.  FF15 34714000 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
004010BE  |.  8B5424 10     MOV EDX,DWORD PTR SS:[ESP+10]
004010C2  |.  52            PUSH EDX                                 ; /hObject
004010C3  |.  FF15 58704000 CALL DWORD PTR DS:[<&KERNEL32.CloseHandl>; \CloseHandle


看到CloseHandle没,应该是使用的创建互斥对象来防多开的,向上找,看到了GetLastError了

0040103C  |.  FFD5          CALL EBP                                 ; [GetLastError
0040103E  |.  3D B7000000   CMP EAX,0B7
00401043  |.  75 1A         JNZ SHORT Frozen_T.0040105F


果断JNZ改为JMP,上面看到使用的是CreateEvent。保存修改,运行下,不行,又出来错误提示“请核实您的冰封王座光盘已在光盘驱动器中,然后点击重试”,OD载入修改好后的Frozen Throne.exe,发现是创建了个进程,Frozen Throne.exe就相当于个loader,那我们直接分析war3.exe吧

先运行一个war3.exe,然后再运行一个提示“warcraft III was unable to initialize”,od载入bp MessageBoxA,F9运行,断下,ALT+F9返回用户代码,弹出那个窗口了,所在的是GAME.DLL这个模块,在附近没有发现可以跳过这个CALL的地方,按CTRL+F9执行到返回,往上拉可以看到“warcraft III was unable to initialize“这个字符串了,CTRL+F9继续执行到返回

6F00974A    85C0            TEST EAX,EAX
6F00974C    74 0F           JE SHORT Game.6F00975D
6F00974E    E8 ED270000     CALL Game.6F00BF40
6F009753    33C9            XOR ECX,ECX
6F009755    E8 66D1FFFF     CALL Game.6F0068C0                       ;返回到这个CALL
6F00975A    33C0            XOR EAX,EAX
6F00975C    C3              RETN
6F00975D    B9 9881886F     MOV ECX,Game.6F888198                    ; ASCII "Warcraft III Game Application"

在这个CALL的上面看到了个跳转,改为强制跳转试下,保存修改,成功多开

 

你可能感兴趣的:(游戏,c,user,null,application)