Приветствую! Сразу скаж, в программировании я не силен (в ассе уж тем более). Но сегодня столкнулся с серьезной траблой, вообщем ехешник онлайн игры (крякнутой) начал выдавать ошибку завуалированную, под игровую (обычное окно оповещения), при попытке закрыть - вылазит тот же еррор, но сам игровой серв работал дальше. После перезапуска ехе серва та же ошибка, но и ехе не грузится до конца. Вообщем я так понял разработчики постарались, дабы попортить нервов пользователям крякнутой версии. Вообщем поиском по текстовым строкам нашел я эту фигню в ехе через олю, вызывается 4 раза, пробывал менять на всякие JMP, но к нужному результату так и не привело (то просто креш был, то повторно еще одно ехе запускалось)). Текст ошибки таков: Код (Text): Monster attribute max over user.cpp 3771 Что нашел через ольку: Код (Text): 004E409F . 68 44E05C00 PUSH GameServ.005CE044 ; ASCII "Monster attribute max over %s %d" 004E9A9E . 68 44E05C00 PUSH GameServ.005CE044 ; ASCII "Monster attribute max over %s %d" 004E9CF3 . 68 84E25C00 PUSH GameServ.005CE284 ; ASCII "Monster attribute max over %d (%s %d)" 00553B69 |. 68 44E05C00 PUSH GameServ.005CE044 ; ASCII "Monster attribute max over %s %d" Вообщем прошу у вас помощи, совета или подсказки, думаю для большинства это ничего не стоит.. Еще и так невовремя эта трабла вылезла. Сам ехе https://rapidshare.com/files/457396132/GameServer.rar
попробуй забей нопами команды которые вызывают окно ошибки или джамп поставь на переход сразу к коду который после них должен идти
Сюда идет PUSH (где конец не знаю): Код (Text): 005CE284 4D DEC EBP 005CE285 6F OUTS DX,DWORD PTR ES:[EDI] ; I/O command 005CE286 6E OUTS DX,BYTE PTR ES:[EDI] ; I/O command 005CE287 73 74 JNB SHORT GameServ.005CE2FD 005CE289 65:72 20 JB SHORT GameServ.005CE2AC ; Superfluous prefix 005CE28C 61 POPAD 005CE28D 74 74 JE SHORT GameServ.005CE303 005CE28F 72 69 JB SHORT GameServ.005CE2FA 005CE291 6275 74 BOUND ESI,QWORD PTR SS:[EBP+74] 005CE294 65:206D 61 AND BYTE PTR GS:[EBP+61],CH 005CE298 78 20 JS SHORT GameServ.005CE2BA 005CE29A 6F OUTS DX,DWORD PTR ES:[EDI] ; I/O command 005CE29B 76 65 JBE SHORT GameServ.005CE302 005CE29D 72 20 JB SHORT GameServ.005CE2BF 005CE29F 25 64202825 AND EAX,25282064 005CE2A4 73 20 JNB SHORT GameServ.005CE2C6 005CE2A6 25 64290000 AND EAX,2964 005CE2AB 0066 69 ADD BYTE PTR DS:[ESI+69],AH 005CE2AE 6C INS BYTE PTR ES:[EDI],DX ; I/O command 005CE2AF 65:206F 70 AND BYTE PTR GS:[EDI+70],CH 005CE2B3 65:6E OUTS DX,BYTE PTR ES:[EDI] ; I/O command 005CE2B5 2065 72 AND BYTE PTR SS:[EBP+72],AH 005CE2B8 72 6F JB SHORT GameServ.005CE329 005CE2BA 72 20 JB SHORT GameServ.005CE2DC 005CE2BC 25 7300005B AND EAX,5B000073 005CE2C1 41 INC ECX 005CE2C2 4E DEC ESI 005CE2C3 54 PUSH ESP 005CE2C4 49 DEC ECX 005CE2C5 2D 4841434B SUB EAX,4B434148 005CE2CA 5D POP EBP 005CE2CB 5B POP EBX 005CE2CC 4E DEC ESI 005CE2CD 50 PUSH EAX 005CE2CE 43 INC EBX 005CE2CF 5D POP EBP 005CE2D0 202D 20547279 AND BYTE PTR DS:[79725420],CH 005CE2D6 20746F 20 AND BYTE PTR DS:[EDI+EBP*2+20],DH 005CE2DA 6F OUTS DX,DWORD PTR ES:[EDI] ; I/O command 005CE2DB 70 65 JO SHORT GameServ.005CE342 005CE2DD 6E OUTS DX,BYTE PTR ES:[EDI] ; I/O command 005CE2DE 204E 50 AND BYTE PTR DS:[ESI+50],CL 005CE2E1 43 INC EBX 005CE2E2 206475 72 AND BYTE PTR SS:[EBP+ESI*2+72],AH 005CE2E6 696E 67 204D6170 IMUL EBP,DWORD PTR DS:[ESI+67],70614D20 005CE2ED 53 PUSH EBX 005CE2EE 65:72 76 JB SHORT GameServ.005CE367 ; Superfluous prefix 005CE2F1 65:72 20 JB SHORT GameServ.005CE314 ; Superfluous prefix 005CE2F4 4D DEC EBP 005CE2F5 6F OUTS DX,DWORD PTR ES:[EDI] ; I/O command 005CE2F6 76 65 JBE SHORT GameServ.005CE35D 005CE2F8 205B 25 AND BYTE PTR DS:[EBX+25],BL 005CE2FB 73 5D JNB SHORT GameServ.005CE35A 005CE2FD 5B POP EBX 005CE2FE 25 735D0000 AND EAX,5D73 005CE303 0051 75 ADD BYTE PTR DS:[ECX+75],DL 005CE306 65:73 74 JNB SHORT GameServ.005CE37D ; Superfluous prefix 005CE309 4E DEC ESI 005CE30A 70 63 JO SHORT GameServ.005CE36F 005CE30C 2052 65 AND BYTE PTR DS:[EDX+65],DL 005CE30F 66:43 INC BX 005CE311 6F OUTS DX,DWORD PTR ES:[EDI] ; I/O command 005CE312 75 6E JNZ SHORT GameServ.005CE382 005CE314 74 20 JE SHORT GameServ.005CE336 005CE316 49 DEC ECX 005CE317 6E OUTS DX,BYTE PTR ES:[EDI] ; I/O command 005CE318 6320 ARPL WORD PTR DS:[EAX],SP 005CE31A 3D 20256400 CMP EAX,GameServ.00642520 005CE31F 005B 25 ADD BYTE PTR DS:[EBX+25],BL 005CE322 73 5D JNB SHORT GameServ.005CE381 005CE324 5B POP EBX 005CE325 25 735D205B AND EAX,5B205D73 005CE32A 51 PUSH ECX 005CE32B 55 PUSH EBP 005CE32C 45 INC EBP 005CE32D 53 PUSH EBX 005CE32E 54 PUSH ESP 005CE32F 5D POP EBP 005CE330 205465 6C AND BYTE PTR SS:[EBP+6C],DL 005CE334 65:70 6F JO SHORT GameServ.005CE3A6 ; Superfluous prefix 005CE337 72 74 JB SHORT GameServ.005CE3AD 005CE339 20746F 20 AND BYTE PTR DS:[EDI+EBP*2+20],DH 005CE33D 52 PUSH EDX
ноп надо ставить не только на пуши но и на вызовы,а лутше всего на пуше поставить переход , тоесть джамп . и кстати в этом исходнике я не нашел ни одного вызова call какой либо функции которая выводит алерт, похоже ты чтото не то сюда написал...
1 Код (Text): 004E4095 . 68 9A000000 PUSH 9A 004E409A . 68 68E05C00 PUSH GameServ.005CE068 ; ASCII ".\MonsterAttr.cpp" 004E409F . 68 44E05C00 PUSH GameServ.005CE044 ; ASCII "Monster attribute max over %s %d" 004E40A4 . E8 377DFEFF CALL GameServ.004CBDE0 004E40A9 . 83C4 0C ADD ESP,0C 004E40AC . EB 14 JMP SHORT GameServ.004E40C2 004E40AE >^E9 B6FAFFFF JMP GameServ.004E3B69 004E40B3 > 8B15 8024D604 MOV EDX,DWORD PTR DS:[4D62480] 004E40B9 . 52 PUSH EDX 2 Код (Text): 004E9A92 . 7E 2B JLE SHORT GameServ.004E9ABF 004E9A94 . 68 31010000 PUSH 131 004E9A99 . 68 6CE25C00 PUSH GameServ.005CE26C ; ASCII ".\MonsterSetBase.cpp" 004E9A9E . 68 44E05C00 PUSH GameServ.005CE044 ; ASCII "Monster attribute max over %s %d" 004E9AA3 . E8 3823FEFF CALL GameServ.004CBDE0 004E9AA8 . 83C4 0C ADD ESP,0C 004E9AAB . 8B0D 887BD704 MOV ECX,DWORD PTR DS:[4D77B88] 004E9AB1 . 51 PUSH ECX 004E9AB2 . E8 C7D50A00 CALL GameServ.0059707E 004E9AB7 . 83C4 04 ADD ESP,4 3 Код (Text): 004E9CDD . 7E 32 JLE SHORT GameServ.004E9D11 004E9CDF . 68 5B010000 PUSH 15B 004E9CE4 . 68 6CE25C00 PUSH GameServ.005CE26C ; ASCII ".\MonsterSetBase.cpp" 004E9CE9 . 8B45 D4 MOV EAX,DWORD PTR SS:[EBP-2C] 004E9CEC . 8B88 141B0200 MOV ECX,DWORD PTR DS:[EAX+21B14] 004E9CF2 . 51 PUSH ECX 004E9CF3 . 68 84E25C00 PUSH GameServ.005CE284 ; ASCII "Monster attribute max over %d (%s %d)" 004E9CF8 . E8 E320FEFF CALL GameServ.004CBDE0 004E9CFD . 83C4 10 ADD ESP,10 004E9D00 . 8B15 887BD704 MOV EDX,DWORD PTR DS:[4D77B88] 004E9D06 . 52 PUSH EDX 004E9D07 . E8 72D30A00 CALL GameServ.0059707E 4 Код (Text): 00553B5D |. 7C 1F JL SHORT GameServ.00553B7E 00553B5F |. 68 BB0E0000 PUSH 0EBB 00553B64 |. 68 64565D00 PUSH GameServ.005D5664 ; ASCII ".\user.cpp" 00553B69 |. 68 44E05C00 PUSH GameServ.005CE044 ; ASCII "Monster attribute max over %s %d" 00553B6E |. E8 6D82F7FF CALL GameServ.004CBDE0 00553B73 |. 83C4 0C ADD ESP,0C 00553B76 |. 83C8 FF OR EAX,FFFFFFFF 00553B79 |. E9 EE000000 JMP GameServ.00553C6C 00553B7E |> 0FB645 0C MOVZX EAX,BYTE PTR SS:[EBP+C] 00553B82 |. 50 PUSH EAX ; /Arg1 Кстати пкоа копировал заметил что в последнем случае выше идет ASCII ".\user.cpp" это тоже содержится в тексте ошибки (Monster attribute max over user.cpp 3771), так что думаю именно последний кусок отвечает за нужную. Осталось разобраться как ее убрать
Поставил так: Код (Text): 00553B5D |. 7C 1F JL SHORT GameServ.00553B7E 00553B5F E9 08010000 JMP GameServ.00553C6C ; сюда 00553B64 E9 03010000 JMP GameServ.00553C6C ; и сюда 00553B64 |. 68 64565D00 PUSH GameServ.005D5664 ; ASCII ".\user.cpp" 00553B69 |. 68 44E05C00 PUSH GameServ.005CE044 ; ASCII "Monster attribute max over %s %d" 00553B6E |. E8 6D82F7FF CALL GameServ.004CBDE0 00553B73 |. 83C4 0C ADD ESP,0C 00553B76 |. 83C8 FF OR EAX,FFFFFFFF 00553B79 |. E9 EE000000 JMP GameServ.00553C6C ; скопировал отсюда 00553B7E |> 0FB645 0C MOVZX EAX,BYTE PTR SS:[EBP+C] 00553B82 |. 50 PUSH EAX ; /Arg1 И заработало! Спасибо огромное за подсказки, и все-таки может я что-то не так сделал? (чтобы в будущем не было проблем).
Может и не то. Ошибка-то никакая не замаскированная. Сообщается, что атрибут монстра превосходит максимум. Раз не вываливается - значит этот атрибут где-то режется до максимума, а может просто везет