Jump to content
Sign in to follow this  
V3ct0r

[!] Исправление уязвимости связанной с переполнением буфера в функциях SystemNotice(), PopupNotice() и BickerNotice()

Recommended Posts

[!] Исправление уязвимости связанной с переполнением  буфера в функциях SystemNotice(), PopupNotice () и  BickerNotice()

 

image.png

 

1. Суть уязвимости

 

Злоумышленник определенным образом заставляет GameServer.exe вызвать функцию SystemNotice(), которая служит для вывода сообщений в системный чат игрока, при этом в функцию передается очень длинная строка с сообщением, что вызывает переполнение буфера и последующее завершение работы GameServer.exe.

 

 

2. Причина уязвимости

 

Чтобы понять в чем причина переполнения, посмотрим исходные коды GameServer:

CCharacterSystemNotice.png

 

Это код функции SystemNotice(). Можно увидеть, что здесь используется небезопасная функция vsprintf(), которая не контролирует размер буфера szTemp, указатель на который передается ей первым параметром. В результате vsprintf() записывает строку за пределами выделенной для нее памяти, что приводит к уничтожению данных в соседних ячейках, после чего GameServer.exe вылетает с ошибкой.

 

Функция vsprintf() также используется и в других функциях:

 

PopupNotice()

CCharacterPopupNotice.png

 

BickerNotice()

CCharacterBickerNotice.png

 

SystemNotice() класса CPlayer

CPlayerSystemNotice.png

А это значит, что эти функции так же потенциально опасны.

 

 

3. Как воспроизвести уязвимость и методика тестирования исправления

 

В открытом доступе нет информации, каким образом можно заставить GameServer.exe вызвать обсуждаемые функции с очень длинным сообщением, которое приводит к их переполнению. Чтобы имитировать данную ситуацию можно вызывать функции SystemNotice() и BickerNotice() из Lua-скриптов:

-- Данный вызов функции SystemNotice() приведет к ошибке GameServer.exe!
SystemNotice(role, "Toooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongStriiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiing!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")

-- Данный вызов функции BickerNotice() приведет к ошибке GameServer.exe!
BickerNotice(role, "Toooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongStriiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiing!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")

 

 

Функция PopupNotice() вызывается при работе с внутриигровым интернет-магазином:

ogsep4.png

 

Чтобы вызвать данную функцию для тестов, можно подменить в GameServer.exe вызов функции SystemNotice() на PopupNotice(), так как эти функции имеют одинаковые сигнатуры (число, тип и последовательность параметров). В GameServer.exe версии 1.38 функция SystemNotice() находится по адресу 0x004CA2C0, а PopupNotice() - 0x004CA400.

ogsep6.png

 

Подменяем вызов:

ogsep7.png

 

Теперь при вызове SystemNotice() вместо оригинальной функции будет вызываться PopupNotice().

 

 

Функция CPlayer::SystemNotice() вызывается при ошибках ковки, плавки, соединения самоцветов:

ogsep5.png

 

Её вызов можно сымитировать, например, отредактировав функцию плавки аппарелей (Apparel Fusion)

ogsep8.png

 

Заменим условный переход по адресу 0x004EF309 (справедливо для GameServer.exe версии 1.38) на безусловный:

ogsep9.png

 

После проделанных изменений, каждый раз при открытии диалога плавки всегда будет вызываться функция CPlayer::SystemNotice().

 

 

4. Как устранить уязвимость

 

Небезопасную функцию vsprintf() необходимо заменить на её безопасный аналог - функцию _vsnprintf(), которая принимает дополнительный параметр: размер буфера под строку с сообщением.

 

Таким образом, исправленная функция SystemNotice() будет выглядеть так:

SystemNoticeFixed.png

В функцию _vsnprintf() передаем размер на единицу меньше, в данном случае 249 байт, так как последний байт будет нулевым.

 

Функции BickerNotice(), PopupNotice() и CPlayer::SystemNotice() необходимо исправить аналогичным образом.

 

 

5. Патч для GameServer.exe

 

За основу патча возьмем оригинальные функции из GameServer.exe

 

GameServer.exe версии 1.38

 

SystemNotice()

Spoiler

004CA2C0 > $ 55             PUSH EBP
004CA2C1   . 8BEC           MOV EBP,ESP
004CA2C3   . 6A FF          PUSH -1
004CA2C5   . 68 A6675A00    PUSH 005A67A6                   ;  SE handler installation
004CA2CA   . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004CA2D0   . 50             PUSH EAX
004CA2D1   . 64:8925 000000>MOV DWORD PTR FS:[0],ESP
004CA2D8   . 51             PUSH ECX
004CA2D9   . 81EC 88010000  SUB ESP,188
004CA2DF   . 53             PUSH EBX
004CA2E0   . 56             PUSH ESI
004CA2E1   . 57             PUSH EDI
004CA2E2   . 8965 F0        MOV DWORD PTR SS:[EBP-10],ESP
004CA2E5   . C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
004CA2EC   . 8D45 10        LEA EAX,DWORD PTR SS:[EBP+10]
004CA2EF   . 8985 F0FEFFFF  MOV DWORD PTR SS:[EBP-110],EAX
004CA2F5   . 8B85 F0FEFFFF  MOV EAX,DWORD PTR SS:[EBP-110]
004CA2FB   . 50             PUSH EAX                                 ; /arglist
004CA2FC   . 8B4D 0C        MOV ECX,DWORD PTR SS:[EBP+C]             ; |
004CA2FF   . 51             PUSH ECX                                 ; |format
004CA300   . 8D95 F4FEFFFF  LEA EDX,DWORD PTR SS:[EBP-10C]           ; |
004CA306   . 52             PUSH EDX                                 ; |buffer
004CA307   . E8 09680A00    CALL vsprintf                   ; \vsprintf
004CA30C   . 83C4 0C        ADD ESP,0C
004CA30F   . C785 F0FEFFFF >MOV DWORD PTR SS:[EBP-110],0
004CA319   . 8D85 B8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-148]
004CA31F   . 50             PUSH EAX                                 ; /Arg1
004CA320   . 8B0D 4C987700  MOV ECX,DWORD PTR DS:[g_gmsvr]           ; |
004CA326   . E8 B5F90500    CALL ?GetWPacket@TcpCommApp@dbc>; \?GetWPacket@TcpCommApp@dbc@@QBE?AVWPacket@2@XZ
004CA32B   . C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
004CA32F   . 68 05020000    PUSH 205
004CA334   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004CA33A   . E8 01970500    CALL ?WriteCmd@WPacket@dbc@@QAE>
004CA33F   . 8D85 F4FEFFFF  LEA EAX,DWORD PTR SS:[EBP-10C]
004CA345   . 50             PUSH EAX                                 ; /s
004CA346   . E8 853E0A00    CALL strlen                     ; \strlen
004CA34B   . 83C4 04        ADD ESP,4
004CA34E   . 0FB7C8         MOVZX ECX,AX
004CA351   . 83C1 01        ADD ECX,1
004CA354   . 51             PUSH ECX
004CA355   . 8D95 F4FEFFFF  LEA EDX,DWORD PTR SS:[EBP-10C]
004CA35B   . 52             PUSH EDX
004CA35C   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004CA362   . E8 D9A90500    CALL ?WriteSequence@WPacket@dbc>
004CA367   . 83EC 38        SUB ESP,38
004CA36A   . 8BCC           MOV ECX,ESP
004CA36C   . 89A5 70FEFFFF  MOV DWORD PTR SS:[EBP-190],ESP
004CA372   . 8D85 B8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-148]
004CA378   . 50             PUSH EAX                                 ; /Arg1
004CA379   . E8 5238F5FF    CALL dbc::WPacket::WPacket      ; \dbc::WPacket::WPacket
004CA37E   . 8985 6CFEFFFF  MOV DWORD PTR SS:[EBP-194],EAX
004CA384   . 8B8D 6CFEFFFF  MOV ECX,DWORD PTR SS:[EBP-194]
004CA38A   . 898D 68FEFFFF  MOV DWORD PTR SS:[EBP-198],ECX
004CA390   . C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
004CA394   . 8B55 08        MOV EDX,DWORD PTR SS:[EBP+8]
004CA397   . 52             PUSH EDX
004CA398   . 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
004CA39B   . 8B10           MOV EDX,DWORD PTR DS:[EAX]
004CA39D   . C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
004CA3A1   . 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004CA3A4   . FF52 30        CALL DWORD PTR DS:[EDX+30]
004CA3A7   . C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
004CA3AB   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004CA3B1   . E8 AA38F5FF    CALL dbc::WPacket::~WPacket
004CA3B6   . EB 28          JMP SHORT 004CA3E0
004CA3B8   . E8 836FF3FF    CALL sym_engine::default_fmt
004CA3BD   . 50             PUSH EAX
004CA3BE   . 6A 00          PUSH 0
004CA3C0   . 8B8D B4FEFFFF  MOV ECX,DWORD PTR SS:[EBP-14C]
004CA3C6   . E8 556FF3FF    CALL se_translator::exception::>
004CA3CB   . 8B40 04        MOV EAX,DWORD PTR DS:[EAX+4]             ; |
004CA3CE   . 50             PUSH EAX                                 ; |Arg1
004CA3CF   . E8 3C250700    CALL sym_engine::stack_trace    ; \sym_engine::stack_trace
004CA3D4   . 83C4 0C        ADD ESP,0C
004CA3D7   . 6A 00          PUSH 0                                   ; /Arg2 = 00000000
004CA3D9   . 6A 00          PUSH 0                                   ; |Arg1 = 00000000
004CA3DB   . E8 D1390A00    CALL _CxxThrowException         ; \_CxxThrowException
004CA3E0   > C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
004CA3E7   . 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
004CA3EA   . 64:890D 000000>MOV DWORD PTR FS:[0],ECX
004CA3F1   . 5F             POP EDI
004CA3F2   . 5E             POP ESI
004CA3F3   . 5B             POP EBX
004CA3F4   . 8BE5           MOV ESP,EBP
004CA3F6   . 5D             POP EBP
004CA3F7   . C3             RETN

 

 

BickerNotice()

Spoiler

004CA1D0 >/$ 55             PUSH EBP
004CA1D1  |. 8BEC           MOV EBP,ESP
004CA1D3  |. 6A FF          PUSH -1
004CA1D5  |. 68 86675A00    PUSH 005A6786                   ;  SE handler installation
004CA1DA  |. 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004CA1E0  |. 50             PUSH EAX
004CA1E1  |. 64:8925 000000>MOV DWORD PTR FS:[0],ESP
004CA1E8  |. 81EC 84010000  SUB ESP,184
004CA1EE  |. 53             PUSH EBX
004CA1EF  |. 56             PUSH ESI
004CA1F0  |. 57             PUSH EDI
004CA1F1  |. 8D45 10        LEA EAX,DWORD PTR SS:[EBP+10]
004CA1F4  |. 8985 F4FEFFFF  MOV DWORD PTR SS:[EBP-10C],EAX
004CA1FA  |. 8B85 F4FEFFFF  MOV EAX,DWORD PTR SS:[EBP-10C]
004CA200  |. 50             PUSH EAX                                 ; /arglist
004CA201  |. 8B4D 0C        MOV ECX,DWORD PTR SS:[EBP+C]             ; |
004CA204  |. 51             PUSH ECX                                 ; |format
004CA205  |. 8D95 F8FEFFFF  LEA EDX,DWORD PTR SS:[EBP-108]           ; |
004CA20B  |. 52             PUSH EDX                                 ; |buffer
004CA20C  |. E8 04690A00    CALL vsprintf                            ; \vsprintf
004CA211  |. 83C4 0C        ADD ESP,0C
004CA214  |. C785 F4FEFFFF >MOV DWORD PTR SS:[EBP-10C],0
004CA21E  |. 8D85 BCFEFFFF  LEA EAX,DWORD PTR SS:[EBP-144]
004CA224  |. 50             PUSH EAX                                 ; /Arg1
004CA225  |. 8B0D 4C987700  MOV ECX,DWORD PTR DS:[g_gmsvr]           ; |
004CA22B  |. E8 B0FA0500    CALL ?GetWPacket@TcpCommApp@dbc>         ; \?GetWPacket@TcpCommApp@dbc@@QBE?AVWPacket@2@XZ
004CA230  |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
004CA237  |. 68 5C030000    PUSH 35C
004CA23C  |. 8D8D BCFEFFFF  LEA ECX,DWORD PTR SS:[EBP-144]
004CA242  |. E8 F9970500    CALL ?WriteCmd@WPacket@dbc@@QAE>
004CA247  |. 8D85 F8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-108]
004CA24D  |. 50             PUSH EAX
004CA24E  |. 8D8D BCFEFFFF  LEA ECX,DWORD PTR SS:[EBP-144]
004CA254  |. E8 07AC0500    CALL ?WriteString@WPacket@dbc@@>
004CA259  |. 83EC 38        SUB ESP,38
004CA25C  |. 8BCC           MOV ECX,ESP
004CA25E  |. 89A5 78FEFFFF  MOV DWORD PTR SS:[EBP-188],ESP
004CA264  |. 8D85 BCFEFFFF  LEA EAX,DWORD PTR SS:[EBP-144]
004CA26A  |. 50             PUSH EAX                                 ; /Arg1
004CA26B  |. E8 6039F5FF    CALL dbc::WPacket::WPacket               ; \dbc::WPacket::WPacket
004CA270  |. 8985 74FEFFFF  MOV DWORD PTR SS:[EBP-18C],EAX
004CA276  |. 8B8D 74FEFFFF  MOV ECX,DWORD PTR SS:[EBP-18C]
004CA27C  |. 898D 70FEFFFF  MOV DWORD PTR SS:[EBP-190],ECX
004CA282  |. C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
004CA286  |. 8B55 08        MOV EDX,DWORD PTR SS:[EBP+8]
004CA289  |. 52             PUSH EDX
004CA28A  |. 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
004CA28D  |. 8B10           MOV EDX,DWORD PTR DS:[EAX]
004CA28F  |. C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
004CA293  |. 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004CA296  |. FF52 30        CALL DWORD PTR DS:[EDX+30]
004CA299  |. C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
004CA2A0  |. 8D8D BCFEFFFF  LEA ECX,DWORD PTR SS:[EBP-144]
004CA2A6  |. E8 B539F5FF    CALL dbc::WPacket::~WPacket
004CA2AB  |. 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
004CA2AE  |. 64:890D 000000>MOV DWORD PTR FS:[0],ECX
004CA2B5  |. 5F             POP EDI
004CA2B6  |. 5E             POP ESI
004CA2B7  |. 5B             POP EBX
004CA2B8  |. 8BE5           MOV ESP,EBP
004CA2BA  |. 5D             POP EBP
004CA2BB  \. C3             RETN

 

 

PopupNotice()

Spoiler

004CA400 > $ 55             PUSH EBP
004CA401   . 8BEC           MOV EBP,ESP
004CA403   . 6A FF          PUSH -1
004CA405   . 68 C6675A00    PUSH 005A67C6                   ;  SE handler installation
004CA40A   . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004CA410   . 50             PUSH EAX
004CA411   . 64:8925 000000>MOV DWORD PTR FS:[0],ESP
004CA418   . 51             PUSH ECX
004CA419   . 81EC 88010000  SUB ESP,188
004CA41F   . 53             PUSH EBX
004CA420   . 56             PUSH ESI
004CA421   . 57             PUSH EDI
004CA422   . 8965 F0        MOV DWORD PTR SS:[EBP-10],ESP
004CA425   . C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
004CA42C   . 8D45 10        LEA EAX,DWORD PTR SS:[EBP+10]
004CA42F   . 8985 F0FEFFFF  MOV DWORD PTR SS:[EBP-110],EAX
004CA435   . 8B85 F0FEFFFF  MOV EAX,DWORD PTR SS:[EBP-110]
004CA43B   . 50             PUSH EAX                                 ; /arglist
004CA43C   . 8B4D 0C        MOV ECX,DWORD PTR SS:[EBP+C]             ; |
004CA43F   . 51             PUSH ECX                                 ; |format
004CA440   . 8D95 F4FEFFFF  LEA EDX,DWORD PTR SS:[EBP-10C]           ; |
004CA446   . 52             PUSH EDX                                 ; |buffer
004CA447   . E8 C9660A00    CALL vsprintf                            ; \vsprintf
004CA44C   . 83C4 0C        ADD ESP,0C
004CA44F   . C785 F0FEFFFF >MOV DWORD PTR SS:[EBP-110],0
004CA459   . 8D85 B8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-148]
004CA45F   . 50             PUSH EAX                                 ; /Arg1
004CA460   . 8B0D 4C987700  MOV ECX,DWORD PTR DS:[g_gmsvr]           ; |
004CA466   . E8 75F80500    CALL ?GetWPacket@TcpCommApp@dbc>         ; \?GetWPacket@TcpCommApp@dbc@@QBE?AVWPacket@2@XZ
004CA46B   . C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
004CA46F   . 68 38020000    PUSH 238
004CA474   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004CA47A   . E8 C1950500    CALL ?WriteCmd@WPacket@dbc@@QAE>
004CA47F   . 8D85 F4FEFFFF  LEA EAX,DWORD PTR SS:[EBP-10C]
004CA485   . 50             PUSH EAX                                 ; /s
004CA486   . E8 453D0A00    CALL strlen                              ; \strlen
004CA48B   . 83C4 04        ADD ESP,4
004CA48E   . 0FB7C8         MOVZX ECX,AX
004CA491   . 83C1 01        ADD ECX,1
004CA494   . 51             PUSH ECX
004CA495   . 8D95 F4FEFFFF  LEA EDX,DWORD PTR SS:[EBP-10C]
004CA49B   . 52             PUSH EDX
004CA49C   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004CA4A2   . E8 99A80500    CALL ?WriteSequence@WPacket@dbc>
004CA4A7   . 83EC 38        SUB ESP,38
004CA4AA   . 8BCC           MOV ECX,ESP
004CA4AC   . 89A5 70FEFFFF  MOV DWORD PTR SS:[EBP-190],ESP
004CA4B2   . 8D85 B8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-148]
004CA4B8   . 50             PUSH EAX                                 ; /Arg1
004CA4B9   . E8 1237F5FF    CALL dbc::WPacket::WPacket               ; \dbc::WPacket::WPacket
004CA4BE   . 8985 6CFEFFFF  MOV DWORD PTR SS:[EBP-194],EAX
004CA4C4   . 8B8D 6CFEFFFF  MOV ECX,DWORD PTR SS:[EBP-194]
004CA4CA   . 898D 68FEFFFF  MOV DWORD PTR SS:[EBP-198],ECX
004CA4D0   . C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
004CA4D4   . 8B55 08        MOV EDX,DWORD PTR SS:[EBP+8]
004CA4D7   . 52             PUSH EDX
004CA4D8   . 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
004CA4DB   . 8B10           MOV EDX,DWORD PTR DS:[EAX]
004CA4DD   . C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
004CA4E1   . 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004CA4E4   . FF52 30        CALL DWORD PTR DS:[EDX+30]
004CA4E7   . C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
004CA4EB   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004CA4F1   . E8 6A37F5FF    CALL dbc::WPacket::~WPacket
004CA4F6   . EB 28          JMP SHORT 004CA520
004CA4F8   . E8 436EF3FF    CALL sym_engine::default_fmt
004CA4FD   . 50             PUSH EAX
004CA4FE   . 6A 00          PUSH 0
004CA500   . 8B8D B4FEFFFF  MOV ECX,DWORD PTR SS:[EBP-14C]
004CA506   . E8 156EF3FF    CALL se_translator::exception::>
004CA50B   . 8B40 04        MOV EAX,DWORD PTR DS:[EAX+4]             ; |
004CA50E   . 50             PUSH EAX                                 ; |Arg1
004CA50F   . E8 FC230700    CALL sym_engine::stack_trace             ; \sym_engine::stack_trace
004CA514   . 83C4 0C        ADD ESP,0C
004CA517   . 6A 00          PUSH 0                                   ; /Arg2 = 00000000
004CA519   . 6A 00          PUSH 0                                   ; |Arg1 = 00000000
004CA51B   . E8 91380A00    CALL _CxxThrowException                  ; \_CxxThrowException
004CA520   > C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
004CA527   . 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
004CA52A   . 64:890D 000000>MOV DWORD PTR FS:[0],ECX
004CA531   . 5F             POP EDI
004CA532   . 5E             POP ESI
004CA533   . 5B             POP EBX
004CA534   . 8BE5           MOV ESP,EBP
004CA536   . 5D             POP EBP
004CA537   . C3             RETN

 

 

CPlayer::SystemNotice

Spoiler

004EF7D0 > $ 55             PUSH EBP
004EF7D1   . 8BEC           MOV EBP,ESP
004EF7D3   . 6A FF          PUSH -1
004EF7D5   . 68 267F5A00    PUSH 005A7F26                   ;  SE handler installation
004EF7DA   . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004EF7E0   . 50             PUSH EAX
004EF7E1   . 64:8925 000000>MOV DWORD PTR FS:[0],ESP
004EF7E8   . 51             PUSH ECX
004EF7E9   . 81EC 88010000  SUB ESP,188
004EF7EF   . 53             PUSH EBX
004EF7F0   . 56             PUSH ESI
004EF7F1   . 57             PUSH EDI
004EF7F2   . 8965 F0        MOV DWORD PTR SS:[EBP-10],ESP
004EF7F5   . C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
004EF7FC   . 8D45 10        LEA EAX,DWORD PTR SS:[EBP+10]
004EF7FF   . 8985 F0FEFFFF  MOV DWORD PTR SS:[EBP-110],EAX
004EF805   . 8B85 F0FEFFFF  MOV EAX,DWORD PTR SS:[EBP-110]
004EF80B   . 50             PUSH EAX                                 ; /arglist
004EF80C   . 8B4D 0C        MOV ECX,DWORD PTR SS:[EBP+C]             ; |
004EF80F   . 51             PUSH ECX                                 ; |format
004EF810   . 8D95 F4FEFFFF  LEA EDX,DWORD PTR SS:[EBP-10C]           ; |
004EF816   . 52             PUSH EDX                                 ; |buffer
004EF817   . E8 F9120800    CALL vsprintf                            ; \vsprintf
004EF81C   . 83C4 0C        ADD ESP,0C
004EF81F   . C785 F0FEFFFF >MOV DWORD PTR SS:[EBP-110],0
004EF829   . 8D85 B8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-148]
004EF82F   . 50             PUSH EAX                                 ; /Arg1
004EF830   . 8B0D 4C987700  MOV ECX,DWORD PTR DS:[g_gmsvr]           ; |
004EF836   . E8 A5A40300    CALL ?GetWPacket@TcpCommApp@dbc>         ; \?GetWPacket@TcpCommApp@dbc@@QBE?AVWPacket@2@XZ
004EF83B   . C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
004EF83F   . 68 05020000    PUSH 205
004EF844   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004EF84A   . E8 F1410300    CALL ?WriteCmd@WPacket@dbc@@QAE>
004EF84F   . 8D85 F4FEFFFF  LEA EAX,DWORD PTR SS:[EBP-10C]
004EF855   . 50             PUSH EAX                                 ; /s
004EF856   . E8 75E90700    CALL strlen                              ; \strlen
004EF85B   . 83C4 04        ADD ESP,4
004EF85E   . 0FB7C8         MOVZX ECX,AX
004EF861   . 83C1 01        ADD ECX,1
004EF864   . 51             PUSH ECX
004EF865   . 8D95 F4FEFFFF  LEA EDX,DWORD PTR SS:[EBP-10C]
004EF86B   . 52             PUSH EDX
004EF86C   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004EF872   . E8 C9540300    CALL ?WriteSequence@WPacket@dbc>
004EF877   . 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004EF87A   . E8 61ECF2FF    CALL GatePlayer::GetDBChaId
004EF87F   . 50             PUSH EAX
004EF880   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004EF886   . E8 B5530300    CALL ?WriteLong@WPacket@dbc@@QA>
004EF88B   . 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004EF88E   . E8 ADB4FBFF    CALL GatePlayer::GetGateAddr
004EF893   . 50             PUSH EAX
004EF894   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004EF89A   . E8 A1530300    CALL ?WriteLong@WPacket@dbc@@QA>
004EF89F   . 6A 01          PUSH 1
004EF8A1   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004EF8A7   . E8 84520300    CALL ?WriteShort@WPacket@dbc@@Q>
004EF8AC   . 83EC 38        SUB ESP,38
004EF8AF   . 8BCC           MOV ECX,ESP
004EF8B1   . 89A5 70FEFFFF  MOV DWORD PTR SS:[EBP-190],ESP
004EF8B7   . 8D85 B8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-148]
004EF8BD   . 50             PUSH EAX                                 ; /Arg1
004EF8BE   . E8 0DE3F2FF    CALL dbc::WPacket::WPacket               ; \dbc::WPacket::WPacket
004EF8C3   . 8985 6CFEFFFF  MOV DWORD PTR SS:[EBP-194],EAX
004EF8C9   . 8B8D 6CFEFFFF  MOV ECX,DWORD PTR SS:[EBP-194]
004EF8CF   . 898D 68FEFFFF  MOV DWORD PTR SS:[EBP-198],ECX
004EF8D5   . C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
004EF8D9   . 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004EF8DC   . E8 9F41FDFF    CALL GatePlayer::GetGate
004EF8E1   . C645 FC 01     MOV BYTE PTR SS:[EBP-4],1                ; |
004EF8E5   . 8BC8           MOV ECX,EAX                              ; |
004EF8E7   . E8 C4E3F2FF    CALL GateServer::SendData                ; \GateServer::SendData
004EF8EC   . C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
004EF8F0   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004EF8F6   . E8 65E3F2FF    CALL dbc::WPacket::~WPacket
004EF8FB   . EB 28          JMP SHORT 004EF925
004EF8FD   . E8 3E1AF1FF    CALL sym_engine::default_fmt
004EF902   . 50             PUSH EAX
004EF903   . 6A 00          PUSH 0
004EF905   . 8B8D B4FEFFFF  MOV ECX,DWORD PTR SS:[EBP-14C]
004EF90B   . E8 101AF1FF    CALL se_translator::exception::>
004EF910   . 8B40 04        MOV EAX,DWORD PTR DS:[EAX+4]             ; |
004EF913   . 50             PUSH EAX                                 ; |Arg1
004EF914   . E8 F7CF0400    CALL sym_engine::stack_trace             ; \sym_engine::stack_trace
004EF919   . 83C4 0C        ADD ESP,0C
004EF91C   . 6A 00          PUSH 0                                   ; /Arg2 = 00000000
004EF91E   . 6A 00          PUSH 0                                   ; |Arg1 = 00000000
004EF920   . E8 8CE40700    CALL _CxxThrowException                  ; \_CxxThrowException
004EF925   > C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
004EF92C   . 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
004EF92F   . 64:890D 000000>MOV DWORD PTR FS:[0],ECX
004EF936   . 5F             POP EDI
004EF937   . 5E             POP ESI
004EF938   . 5B             POP EBX
004EF939   . 8BE5           MOV ESP,EBP
004EF93B   . 5D             POP EBP
004EF93C   . C3             RETN

 

 

 

GameServer.exe версии 1.36

 

SystemNotice()

Spoiler

004C2D60   $ 55             PUSH EBP
004C2D61   . 8BEC           MOV EBP,ESP
004C2D63   . 6A FF          PUSH -1
004C2D65   . 68 C69B5900    PUSH 00599BC6                   ;  SE handler installation
004C2D6A   . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004C2D70   . 50             PUSH EAX
004C2D71   . 64:8925 000000>MOV DWORD PTR FS:[0],ESP
004C2D78   . 51             PUSH ECX
004C2D79   . 81EC 88010000  SUB ESP,188
004C2D7F   . 53             PUSH EBX
004C2D80   . 56             PUSH ESI
004C2D81   . 57             PUSH EDI
004C2D82   . 8965 F0        MOV DWORD PTR SS:[EBP-10],ESP
004C2D85   . C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
004C2D8C   . 8D45 10        LEA EAX,DWORD PTR SS:[EBP+10]
004C2D8F   . 8985 F0FEFFFF  MOV DWORD PTR SS:[EBP-110],EAX
004C2D95   . 8B85 F0FEFFFF  MOV EAX,DWORD PTR SS:[EBP-110]
004C2D9B   . 50             PUSH EAX
004C2D9C   . 8B4D 0C        MOV ECX,DWORD PTR SS:[EBP+C]
004C2D9F   . 51             PUSH ECX
004C2DA0   . 8D95 F4FEFFFF  LEA EDX,DWORD PTR SS:[EBP-10C]
004C2DA6   . 52             PUSH EDX
004C2DA7   . E8 59170A00    CALL 00564505                 ; vsprintf
004C2DAC   . 83C4 0C        ADD ESP,0C
004C2DAF   . C785 F0FEFFFF >MOV DWORD PTR SS:[EBP-110],0
004C2DB9   . 8D85 B8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-148]
004C2DBF   . 50             PUSH EAX                                
004C2DC0   . 8B0D FCD87600  MOV ECX,DWORD PTR DS:[76D8FC]          
004C2DC6   . E8 85DB0500    CALL 00520950                 ; dbc::TcpCommApp::GetWPacket         
004C2DCB   . C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
004C2DCF   . 68 05020000    PUSH 205
004C2DD4   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004C2DDA   . E8 D1780500    CALL 0051A6B0                 ; dbc::WPacket::WriteCmd
004C2DDF   . 8D85 F4FEFFFF  LEA EAX,DWORD PTR SS:[EBP-10C]
004C2DE5   . 50             PUSH EAX
004C2DE6   . E8 05EF0900    CALL 00561CF0                 ; strlen
004C2DEB   . 83C4 04        ADD ESP,4
004C2DEE   . 0FB7C8         MOVZX ECX,AX
004C2DF1   . 83C1 01        ADD ECX,1
004C2DF4   . 51             PUSH ECX
004C2DF5   . 8D95 F4FEFFFF  LEA EDX,DWORD PTR SS:[EBP-10C]
004C2DFB   . 52             PUSH EDX
004C2DFC   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004C2E02   . E8 A98B0500    CALL 0051B9B0                  ; dbc::WPacket::WriteSequence
004C2E07   . 83EC 38        SUB ESP,38
004C2E0A   . 8BCC           MOV ECX,ESP
004C2E0C   . 89A5 70FEFFFF  MOV DWORD PTR SS:[EBP-190],ESP
004C2E12   . 8D85 B8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-148]
004C2E18   . 50             PUSH EAX                               
004C2E19   . E8 329BF5FF    CALL 0041C950                   ; dbc::WPacket::WPacket           
004C2E1E   . 8985 6CFEFFFF  MOV DWORD PTR SS:[EBP-194],EAX
004C2E24   . 8B8D 6CFEFFFF  MOV ECX,DWORD PTR SS:[EBP-194]
004C2E2A   . 898D 68FEFFFF  MOV DWORD PTR SS:[EBP-198],ECX
004C2E30   . C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
004C2E34   . 8B55 08        MOV EDX,DWORD PTR SS:[EBP+8]
004C2E37   . 52             PUSH EDX
004C2E38   . 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
004C2E3B   . 8B10           MOV EDX,DWORD PTR DS:[EAX]
004C2E3D   . C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
004C2E41   . 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004C2E44   . FF52 30        CALL DWORD PTR DS:[EDX+30]
004C2E47   . C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
004C2E4B   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004C2E51   . E8 8A9BF5FF    CALL 0041C9E0                 ; dbc::WPacket::~WPacket
004C2E56   . EB 28          JMP SHORT 004C2E80
004C2E58   . E8 E3E4F3FF    CALL 00401340                 ; sym_engine::default_fmt
004C2E5D   . 50             PUSH EAX
004C2E5E   . 6A 00          PUSH 0
004C2E60   . 8B8D B4FEFFFF  MOV ECX,DWORD PTR SS:[EBP-14C]
004C2E66   . E8 B5E4F3FF    CALL 00401320                 ; se_translator::exception
004C2E6B   . 8B40 04        MOV EAX,DWORD PTR DS:[EAX+4]      
004C2E6E   . 50             PUSH EAX                       
004C2E6F   . E8 0C070700    CALL 00533580                 ; sym_engine::stack_trace
004C2E74   . 83C4 0C        ADD ESP,0C
004C2E77   . 6A 00          PUSH 0                           
004C2E79   . 6A 00          PUSH 0            
004C2E7B   . E8 51EA0900    CALL 005618D1                 ;  _CxxThrowException 
004C2E80   > C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
004C2E87   . 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
004C2E8A   . 64:890D 000000>MOV DWORD PTR FS:[0],ECX
004C2E91   . 5F             POP EDI
004C2E92   . 5E             POP ESI
004C2E93   . 5B             POP EBX
004C2E94   . 8BE5           MOV ESP,EBP
004C2E96   . 5D             POP EBP
004C2E97   . C3             RETN

 

 

BickerNotice()

Spoiler

004C2C70  /$ 55             PUSH EBP
004C2C71  |. 8BEC           MOV EBP,ESP
004C2C73  |. 6A FF          PUSH -1
004C2C75  |. 68 A69B5900    PUSH 00599BA6                   ;  SE handler installation
004C2C7A  |. 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004C2C80  |. 50             PUSH EAX
004C2C81  |. 64:8925 000000>MOV DWORD PTR FS:[0],ESP
004C2C88  |. 81EC 84010000  SUB ESP,184
004C2C8E  |. 53             PUSH EBX
004C2C8F  |. 56             PUSH ESI
004C2C90  |. 57             PUSH EDI
004C2C91  |. 8D45 10        LEA EAX,DWORD PTR SS:[EBP+10]
004C2C94  |. 8985 F4FEFFFF  MOV DWORD PTR SS:[EBP-10C],EAX
004C2C9A  |. 8B85 F4FEFFFF  MOV EAX,DWORD PTR SS:[EBP-10C]
004C2CA0  |. 50             PUSH EAX
004C2CA1  |. 8B4D 0C        MOV ECX,DWORD PTR SS:[EBP+C]
004C2CA4  |. 51             PUSH ECX
004C2CA5  |. 8D95 F8FEFFFF  LEA EDX,DWORD PTR SS:[EBP-108]
004C2CAB  |. 52             PUSH EDX
004C2CAC  |. E8 54180A00    CALL 00564505                   ; vsprintf
004C2CB1  |. 83C4 0C        ADD ESP,0C
004C2CB4  |. C785 F4FEFFFF >MOV DWORD PTR SS:[EBP-10C],0
004C2CBE  |. 8D85 BCFEFFFF  LEA EAX,DWORD PTR SS:[EBP-144]
004C2CC4  |. 50             PUSH EAX                            
004C2CC5  |. 8B0D FCD87600  MOV ECX,DWORD PTR DS:[76D8FC]  
004C2CCB  |. E8 80DC0500    CALL 00520950                   ; dbc::TcpCommApp::GetWPacket
004C2CD0  |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
004C2CD7  |. 68 5C030000    PUSH 35C
004C2CDC  |. 8D8D BCFEFFFF  LEA ECX,DWORD PTR SS:[EBP-144]
004C2CE2  |. E8 C9790500    CALL 0051A6B0                   ; dbc::WPacket::WriteCmd
004C2CE7  |. 8D85 F8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-108]
004C2CED  |. 50             PUSH EAX
004C2CEE  |. 8D8D BCFEFFFF  LEA ECX,DWORD PTR SS:[EBP-144]
004C2CF4  |. E8 D78D0500    CALL 0051BAD0                   ; dbc::WPacket::WriteString
004C2CF9  |. 83EC 38        SUB ESP,38
004C2CFC  |. 8BCC           MOV ECX,ESP
004C2CFE  |. 89A5 78FEFFFF  MOV DWORD PTR SS:[EBP-188],ESP
004C2D04  |. 8D85 BCFEFFFF  LEA EAX,DWORD PTR SS:[EBP-144]
004C2D0A  |. 50             PUSH EAX                                
004C2D0B  |. E8 409CF5FF    CALL 0041C950                   ; dbc::WPacket::WPacket
004C2D10  |. 8985 74FEFFFF  MOV DWORD PTR SS:[EBP-18C],EAX
004C2D16  |. 8B8D 74FEFFFF  MOV ECX,DWORD PTR SS:[EBP-18C]
004C2D1C  |. 898D 70FEFFFF  MOV DWORD PTR SS:[EBP-190],ECX
004C2D22  |. C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
004C2D26  |. 8B55 08        MOV EDX,DWORD PTR SS:[EBP+8]
004C2D29  |. 52             PUSH EDX
004C2D2A  |. 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
004C2D2D  |. 8B10           MOV EDX,DWORD PTR DS:[EAX]
004C2D2F  |. C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
004C2D33  |. 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004C2D36  |. FF52 30        CALL DWORD PTR DS:[EDX+30]
004C2D39  |. C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
004C2D40  |. 8D8D BCFEFFFF  LEA ECX,DWORD PTR SS:[EBP-144]
004C2D46  |. E8 959CF5FF    CALL 0041C9E0             ; dbc::WPacket::~WPacket
004C2D4B  |. 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
004C2D4E  |. 64:890D 000000>MOV DWORD PTR FS:[0],ECX
004C2D55  |. 5F             POP EDI
004C2D56  |. 5E             POP ESI
004C2D57  |. 5B             POP EBX
004C2D58  |. 8BE5           MOV ESP,EBP
004C2D5A  |. 5D             POP EBP
004C2D5B  \. C3             RETN

 

 

PopupNotice()

Spoiler

004C2EA0   $ 55             PUSH EBP
004C2EA1   . 8BEC           MOV EBP,ESP
004C2EA3   . 6A FF          PUSH -1
004C2EA5   . 68 E69B5900    PUSH 00599BE6                   ;  SE handler installation
004C2EAA   . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004C2EB0   . 50             PUSH EAX
004C2EB1   . 64:8925 000000>MOV DWORD PTR FS:[0],ESP
004C2EB8   . 51             PUSH ECX
004C2EB9   . 81EC 88010000  SUB ESP,188
004C2EBF   . 53             PUSH EBX
004C2EC0   . 56             PUSH ESI
004C2EC1   . 57             PUSH EDI
004C2EC2   . 8965 F0        MOV DWORD PTR SS:[EBP-10],ESP
004C2EC5   . C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
004C2ECC   . 8D45 10        LEA EAX,DWORD PTR SS:[EBP+10]
004C2ECF   . 8985 F0FEFFFF  MOV DWORD PTR SS:[EBP-110],EAX
004C2ED5   . 8B85 F0FEFFFF  MOV EAX,DWORD PTR SS:[EBP-110]
004C2EDB   . 50             PUSH EAX
004C2EDC   . 8B4D 0C        MOV ECX,DWORD PTR SS:[EBP+C]
004C2EDF   . 51             PUSH ECX
004C2EE0   . 8D95 F4FEFFFF  LEA EDX,DWORD PTR SS:[EBP-10C]
004C2EE6   . 52             PUSH EDX
004C2EE7   . E8 19160A00    CALL 00564505                     ; vsprintf
004C2EEC   . 83C4 0C        ADD ESP,0C
004C2EEF   . C785 F0FEFFFF >MOV DWORD PTR SS:[EBP-110],0
004C2EF9   . 8D85 B8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-148]
004C2EFF   . 50             PUSH EAX                                
004C2F00   . 8B0D FCD87600  MOV ECX,DWORD PTR DS:[76D8FC]           
004C2F06   . E8 45DA0500    CALL 00520950                     ; dbc::TcpCommApp::GetWPacket                 
004C2F0B   . C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
004C2F0F   . 68 38020000    PUSH 238
004C2F14   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004C2F1A   . E8 91770500    CALL 0051A6B0                     ; dbc::WPacket::WriteCmd
004C2F1F   . 8D85 F4FEFFFF  LEA EAX,DWORD PTR SS:[EBP-10C]
004C2F25   . 50             PUSH EAX
004C2F26   . E8 C5ED0900    CALL 00561CF0                     ; strlen
004C2F2B   . 83C4 04        ADD ESP,4
004C2F2E   . 0FB7C8         MOVZX ECX,AX
004C2F31   . 83C1 01        ADD ECX,1
004C2F34   . 51             PUSH ECX
004C2F35   . 8D95 F4FEFFFF  LEA EDX,DWORD PTR SS:[EBP-10C]
004C2F3B   . 52             PUSH EDX
004C2F3C   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004C2F42   . E8 698A0500    CALL 0051B9B0                     ; dbc::WPacket::WriteSequence 
004C2F47   . 83EC 38        SUB ESP,38
004C2F4A   . 8BCC           MOV ECX,ESP
004C2F4C   . 89A5 70FEFFFF  MOV DWORD PTR SS:[EBP-190],ESP
004C2F52   . 8D85 B8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-148]
004C2F58   . 50             PUSH EAX                               
004C2F59   . E8 F299F5FF    CALL 0041C950                     ; dbc::WPacket::WPacket                
004C2F5E   . 8985 6CFEFFFF  MOV DWORD PTR SS:[EBP-194],EAX
004C2F64   . 8B8D 6CFEFFFF  MOV ECX,DWORD PTR SS:[EBP-194]
004C2F6A   . 898D 68FEFFFF  MOV DWORD PTR SS:[EBP-198],ECX
004C2F70   . C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
004C2F74   . 8B55 08        MOV EDX,DWORD PTR SS:[EBP+8]
004C2F77   . 52             PUSH EDX
004C2F78   . 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
004C2F7B   . 8B10           MOV EDX,DWORD PTR DS:[EAX]
004C2F7D   . C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
004C2F81   . 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004C2F84   . FF52 30        CALL DWORD PTR DS:[EDX+30]
004C2F87   . C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
004C2F8B   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004C2F91   . E8 4A9AF5FF    CALL 0041C9E0                      ; dbc::WPacket::~WPacket
004C2F96   . EB 28          JMP SHORT 004C2FC0
004C2F98   . E8 A3E3F3FF    CALL 00401340                      ; sym_engine::default_fmt
004C2F9D   . 50             PUSH EAX
004C2F9E   . 6A 00          PUSH 0
004C2FA0   . 8B8D B4FEFFFF  MOV ECX,DWORD PTR SS:[EBP-14C]
004C2FA6   . E8 75E3F3FF    CALL 00401320                      ; se_translator::exception
004C2FAB   . 8B40 04        MOV EAX,DWORD PTR DS:[EAX+4]         
004C2FAE   . 50             PUSH EAX                                
004C2FAF   . E8 CC050700    CALL 00533580                      ; sym_engine::stack_trace                       
004C2FB4   . 83C4 0C        ADD ESP,0C
004C2FB7   . 6A 00          PUSH 0                                 
004C2FB9   . 6A 00          PUSH 0                                  
004C2FBB   . E8 11E90900    CALL 005618D1                      ; _CxxThrowException                
004C2FC0   > C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
004C2FC7   . 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
004C2FCA   . 64:890D 000000>MOV DWORD PTR FS:[0],ECX
004C2FD1   . 5F             POP EDI
004C2FD2   . 5E             POP ESI
004C2FD3   . 5B             POP EBX
004C2FD4   . 8BE5           MOV ESP,EBP
004C2FD6   . 5D             POP EBP
004C2FD7   . C3             RETN

 

 

CPlayer::SystemNotice

Spoiler

004E6BB0   $ 55             PUSH EBP
004E6BB1   . 8BEC           MOV EBP,ESP
004E6BB3   . 6A FF          PUSH -1
004E6BB5   . 68 B6B25900    PUSH 0059B2B6                   ;  SE handler installation
004E6BBA   . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004E6BC0   . 50             PUSH EAX
004E6BC1   . 64:8925 000000>MOV DWORD PTR FS:[0],ESP
004E6BC8   . 51             PUSH ECX
004E6BC9   . 81EC 88010000  SUB ESP,188
004E6BCF   . 53             PUSH EBX
004E6BD0   . 56             PUSH ESI
004E6BD1   . 57             PUSH EDI
004E6BD2   . 8965 F0        MOV DWORD PTR SS:[EBP-10],ESP
004E6BD5   . C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
004E6BDC   . 8D45 10        LEA EAX,DWORD PTR SS:[EBP+10]
004E6BDF   . 8985 F0FEFFFF  MOV DWORD PTR SS:[EBP-110],EAX
004E6BE5   . 8B85 F0FEFFFF  MOV EAX,DWORD PTR SS:[EBP-110]
004E6BEB   . 50             PUSH EAX
004E6BEC   . 8B4D 0C        MOV ECX,DWORD PTR SS:[EBP+C]
004E6BEF   . 51             PUSH ECX
004E6BF0   . 8D95 F4FEFFFF  LEA EDX,DWORD PTR SS:[EBP-10C]
004E6BF6   . 52             PUSH EDX
004E6BF7   . E8 09D90700    CALL 00564505                          ; vsprintf
004E6BFC   . 83C4 0C        ADD ESP,0C
004E6BFF   . C785 F0FEFFFF >MOV DWORD PTR SS:[EBP-110],0
004E6C09   . 8D85 B8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-148]
004E6C0F   . 50             PUSH EAX                              
004E6C10   . 8B0D FCD87600  MOV ECX,DWORD PTR DS:[76D8FC]        
004E6C16   . E8 359D0300    CALL 00520950                        ; dbc::TcpCommApp::GetWPacket
004E6C1B   . C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
004E6C1F   . 68 05020000    PUSH 205
004E6C24   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004E6C2A   . E8 813A0300    CALL 0051A6B0                        ; dbc::WPacket::WriteCmd
004E6C2F   . 8D85 F4FEFFFF  LEA EAX,DWORD PTR SS:[EBP-10C]
004E6C35   . 50             PUSH EAX
004E6C36   . E8 B5B00700    CALL 00561CF0                        ; strlen
004E6C3B   . 83C4 04        ADD ESP,4
004E6C3E   . 0FB7C8         MOVZX ECX,AX
004E6C41   . 83C1 01        ADD ECX,1
004E6C44   . 51             PUSH ECX
004E6C45   . 8D95 F4FEFFFF  LEA EDX,DWORD PTR SS:[EBP-10C]
004E6C4B   . 52             PUSH EDX
004E6C4C   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004E6C52   . E8 594D0300    CALL 0051B9B0                       ; dbc::WPacket::WriteSequence
004E6C57   . 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004E6C5A   . E8 6129F7FF    CALL 004595C0                       ; GatePlayer::GetDBChaId
004E6C5F   . 50             PUSH EAX
004E6C60   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004E6C66   . E8 454C0300    CALL 0051B8B0                       ; dbc::WPacket::WriteLong
004E6C6B   . 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004E6C6E   . E8 ADCFFBFF    CALL 004A3C20                       ; GatePlayer::GetGateAddr
004E6C73   . 50             PUSH EAX
004E6C74   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004E6C7A   . E8 314C0300    CALL 0051B8B0                       ; dbc::WPacket::WriteLong
004E6C7F   . 6A 01          PUSH 1
004E6C81   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004E6C87   . E8 144B0300    CALL 0051B7A0                       ; dbc::WPacket::WriteShort
004E6C8C   . 83EC 38        SUB ESP,38
004E6C8F   . 8BCC           MOV ECX,ESP
004E6C91   . 89A5 70FEFFFF  MOV DWORD PTR SS:[EBP-190],ESP
004E6C97   . 8D85 B8FEFFFF  LEA EAX,DWORD PTR SS:[EBP-148]
004E6C9D   . 50             PUSH EAX                             
004E6C9E   . E8 AD5CF3FF    CALL 0041C950                       ; dbc::WPacket::WPacket             
004E6CA3   . 8985 6CFEFFFF  MOV DWORD PTR SS:[EBP-194],EAX
004E6CA9   . 8B8D 6CFEFFFF  MOV ECX,DWORD PTR SS:[EBP-194]
004E6CAF   . 898D 68FEFFFF  MOV DWORD PTR SS:[EBP-198],ECX
004E6CB5   . C645 FC 02     MOV BYTE PTR SS:[EBP-4],2
004E6CB9   . 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004E6CBC   . E8 2F58FDFF    CALL 004BC4F0                       ; GatePlayer::GetGate
004E6CC1   . C645 FC 01     MOV BYTE PTR SS:[EBP-4],1              
004E6CC5   . 8BC8           MOV ECX,EAX                            
004E6CC7   . E8 645DF3FF    CALL 0041CA30                       ; GateServer::SendData             
004E6CCC   . C645 FC 00     MOV BYTE PTR SS:[EBP-4],0
004E6CD0   . 8D8D B8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-148]
004E6CD6   . E8 055DF3FF    CALL 0041C9E0                       ; dbc::WPacket::~WPacket
004E6CDB   . EB 28          JMP SHORT 004E6D05
004E6CDD   . E8 5EA6F1FF    CALL 00401340                       ; sym_engine::default_fmt
004E6CE2   . 50             PUSH EAX
004E6CE3   . 6A 00          PUSH 0
004E6CE5   . 8B8D B4FEFFFF  MOV ECX,DWORD PTR SS:[EBP-14C]
004E6CEB   . E8 30A6F1FF    CALL 00401320                       ; se_translator::exception
004E6CF0   . 8B40 04        MOV EAX,DWORD PTR DS:[EAX+4]        
004E6CF3   . 50             PUSH EAX                             
004E6CF4   . E8 87C80400    CALL 00533580                       ; sym_engine::stack_trace            
004E6CF9   . 83C4 0C        ADD ESP,0C
004E6CFC   . 6A 00          PUSH 0                                 
004E6CFE   . 6A 00          PUSH 0                                 
004E6D00   . E8 CCAB0700    CALL 005618D1                       ; _CxxThrowException             
004E6D05   > C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
004E6D0C   . 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
004E6D0F   . 64:890D 000000>MOV DWORD PTR FS:[0],ECX
004E6D16   . 5F             POP EDI
004E6D17   . 5E             POP ESI
004E6D18   . 5B             POP EBX
004E6D19   . 8BE5           MOV ESP,EBP
004E6D1B   . 5D             POP EBP
004E6D1C   . C3             RETN

 

 

Заменяем во всех этих функциях инструкции вызова функции vsprintf():

MOV EAX,DWORD PTR SS:[EBP-110]
PUSH EAX                                 ; /arglist
MOV ECX,DWORD PTR SS:[EBP+C]             ; |
PUSH ECX                                 ; |format
LEA EDX,DWORD PTR SS:[EBP-10C]           ; |
PUSH EDX                                 ; |buffer
CALL vsprintf                            ; \vsprintf
ADD ESP,0C

На инструкции вызова функции _vsnprintf():

MOV EAX,DWORD PTR SS:[EBP-110]
PUSH EAX                                        ; /arglist
MOV ECX,DWORD PTR SS:[EBP+C]                    ; |
PUSH ECX                                        ; |format
PUSH 0F9                                        ; |count = F9 (249.)
LEA EDX,DWORD PTR SS:[EBP-10C]                  ; |
PUSH EDX                                        ; |buffer
CALL _vsnprintf                                 ; \_vsnprintf
ADD ESP,10

 

Разберем замену инструкций на примере функции SystemNotice() из GameServer.exe версии 1.38

Исправленная функция SystemNotice() будет выглядеть следующим образом (обратите внимание на строки 17 - 25):

PUSH EBP
MOV EBP,ESP
PUSH -1
PUSH 005A67A6                          ;  SE handler installation
MOV EAX,DWORD PTR FS:[0]
PUSH EAX
MOV DWORD PTR FS:[0],ESP
PUSH ECX
SUB ESP,188
PUSH EBX
PUSH ESI
PUSH EDI
MOV DWORD PTR SS:[EBP-10],ESP
MOV DWORD PTR SS:[EBP-4],0
LEA EAX,DWORD PTR SS:[EBP+10]
MOV DWORD PTR SS:[EBP-110],EAX
MOV EAX,DWORD PTR SS:[EBP-110]
PUSH EAX                                        ; /arglist
MOV ECX,DWORD PTR SS:[EBP+C]                    ; |
PUSH ECX                                        ; |format
PUSH 0F9                                        ; |count = F9 (249.)
LEA EDX,DWORD PTR SS:[EBP-10C]                  ; |
PUSH EDX                                        ; |buffer
CALL 00572811                                   ; \_vsnprintf
ADD ESP,10
MOV DWORD PTR SS:[EBP-110],0
LEA EAX,DWORD PTR SS:[EBP-148]
PUSH EAX                                        ; /Arg1
MOV ECX,DWORD PTR DS:[77984C]                   ; | g_gmsvr
CALL 00529CE0                                   ; \?GetWPacket@TcpCommApp@dbc@@QBE?AVWPacket@2@XZ
MOV BYTE PTR SS:[EBP-4],1
PUSH 205
LEA ECX,DWORD PTR SS:[EBP-148]
CALL 00523A40                                   ; dbc::WPacket::WriteCmd
LEA EAX,DWORD PTR SS:[EBP-10C]
PUSH EAX                                        ; /s
CALL 0056E1D0                                   ; \strlen
ADD ESP,4
MOVZX ECX,AX
ADD ECX,1
PUSH ECX
LEA EDX,DWORD PTR SS:[EBP-10C]
PUSH EDX
LEA ECX,DWORD PTR SS:[EBP-148]
CALL 00524D40                                  ; dbc::WPacket::WriteSequence
SUB ESP,38
MOV ECX,ESP
MOV DWORD PTR SS:[EBP-190],ESP
LEA EAX,DWORD PTR SS:[EBP-148]
PUSH EAX                                        ; /Arg1
CALL 0041DBD0                                   ; \dbc::WPacket::WPacket
MOV DWORD PTR SS:[EBP-194],EAX
MOV ECX,DWORD PTR SS:[EBP-194]
MOV DWORD PTR SS:[EBP-198],ECX
MOV BYTE PTR SS:[EBP-4],2
MOV EDX,DWORD PTR SS:[EBP+8]
PUSH EDX
MOV EAX,DWORD PTR SS:[EBP+8]
MOV EDX,DWORD PTR DS:[EAX]
MOV BYTE PTR SS:[EBP-4],1
MOV ECX,DWORD PTR SS:[EBP+8]
CALL DWORD PTR DS:[EDX+30]
MOV BYTE PTR SS:[EBP-4],0
LEA ECX,DWORD PTR SS:[EBP-148]
CALL 0041DC60                                   ; dbc::WPacket::~WPacket
JMP SHORT OK 
CALL 00401340                                   ; sym_engine::default_fmt
PUSH EAX 
PUSH 0
MOV ECX,DWORD PTR SS:[EBP-14C]
CALL 00401320                                   ;se_translator::exception::info
MOV EAX,DWORD PTR DS:[EAX+4]                    ; |
PUSH EAX                                        ; |Arg1
CALL 0053C910                                   ; \sym_engine::stack_trace
ADD ESP,0C
PUSH 0                                          ; /Arg2 = 00000000
PUSH 0                                          ; |Arg1 = 00000000
CALL 0056DDB1                                   ; \_CxxThrowException
OK: MOV DWORD PTR SS:[EBP-4],-1
MOV ECX,DWORD PTR SS:[EBP-C]
MOV DWORD PTR FS:[0],ECX
POP EDI
POP ESI
POP EBX
MOV ESP,EBP
POP EBP
RETN

 

Открываем GameServer.exe в отладчике OllyDbg и помещаем инструкции, которые приведены выше, в Code Cave:

ogsep1.png

ogsep2.png

 

Теперь необходимо заменить вызов оригинальной небезопасной функции SystemNotice() на нашу исправленную. Для этого по адресу 0x004CA2C0 (адрес оригинальной функции SystemNotice()) записываем инструкции перехода на новую функцию по адресу 0x005B25A4:

ogsep3.png

 

Далее проделываем такие же операции с остальными небезопасными функциями и сохраняем изменения в GameServer.exe, а затем тестируем его в согласно п. 3 данной статьи.

  • Like 3

Share this post


Link to post
Share on other sites

Все эти баги работают на фан серверах, китайцы не рассчитывали, что там будут рейты х1000 и все предметы бесплатны.Вот по этому и вылезают куча багов. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×