首页
社区
课程
招聘
[求助]完美国际使用的是什么自校验方式,修改完的跳转总是不起作用
发表于: 2007-4-3 15:48 5557

[求助]完美国际使用的是什么自校验方式,修改完的跳转总是不起作用

2007-4-3 15:48
5557
如题,前一段时间跟朋友一起玩完美国际版,最近不大玩了,不过每次更新都帮朋友做双开补丁,但前几天更新后按老方法做完后发现还是不能双开,具体如下:

0043C170  /$  8B4424 04     MOV EAX,DWORD PTR SS:[ESP+4]
0043C174  |.  83EC 10       SUB ESP,10
0043C177  |.  A3 745D8E00   MOV DWORD PTR DS:[8E5D74],EAX
0043C17C  |.  8A4424 1C     MOV AL,BYTE PTR SS:[ESP+1C]
0043C180  |.  53            PUSH EBX
0043C181  |.  55            PUSH EBP
0043C182  |.  8B2D 9E5B8E00 MOV EBP,DWORD PTR DS:[8E5B9E]
0043C188  |.  56            PUSH ESI
0043C189  |.  57            PUSH EDI
0043C18A  |.  8B3D 9A5B8E00 MOV EDI,DWORD PTR DS:[8E5B9A]
0043C190  |.  84C0          TEST AL,AL
0043C192  |.  BE 00000080   MOV ESI,80000000
0043C197  |.  75 05         JNZ SHORT elementc.0043C19E
0043C199  |.  BE 0000CE80   MOV ESI,80CE0000
0043C19E  |>  33DB          XOR EBX,EBX
0043C1A0  |.  84C0          TEST AL,AL
0043C1A2  |.  74 05         JE SHORT elementc.0043C1A9
0043C1A4  |.  BB 08000000   MOV EBX,8
0043C1A9  |>  68 80E28900   PUSH elementc.0089E280                                       ;  e
0043C1AE  |.  68 34D58900   PUSH elementc.0089D534                                       ;  e
0043C1B3  |.  FF15 B8448E00 CALL DWORD PTR DS:[8E44B8]                                   ;  USER32.FindWindowW
0043C1B9  |.  85C0          TEST EAX,EAX
0043C1BB      74 1E         JE SHORT elementc.0043C1DB                                          这里以前JE改为JNB就可以了0043C1BD  |.  6A 10         PUSH 10                                                      ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
0043C1BF  |.  68 10C08900   PUSH elementc.0089C010                                       ; |error
0043C1C4  |.  68 44E28900   PUSH elementc.0089E244                                       ; |game is currently running. you can't start another process!
0043C1C9  |.  6A 00         PUSH 0                                                       ; |hOwner = NULL
0043C1CB  |.  FF15 50C68200 CALL DWORD PTR DS:[<&USER32.MessageBoxA>]                    ; \MessageBoxA
0043C1D1  |.  5F            POP EDI                                                      ;  elementc.00400000
0043C1D2  |.  5E            POP ESI
0043C1D3  |.  5D            POP EBP
0043C1D4  |.  32C0          XOR AL,AL
0043C1D6  |.  5B            POP EBX
0043C1D7  |.  83C4 10       ADD ESP,10
0043C1DA  |.  C3            RETN
0043C1DB  |>  8B4C24 24     MOV ECX,DWORD PTR SS:[ESP+24]
0043C1DF  |.  6A 00         PUSH 0
0043C1E1  |.  8B15 28D58900 MOV EDX,DWORD PTR DS:[89D528]                                ;  elementc.0089D534
0043C1E7  |.  51            PUSH ECX
0043C1E8  |.  6A 00         PUSH 0
0043C1EA  |.  6A 00         PUSH 0
0043C1EC  |.  55            PUSH EBP
0043C1ED  |.  57            PUSH EDI
0043C1EE  |.  6A 00         PUSH 0
0043C1F0  |.  6A 00         PUSH 0
0043C1F2  |.  56            PUSH ESI
0043C1F3  |.  68 80E28900   PUSH elementc.0089E280                                       ;  e
0043C1F8  |.  52            PUSH EDX
0043C1F9  |.  53            PUSH EBX
0043C1FA  |.  FF15 A4448E00 CALL DWORD PTR DS:[8E44A4]                                   ;  elementc.006B0F97
0043C200  |.  33DB          XOR EBX,EBX
0043C202  |.  3BC3          CMP EAX,EBX
0043C204  |.  75 0A         JNZ SHORT elementc.0043C210
0043C206  |.  5F            POP EDI
0043C207  |.  5E            POP ESI
0043C208  |.  5D            POP EBP
0043C209  |.  32C0          XOR AL,AL
0043C20B  |.  5B            POP EBX
0043C20C  |.  83C4 10       ADD ESP,10
0043C20F  |.  C3            RETN
0043C210  |>  A3 785D8E00   MOV DWORD PTR DS:[8E5D78],EAX
0043C215  |.  8A4424 2C     MOV AL,BYTE PTR SS:[ESP+2C]
0043C219  |.  84C0          TEST AL,AL
0043C21B  |.  75 61         JNZ SHORT elementc.0043C27E
0043C21D  |.  53            PUSH EBX                                                     ; /HasMenu
0043C21E  |.  8D4424 14     LEA EAX,DWORD PTR SS:[ESP+14]                                ; |
0043C222  |.  56            PUSH ESI                                                     ; |Style
0043C223  |.  50            PUSH EAX                                                     ; |pRect
0043C224  |.  895C24 1C     MOV DWORD PTR SS:[ESP+1C],EBX                                ; |
0043C228  |.  895C24 20     MOV DWORD PTR SS:[ESP+20],EBX                                ; |
0043C22C  |.  897C24 24     MOV DWORD PTR SS:[ESP+24],EDI                                ; |
0043C230  |.  896C24 28     MOV DWORD PTR SS:[ESP+28],EBP                                ; |
0043C234  |.  FF15 7CC68200 CALL DWORD PTR DS:[<&USER32.AdjustWindowRect>]               ; \AdjustWindowRect
0043C23A  |.  8B7424 18     MOV ESI,DWORD PTR SS:[ESP+18]
0043C23E  |.  8B4C24 10     MOV ECX,DWORD PTR SS:[ESP+10]
0043C242  |.  8B7C24 1C     MOV EDI,DWORD PTR SS:[ESP+1C]
0043C246  |.  8B4424 14     MOV EAX,DWORD PTR SS:[ESP+14]
0043C24A  |.  53            PUSH EBX                                                     ; /Index
0043C24B  |.  8B1D 78C68200 MOV EBX,DWORD PTR DS:[<&USER32.GetSystemMetrics>]            ; |USER32.GetSystemMetrics
0043C251  |.  2BF1          SUB ESI,ECX                                                  ; |
0043C253  |.  2BF8          SUB EDI,EAX                                                  ; |
0043C255  |.  FFD3          CALL EBX                                                     ; \GetSystemMetrics
0043C257  |.  2BC6          SUB EAX,ESI
0043C259  |.  6A 01         PUSH 1                                                       ; /Index = SM_CYSCREEN
0043C25B  |.  99            CDQ                                                          ; |
0043C25C  |.  2BC2          SUB EAX,EDX                                                  ; |
0043C25E  |.  8BE8          MOV EBP,EAX                                                  ; |
0043C260  |.  D1FD          SAR EBP,1                                                    ; |
0043C262  |.  FFD3          CALL EBX                                                     ; \GetSystemMetrics
0043C264  |.  2BC7          SUB EAX,EDI
0043C266  |.  8B0D 785D8E00 MOV ECX,DWORD PTR DS:[8E5D78]
0043C26C  |.  99            CDQ
0043C26D  |.  2BC2          SUB EAX,EDX
0043C26F  |.  6A 00         PUSH 0                                                       ; /Repaint = FALSE
0043C271  |.  D1F8          SAR EAX,1                                                    ; |
0043C273  |.  57            PUSH EDI                                                     ; |Height
0043C274  |.  56            PUSH ESI                                                     ; |Width
0043C275  |.  50            PUSH EAX                                                     ; |Y
0043C276  |.  55            PUSH EBP                                                     ; |X
0043C277  |.  51            PUSH ECX                                                     ; |hWnd => NULL
0043C278  |.  FF15 74C68200 CALL DWORD PTR DS:[<&USER32.MoveWindow>]                     ; \MoveWindow
0043C27E  |>  8B5424 28     MOV EDX,DWORD PTR SS:[ESP+28]
0043C282  |.  A1 785D8E00   MOV EAX,DWORD PTR DS:[8E5D78]
0043C287  |.  52            PUSH EDX                                                     ; /ShowState
0043C288  |.  50            PUSH EAX                                                     ; |hWnd => NULL
0043C289  |.  FF15 60C68200 CALL DWORD PTR DS:[<&USER32.ShowWindow>]                     ; \ShowWindow
0043C28F  |.  8B0D 785D8E00 MOV ECX,DWORD PTR DS:[8E5D78]
0043C295  |.  51            PUSH ECX                                                     ; /hWnd => NULL
0043C296  |.  FF15 70C68200 CALL DWORD PTR DS:[<&USER32.UpdateWindow>]                   ; \UpdateWindow
0043C29C  |.  8B15 785D8E00 MOV EDX,DWORD PTR DS:[8E5D78]
0043C2A2  |.  52            PUSH EDX                                                     ; /hWnd => NULL
0043C2A3  |.  FF15 6CC68200 CALL DWORD PTR DS:[<&USER32.SetForegroundWindow>]            ; \SetForegroundWindow
0043C2A9  |.  5F            POP EDI
0043C2AA  |.  5E            POP ESI
0043C2AB  |.  5D            POP EBP
0043C2AC  |.  B0 01         MOV AL,1
0043C2AE  |.  5B            POP EBX
0043C2AF  |.  83C4 10       ADD ESP,10
0043C2B2  \.  C3            RETN

现在修改后不起作用,一样会弹出那个 error:game is currently running. you can't start another process!的对话框,在命令行下下消息断点然后F9运行(先另外开一个游戏窗口,因为是不让双开的嘛)到了这里被拦住了:

77D504F2    8BFF            MOV EDI,EDI
77D504F4    55              PUSH EBP
77D504F5    8BEC            MOV EBP,ESP
77D504F7    833D BC04D777 0>CMP DWORD PTR DS:[77D704BC],0
77D504FE    74 24           JE SHORT USER32.77D50524
77D50500    64:A1 18000000  MOV EAX,DWORD PTR FS:[18]
77D50506    6A 00           PUSH 0
77D50508    FF70 24         PUSH DWORD PTR DS:[EAX+24]
77D5050B    68 240BD777     PUSH USER32.77D70B24
77D50510    FF15 C812D177   CALL DWORD PTR DS:[<&KERNEL32.InterlockedCompareExchange>]   ; kernel32.InterlockedCompareExchange
77D50516    85C0            TEST EAX,EAX
77D50518    75 0A           JNZ SHORT USER32.77D50524
77D5051A    C705 200BD777 0>MOV DWORD PTR DS:[77D70B20],1
77D50524    6A 00           PUSH 0
77D50526    FF75 14         PUSH DWORD PTR SS:[EBP+14]
77D50529    FF75 10         PUSH DWORD PTR SS:[EBP+10]
77D5052C    FF75 0C         PUSH DWORD PTR SS:[EBP+C]
77D5052F    FF75 08         PUSH DWORD PTR SS:[EBP+8]
77D50532    E8 2D000000     CALL USER32.MessageBoxExA
77D50537    5D              POP EBP
77D50538    C2 1000         RETN 10
77D5053B    90              NOP
77D5053C    90              NOP

红色为断点,文件成了C:\Windows\system32\USER32.DLL,到了这一步说实话我就不明白要怎么弄了,后来在网上找些资料,不太理解,试着ALT+F9,这次那个对话框弹出来了,对话框点确定,到了这里:

0043C1D1  |.  5F            POP EDI                                                      ;  elementc.00400000
0043C1D2  |.  5E            POP ESI
0043C1D3  |.  5D            POP EBP
0043C1D4  |.  32C0          XOR AL,AL
0043C1D6  |.  5B            POP EBX
0043C1D7  |.  83C4 10       ADD ESP,10
0043C1DA  |.  C3            RETN

再看它上面,也就是原来JE修改成JNB后就能实现双开的跳转,居然又变成JE了(在这之前我已经将JE改成JNB并保存了),于是我再次将这里的JE改成JNB,然后保存,但提示是否将未修改的文件保存,居然没有修改,我还是硬着头皮点是,重新运行,结果相同,还是无法双开。

0043C1BB     /74 1E         JE SHORT elementc.0043C1DB
0043C1BD  |. |6A 10         PUSH 10                                                      ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
0043C1BF  |. |68 10C08900   PUSH elementc.0089C010                                       ; |error
0043C1C4  |. |68 44E28900   PUSH elementc.0089E244                                       ; |game is currently running. you can't start another process!
0043C1C9  |. |6A 00         PUSH 0                                                       ; |hOwner = NULL
0043C1CB  |. |FF15 50C68200 CALL DWORD PTR DS:[<&USER32.MessageBoxA>]                    ; \MessageBoxA

后面的可以看我上面贴的第一段,我其实刚刚开始OD,不太明白,希望能够回复的详细,谢谢。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
2
自校验只有一种方式吧?读取数据,对比是否与原来有什么不同
2007-4-3 15:56
0
雪    币: 244
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
那这是什么东东?好奇怪,想不出来实现的方法,就好像是临时写入,然后运行,或者说是从其他地方读取过来的,不明白,高手来帮忙解答下
2007-4-3 17:53
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
4
这个不需要自效验,加一段反复写这个je的内容就行.

不要拘泥于这个关键je,上面就是findwindow的,你改一下看它是不是也在覆盖写来保护代码,如果不是,你在上面改也行啊,人是活的.方法有多种,你也可以改
0043C1A9  |>  68 80E28900   PUSH elementc.0089E280                                       ;  e
0043C1AE  |.  68 34D58900   PUSH elementc.0089D534                                       ;  e

上面push的内容,不是也可以达到相同的效果?????
2007-4-3 18:01
0
雪    币: 143
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
游戏他自身有一段代码在修复内存,你在你修改的地方下个硬件写断点。这样一下就找到他捣乱的代码了
2007-4-8 20:44
0
游客
登录 | 注册 方可回帖
返回
//