← Back to DevelopmentAging & Mixing viewer.dll generatorProgramsClan filesInternet Information ServiceOllyDbg tutorialsMiscellaneousSkinsLinks / Files

bosstime_in_greeting_text

← Back to Miscellaneous
This one won't be detailled because i'm too lazy to explain what I did.
The goal is to make the greeting text always display (without having to set the GPCode inside the database) and integrate the boss time in it.

First of all, the chunk of code displaying the boss time when you type /get_bosstime ingame is here :

OllyDbg - Server side

0056C49D  |.  52            PUSH EDX                                 ; /<%d> => [6E46A8] = 1
0056C49E  |.  50            PUSH EAX                                 ; |<%d> => [845858] = 0
0056C49F  |.  8D4C24 34     LEA ECX,[LOCAL.215]                      ; |
0056C4A3  |.  68 38906000   PUSH OFFSET xxxxxxxxxxxxxxxxxxxxxxxxxxxx ; |Format = "%d> Boss Time ( %d min.)"
0056C4A8  |.  51            PUSH ECX                                 ; |Buf
0056C4A9  |.  FF15 0CF35D00 CALL DWORD PTR DS:[<&USER32.wsprintfA>]  ; \USER32.wsprintfA

The time is located at the address 6E46A8 inside the memory.


The procedure displaying the greeting text is here

OllyDbg - Server side

005506D0  /$  81EC 94010000 SUB ESP,194                              ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_-.005506D0(guessed Arg1,Arg2)
005506D6  |.  57            PUSH EDI
005506D7  |.  8BBC24 9C0100 MOV EDI,DWORD PTR SS:[ARG.1]
005506DE  |.  8B87 C4B00000 MOV EAX,DWORD PTR DS:[EDI+0B0C4]
005506E4  |.  A8 01         TEST AL,01
005506E6  |.  75 04         JNE SHORT 005506EC
005506E8  |.  A8 02         TEST AL,02
005506EA  |.  74 0A         JE SHORT 005506F6
005506EC  |>  33C0          XOR EAX,EAX
005506EE  |.  5F            POP EDI
005506EF  |.  81C4 94010000 ADD ESP,194
005506F5  |.  C3            RETN
005506F6  |>  8B87 C0B00000 MOV EAX,DWORD PTR DS:[EDI+0B0C0]
005506FC  |.  53            PUSH EBX
005506FD  |.  33DB          XOR EBX,EBX
005506FF  |.  3BC3          CMP EAX,EBX
00550701  |.  55            PUSH EBP
00550702  |.  56            PUSH ESI
00550703  |.  7E 0B         JLE SHORT 00550710
00550705  |.  A1 102A6E00   MOV EAX,DWORD PTR DS:[6E2A10]
0055070A  |.  894424 10     MOV DWORD PTR SS:[LOCAL.100],EAX
0055070E  |.  EB 08         JMP SHORT 00550718
00550710  |>  C74424 10 92F MOV DWORD PTR SS:[LOCAL.100],OFFSET xxxx
00550718  |>  8B8F ACB00000 MOV ECX,DWORD PTR DS:[EDI+0B0AC]
0055071E  |.  3BCB          CMP ECX,EBX
00550720  |.  8B2D 0CF35D00 MOV EBP,DWORD PTR DS:[<&USER32.wsprintfA
00550726  |.  8D87 ACB00000 LEA EAX,[EDI+0B0AC]
0055072C  |.  889C24 240100 MOV BYTE PTR SS:[LOCAL.31],BL
00550733  |.  0F84 9C000000 JE 005507D5
00550739  |.  50            PUSH EAX                                 ; /Arg1
0055073A  |.  E8 D1890700   CALL 005C9110                            ; \xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_-.005C9110
0055073F  |.  8BB424 B00100 MOV ESI,DWORD PTR SS:[ARG.2]
00550746  |.  83C4 04       ADD ESP,4
00550749  |.  3BF3          CMP ESI,EBX
0055074B  |.  74 17         JE SHORT 00550764
0055074D  |.  8D8C24 AC0100 LEA ECX,[ARG.2]
00550754  |.  51            PUSH ECX                                 ; /Arg1 => OFFSET ARG.2
00550755  |.  E8 B6890700   CALL 005C9110                            ; \xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_-.005C9110
0055075A  |.  8BB424 B00100 MOV ESI,DWORD PTR SS:[ARG.2]
00550761  |.  83C4 04       ADD ESP,4
00550764  |>  3BC3          CMP EAX,EBX
00550766  |.  74 74         JE SHORT 005507DC
00550768  |.  8B48 0C       MOV ECX,DWORD PTR DS:[EAX+0C]
0055076B  |.  8D9424 240100 LEA EDX,[LOCAL.31]
00550772  |.  52            PUSH EDX
00550773  |.  8B50 10       MOV EDX,DWORD PTR DS:[EAX+10]
00550776  |.  8B40 14       MOV EAX,DWORD PTR DS:[EAX+14]
00550779  |.  51            PUSH ECX
0055077A  |.  8B4C24 18     MOV ECX,DWORD PTR SS:[LOCAL.100]
0055077E  |.  42            INC EDX
0055077F  |.  52            PUSH EDX
00550780  |.  8B15 1C2A6E00 MOV EDX,DWORD PTR DS:[6E2A1C]            ; ASCII "%sThanks you for joining SPT server (^_^)    Your expired date is %d/%d/%d, enjoy the game%s"
00550786  |.  05 6C070000   ADD EAX,76C
0055078B  |.  50            PUSH EAX
0055078C  |.  51            PUSH ECX
0055078D  |.  52            PUSH EDX                                 ; |Format => [6E2A1C] = "%sThanks you for joining SPT server (^_^)    Your expired date is %d/%d/%d, enjoy the game%s"
0055078E  |.  8D4424 3C     LEA EAX,[LOCAL.95]                       ; |
00550792  |.  50            PUSH EAX                                 ; |Buf => OFFSET LOCAL.95
00550793  |.  FFD5          CALL EBP                                 ; \USER32.wsprintfA
00550795  |.  83C4 1C       ADD ESP,1C
00550798  |.  8D4C24 24     LEA ECX,[LOCAL.95]
0055079C  |.  51            PUSH ECX                                 ; /String => OFFSET LOCAL.95
0055079D  |.  C74424 1C 051 MOV DWORD PTR SS:[LOCAL.98],48471005     ; |
005507A5  |.  FF15 00F25D00 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] ; \KERNEL32.lstrlen
005507AB  |.  8B8F FC6D0000 MOV ECX,DWORD PTR DS:[EDI+6DFC]
005507B1  |.  83C0 20       ADD EAX,20
005507B4  |.  3BCB          CMP ECX,EBX
005507B6  |.  894424 14     MOV DWORD PTR SS:[LOCAL.99],EAX
005507BA  |.  C74424 1C 030 MOV DWORD PTR SS:[LOCAL.97],3
005507C2  |.  895C24 20     MOV DWORD PTR SS:[LOCAL.96],EBX
005507C6  |.  74 0D         JE SHORT 005507D5
005507C8  |.  6A 01         PUSH 1                                   ; /Arg3 = 1
005507CA  |.  50            PUSH EAX                                 ; |Arg2
005507CB  |.  8D5424 1C     LEA EDX,[LOCAL.99]                       ; |
005507CF  |.  52            PUSH EDX                                 ; |Arg1 => OFFSET LOCAL.99
005507D0  |.  E8 1B06F0FF   CALL 00450DF0                            ; \xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_-.00450DF0
005507D5  |>  8BB424 AC0100 MOV ESI,DWORD PTR SS:[ARG.2]
005507DC  |>  399F BCB00000 CMP DWORD PTR DS:[EDI+0B0BC],EBX
005507E2  |.  0F84 FD000000 JE 005508E5
005507E8  |.  3BF3          CMP ESI,EBX
005507EA  |.  74 2F         JE SHORT 0055081B
005507EC  |.  8B0D 182A6E00 MOV ECX,DWORD PTR DS:[6E2A18]            ; ASCII "h)`"
005507F2  |.  B8 C5B3A291   MOV EAX,91A2B3C5
005507F7  |.  F7EE          IMUL ESI
005507F9  |.  03D6          ADD EDX,ESI
005507FB  |.  C1FA 0B       SAR EDX,0B
005507FE  |.  8BC2          MOV EAX,EDX
00550800  |.  C1E8 1F       SHR EAX,1F
00550803  |.  03D0          ADD EDX,EAX
00550805  |.  52            PUSH EDX
00550806  |.  51            PUSH ECX                                 ; |Format => [6E2A18] = "\[%d]B"
00550807  |.  8D9424 2C0100 LEA EDX,[LOCAL.31]                       ; |
0055080E  |.  52            PUSH EDX                                 ; |Buf => OFFSET LOCAL.31
0055080F  |.  FFD5          CALL EBP                                 ; \USER32.wsprintfA
00550811  |.  8BB424 B80100 MOV ESI,DWORD PTR SS:[ARG.2]
00550818  |.  83C4 0C       ADD ESP,0C
0055081B  |>  8B8F BCB00000 MOV ECX,DWORD PTR DS:[EDI+0B0BC]
00550821  |.  A1 6C9DAC07   MOV EAX,DWORD PTR DS:[7AC9D6C]
00550826  |.  3BC8          CMP ECX,EAX
00550828  |.  76 12         JBE SHORT 0055083C
0055082A  |.  2BC8          SUB ECX,EAX
0055082C  |.  B8 89888888   MOV EAX,88888889
00550831  |.  F7E1          MUL ECX
00550833  |.  8BCA          MOV ECX,EDX
00550835  |.  C1E9 05       SHR ECX,5
00550838  |.  3BCB          CMP ECX,EBX
0055083A  |.  7D 02         JGE SHORT 0055083E
0055083C  |>  33C9          XOR ECX,ECX
0055083E  |>  B8 89888888   MOV EAX,88888889
00550843  |.  F7EE          IMUL ESI
00550845  |.  03D6          ADD EDX,ESI
00550847  |.  C1FA 05       SAR EDX,5
0055084A  |.  8BC2          MOV EAX,EDX
0055084C  |.  C1E8 1F       SHR EAX,1F
0055084F  |.  03D0          ADD EDX,EAX
00550851  |.  03CA          ADD ECX,EDX
00550853  |.  8BC1          MOV EAX,ECX
00550855  |.  99            CDQ
00550856  |.  B9 3C000000   MOV ECX,3C
0055085B  |.  F7F9          IDIV ECX
0055085D  |.  889C24 240100 MOV BYTE PTR SS:[LOCAL.31],BL
00550864  |.  3BC3          CMP EAX,EBX
00550866  |.  7E 21         JLE SHORT 00550889
00550868  |.  8D8C24 240100 LEA ECX,[LOCAL.31]
0055086F  |.  51            PUSH ECX
00550870  |.  52            PUSH EDX
00550871  |.  8B5424 18     MOV EDX,DWORD PTR SS:[LOCAL.100]
00550875  |.  50            PUSH EAX
00550876  |.  A1 202A6E00   MOV EAX,DWORD PTR DS:[6E2A20]
0055087B  |.  52            PUSH EDX
0055087C  |.  50            PUSH EAX                                 ; |Format => [6E2A20] = "%sgpI%d%dcB%s"
0055087D  |.  8D4C24 38     LEA ECX,[LOCAL.95]                       ; |
00550881  |.  51            PUSH ECX                                 ; |Buf => OFFSET LOCAL.95
00550882  |.  FFD5          CALL EBP                                 ; \USER32.wsprintfA
00550884  |.  83C4 18       ADD ESP,18
00550887  |.  EB 1F         JMP SHORT 005508A8
00550889  |>  8B4C24 10     MOV ECX,DWORD PTR SS:[LOCAL.100]
0055088D  |.  8D8424 240100 LEA EAX,[LOCAL.31]
00550894  |.  50            PUSH EAX
00550895  |.  52            PUSH EDX
00550896  |.  8B15 242A6E00 MOV EDX,DWORD PTR DS:[6E2A24]
0055089C  |.  51            PUSH ECX
0055089D  |.  52            PUSH EDX                                 ; |Format => [6E2A24] = "%sgpI%dcB%s"
0055089E  |.  8D4424 34     LEA EAX,[LOCAL.95]                       ; |
005508A2  |.  50            PUSH EAX                                 ; |Buf => OFFSET LOCAL.95
005508A3  |.  FFD5          CALL EBP                                 ; \USER32.wsprintfA
005508A5  |.  83C4 14       ADD ESP,14
005508A8  |>  8D4C24 24     LEA ECX,[LOCAL.95]
005508AC  |.  51            PUSH ECX                                 ; /String => OFFSET LOCAL.95
005508AD  |.  C74424 1C 051 MOV DWORD PTR SS:[LOCAL.98],48471005     ; |
005508B5  |.  FF15 00F25D00 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] ; \KERNEL32.lstrlen
005508BB  |.  8B8F FC6D0000 MOV ECX,DWORD PTR DS:[EDI+6DFC]
005508C1  |.  83C0 20       ADD EAX,20
005508C4  |.  3BCB          CMP ECX,EBX
005508C6  |.  894424 14     MOV DWORD PTR SS:[LOCAL.99],EAX
005508CA  |.  C74424 1C 030 MOV DWORD PTR SS:[LOCAL.97],3
005508D2  |.  895C24 20     MOV DWORD PTR SS:[LOCAL.96],EBX
005508D6  |.  74 0D         JE SHORT 005508E5
005508D8  |.  6A 01         PUSH 1                                   ; /Arg3 = 1
005508DA  |.  50            PUSH EAX                                 ; |Arg2
005508DB  |.  8D5424 1C     LEA EDX,[LOCAL.99]                       ; |
005508DF  |.  52            PUSH EDX                                 ; |Arg1 => OFFSET LOCAL.99
005508E0  |.  E8 0B05F0FF   CALL 00450DF0                            ; \xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_-.00450DF0
005508E5  |>  5E            POP ESI
005508E6  |.  5D            POP EBP
005508E7  |.  5B            POP EBX
005508E8  |.  B8 01000000   MOV EAX,1
005508ED  |.  5F            POP EDI
005508EE  |.  81C4 94010000 ADD ESP,194
005508F4  \.  C3            RETN

As you can see, it's a big procedure. The greeting text has been relocated at the offset 08B652A6. It's in the "GFantasy" section.

I'm going to move it a bit further to have more space, at 08B8000.

OllyDbg - Server side



The original text format had 5 arguments. We're going to reduce it to only 1, the boss time.
I'll use "Welcome to KirbyPT! <www.kirbypt.com> Boss time is: xx:%02d."

OllyDbg - Server side



I don't really need all that code so I'm going to reduce it to only what I need. It could be reduced more but it's working like that, even with all the useless PUSHes.
That's the chunk of code I don't detail.

OllyDbg - Server side

005506D0  /$  81EC 94010000             SUB ESP,194                                                           ; server.005506D0(guessed Arg1,Arg2)
005506D6  |.  57                        PUSH EDI
005506D7  |.  8BBC24 9C010000           MOV EDI,DWORD PTR SS:[ARG.1]
005506DE  |.  8B87 C4B00000             MOV EAX,DWORD PTR DS:[EDI+0B0C4]
005506E4  |.  8B87 C0B00000             MOV EAX,DWORD PTR DS:[EDI+0B0C0]
005506EA  |.  53                        PUSH EBX
005506EB  |.  31DB                      XOR EBX,EBX
005506ED  |.  55                        PUSH EBP
005506EE  |.  56                        PUSH ESI
005506EF  |.  C744E4 10 92F85D00        MOV DWORD PTR SS:[LOCAL.100],OFFSET server.00
005506F7  |.  8B8F ACB00000             MOV ECX,DWORD PTR DS:[EDI+0B0AC]
005506FD  |.  8D87 ACB00000             LEA EAX,[EDI+0B0AC]
00550703  |.  889CE4 24010000           MOV BYTE PTR SS:[LOCAL.31],BL
0055070A  |.  50                        PUSH EAX                                                              ; /Arg1
0055070B  |.  E8 008A0700               CALL 005C9110                                                         ; \server.005C9110
00550710  |.  8B35 A8466E00             MOV ESI,DWORD PTR DS:[6E46A8]                                         ; That's the bosstime
00550716  |.  90                        NOP
00550717  |.  83C4 04                   ADD ESP,4
0055071A  |.  8B48 0C                   MOV ECX,DWORD PTR DS:[EAX+0C]
0055071D  |.  8D94E4 24010000           LEA EDX,[LOCAL.31]
00550724  |.  52                        PUSH EDX
00550725  |.  8B50 10                   MOV EDX,DWORD PTR DS:[EAX+10]
00550728  |.  8B40 14                   MOV EAX,DWORD PTR DS:[EAX+14]
0055072B  |.  51                        PUSH ECX
0055072C  |.  8B4CE4 18                 MOV ECX,DWORD PTR SS:[LOCAL.100]
00550730  |.  42                        INC EDX
00550731  |.  52                        PUSH EDX
00550732  |.  8B15 1C2A6E00             MOV EDX,DWORD PTR DS:[6E2A1C]                                         ; ASCII "Welcome to KirbyPT! <www.kirbypt.com>      Boss time is: xx:%02d."
00550738  |.  05 6C070000               ADD EAX,76C
0055073D  |.  50                        PUSH EAX
0055073E  |.  56                        PUSH ESI
0055073F  |.  52                        PUSH EDX                                                              ; |Format => [6E2A1C] = "Welcome to KirbyPT! <www.kirbypt.com>      Boss time is: xx:%02d."
00550740  |.  8D44E4 3C                 LEA EAX,[LOCAL.95]                                                    ; |
00550744  |.  50                        PUSH EAX                                                              ; |Buf => OFFSET LOCAL.95
00550745  |.  FF15 0CF35D00             CALL DWORD PTR DS:[<&USER32.wsprintfA>]                               ; \USER32.wsprintfA
0055074B  |.  83C4 1C                   ADD ESP,1C
0055074E  |.  8D4CE4 24                 LEA ECX,[LOCAL.95]
00550752  |.  51                        PUSH ECX                                                              ; /String => OFFSET LOCAL.95
00550753  |.  C744E4 1C 05104748        MOV DWORD PTR SS:[LOCAL.98],48471005                                  ; |
0055075B  |.  FF15 00F25D00             CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>]                              ; \KERNEL32.lstrlen
00550761  |.  8B8F FC6D0000             MOV ECX,DWORD PTR DS:[EDI+6DFC]
00550767  |.  83C0 20                   ADD EAX,20
0055076A  |.  39D9                      CMP ECX,EBX
0055076C  |.  8944E4 14                 MOV DWORD PTR SS:[LOCAL.99],EAX
00550770  |.  C744E4 1C 03000000        MOV DWORD PTR SS:[LOCAL.97],3
00550778  |.  895CE4 20                 MOV DWORD PTR SS:[LOCAL.96],EBX
0055077C  |.  74 0D                     JE SHORT 0055078B
0055077E  |.  6A 01                     PUSH 1                                                                ; /Arg3 = 1
00550780  |.  50                        PUSH EAX                                                              ; |Arg2
00550781  |.  8D54E4 1C                 LEA EDX,[LOCAL.99]                                                    ; |
00550785  |.  52                        PUSH EDX                                                              ; |Arg1 => OFFSET LOCAL.99
00550786  |.  E8 6506F0FF               CALL 00450DF0                                                         ; \server.00450DF0
0055078B  |>  5E                        POP ESI
0055078C  |.  5D                        POP EBP
0055078D  |.  5B                        POP EBX
0055078E  |.  B8 01000000               MOV EAX,1
00550793  |.  5F                        POP EDI
00550794  |.  81C4 94010000             ADD ESP,194
0055079A  \.  C3                        RETN


Here's the hexadecimal dump for a binary paste :

OllyDbg - Server side



Don't forget to NOP all the extra code left below, until offset 005508F4

It should give you something like this:

01.jpg