Abend Leute,
da ich jetzt öfters mitbekommen habe, wie viele herum jammern, dass sie keine Pointer suchen können, dachte ich mir, dass ich Ceberus Bypass update. Gesagt getan, ich habe neue Adressen gesucht und eine neue Stelle genoppt, damit das HackShield nicht geladen wird. Credits gehen an Ceberus, da ich seine Source genommen und upgedatet habe.
Eine fertige .exe Datei habe ich mal hochgeladen.
Download: 4Story Bypass.rar (5,01 KB) - uploaded.to
Virustotal:VT
Beweis: 
ToDo-List: -FindPatter finden zum automatischen updaten. []
_________________________________________________________________
Nachdem ich mich mit dem reversen des Client's beschäftigt habe, habe ich mir 2 Sachen besonders intensiv angeschaut. Zum einen die Chat-Funktion und zum anderen die CreateCharacter-Funktion. Diese Informationen möchte ich euch nicht vorenthalten.
Die Chat-Funktion besteht aus genau 7 verschiedenen Parametern, hier einmal die grobe Funktion:
void Chat( char* CharacterName, int Art, int unknown2, (WENN FLÜSTERN DANN VICTIM)char* Victim, char* Text, int unknown4, UNKNOWN5);
Noch zu erwähnen wäre, dass der gesendete Text immer wie folgt aufgebaut ist:
char* Text = 0000000 + TEXT.LENGTH + TEXT; -> z.B. 00000005hallo
Die Arten der Chat-Funktion sehen wie folgt aus
Art = 0(FLÜSTERN), 1(NORMAL), 2(ALLE), 3(), 4(GRUPPE), 5(GILDE), 6(RAID);
Ich tippe, dass die Nummer 3 entweder der Upp-chat ist oder GM-chat. Hier ist mal ein Beispiel, wie er im Stack zu finden ist:
FLÜSTERN:
CPU Stack
Address Value ASCII Comments
0018FD74 [00513154 T1Q ; /RETURN from TClient.0053B270 to TClient.00513154
0018FD78 /549A0920 šT ; |Arg1 = ASCII "rdrree4rew"
0018FD7C |00000000 ; |Arg2 = 0
0018FD80 |00000000 ; |Arg3 = 0
0018FD84 |258B2178 x!‹% ; |Arg4 = ASCII "aaaaaaaaaaaaaaad"
0018FD88 |549A0998 ˜ šT ; |Arg5 = ASCII "00000003hey"
0018FD8C |00000000 ; |Arg6 = 0
0018FD90 |033C1F30 0< ; \Arg7 = 33C1F30
Alles anzeigen
Nun kann man die einzelnen Argumente perfekt ablesen.
Ich habe nun die aktuelle Chat-Funktion gefunden, die 4Story benutzt:
Spoiler anzeigen
CPU Disasm
Address Hex dump Command Comments
0053B270 /$ 6A FF PUSH -1 ; TClient.0053B270(guessed Arg1,Arg2,Arg3,Arg4,Arg5,Arg6,Arg7)
0053B272 |. 68 30DF6900 PUSH 0069DF30 ; Entry point
0053B277 |. 64:A1 0000000 MOV EAX,DWORD PTR FS:[0]
0053B27D |. 50 PUSH EAX
0053B27E |. 64:8925 00000 MOV DWORD PTR FS:[0],ESP ; Installs SE handler 69DF30
0053B285 |. 83EC 20 SUB ESP,20
0053B288 |. 894C24 04 MOV DWORD PTR SS:[LOCAL.9],ECX
0053B28C |. A1 D8177200 MOV EAX,DWORD PTR DS:[7217D8]
0053B291 |. 85C0 TEST EAX,EAX
0053B293 |. 6A 01 PUSH 1 ; /Arg2 = 1
0053B295 |. 8D4424 44 LEA EAX,[ARG.5] ; |
0053B299 |. C74424 2C 020 MOV DWORD PTR SS:[LOCAL.0],2 ; |
0053B2A1 |. 50 PUSH EAX ; |Arg1 => OFFSET ARG.5
0053B2A2 |. 74 4B JE SHORT 0053B2EF ; |
0053B2A4 |. E8 97A30400 CALL 00585640 ; \TClient.00585640
0053B2A9 |. 83C4 08 ADD ESP,8
0053B2AC |. 84C0 TEST AL,AL
0053B2AE |. 75 51 JNE SHORT 0053B301
0053B2B0 |. 8B4424 30 MOV EAX,DWORD PTR SS:[ARG.1]
0053B2B4 |. 83C0 F0 ADD EAX,-10
0053B2B7 |. C64424 28 01 MOV BYTE PTR SS:[LOCAL.0],1
0053B2BC |. 8D48 0C LEA ECX,[EAX+0C]
0053B2BF |. 83CA FF OR EDX,FFFFFFFF
0053B2C2 |. F0:0FC111 LOCK XADD DWORD PTR DS:[ECX],EDX
0053B2C6 |. 4A DEC EDX
0053B2C7 |. 85D2 TEST EDX,EDX
0053B2C9 |. 7F 08 JG SHORT 0053B2D3
0053B2CB |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
0053B2CD |. 8B11 MOV EDX,DWORD PTR DS:[ECX]
0053B2CF |. 50 PUSH EAX
0053B2D0 |. FF52 04 CALL DWORD PTR DS:[EDX+4]
0053B2D3 |> 8B4424 3C MOV EAX,DWORD PTR SS:[ESP+3C]
0053B2D7 |. 83C0 F0 ADD EAX,-10
0053B2DA |. C64424 28 00 MOV BYTE PTR SS:[ESP+28],0
0053B2DF |. 8D48 0C LEA ECX,[EAX+0C]
0053B2E2 |. 83CA FF OR EDX,FFFFFFFF
0053B2E5 |. F0:0FC111 LOCK XADD DWORD PTR DS:[ECX],EDX
0053B2E9 |. 4A DEC EDX
0053B2EA |. E9 57010000 JMP 0053B446
0053B2EF |> E8 5CE60300 CALL 00579950
0053B2F4 |. 83C4 08 ADD ESP,8
0053B2F7 |. 50 PUSH EAX ; /Arg1
0053B2F8 |. 8D4C24 44 LEA ECX,[ARG.6] ; |
0053B2FC |. E8 2F99ECFF CALL 00404C30 ; \TClient.00404C30
0053B301 |> 53 PUSH EBX
0053B302 |. 55 PUSH EBP
0053B303 |. 8D4C24 08 LEA ECX,[LOCAL.10]
0053B307 |. 68 4D020000 PUSH 24D ; /Arg2 = 24D
0053B30C |. 51 PUSH ECX ; |Arg1 => OFFSET LOCAL.10
0053B30D |. E8 3E541000 CALL 00640750 ; \TClient.00640750
0053B312 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0053B314 |. 8B6C24 4C MOV EBP,DWORD PTR SS:[ESP+4C]
0053B318 |. 50 PUSH EAX ; /Arg2
0053B319 |. 55 PUSH EBP ; |Arg1
0053B31A |. E8 AA491200 CALL 0065FCC9 ; \TClient.0065FCC9
0053B31F |. 8BD8 MOV EBX,EAX
0053B321 |. 8B4424 18 MOV EAX,DWORD PTR SS:[ESP+18]
0053B325 |. 83C4 10 ADD ESP,10
0053B328 |. F7DB NEG EBX
0053B32A |. 1ADB SBB BL,BL
0053B32C |. 83C0 F0 ADD EAX,-10
0053B32F |. FEC3 INC BL
0053B331 |. 8D50 0C LEA EDX,[EAX+0C]
0053B334 |. 83C9 FF OR ECX,FFFFFFFF
0053B337 |. F0:0FC10A LOCK XADD DWORD PTR DS:[EDX],ECX
0053B33B |. 49 DEC ECX
0053B33C |. 85C9 TEST ECX,ECX
0053B33E |. 7F 08 JG SHORT 0053B348
0053B340 |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
0053B342 |. 8B11 MOV EDX,DWORD PTR DS:[ECX]
0053B344 |. 50 PUSH EAX
0053B345 |. FF52 04 CALL DWORD PTR DS:[EDX+4]
0053B348 |> 84DB TEST BL,BL
0053B34A |. 74 05 JE SHORT 0053B351
0053B34C |. C64424 3C 07 MOV BYTE PTR SS:[ESP+3C],7
0053B351 |> 57 PUSH EDI
0053B352 |. 8D4C24 14 LEA ECX,[ESP+14]
0053B356 |. E8 65200A00 CALL 005DD3C0 ; [TClient.005DD3C0
0053B35B |. 8B4424 4C MOV EAX,DWORD PTR SS:[ESP+4C]
0053B35F |. 8B4C24 44 MOV ECX,DWORD PTR SS:[ESP+44]
0053B363 |. 8B5424 40 MOV EDX,DWORD PTR SS:[ESP+40]
0053B367 |. 8B7C24 3C MOV EDI,DWORD PTR SS:[ESP+3C]
0053B36B |. 50 PUSH EAX ; /Arg1
0053B36C |. 55 PUSH EBP ; |/Arg1
0053B36D |. 51 PUSH ECX ; ||/Arg1
0053B36E |. 52 PUSH EDX ; |||/Arg1
0053B36F |. 57 PUSH EDI ; ||||/Arg1
0053B370 |. 68 74510000 PUSH 5174 ; |||||/Arg1 = 5174
0053B375 |. 8D4C24 2C LEA ECX,[ESP+2C] ; ||||||
0053B379 |. C64424 4C 03 MOV BYTE PTR SS:[ESP+4C],3 ; ||||||
0053B37E |. E8 3D1F0A00 CALL 005DD2C0 ; |||||\TClient.005DD2C0
0053B383 |. 8BC8 MOV ECX,EAX ; |||||
0053B385 |. E8 B6230A00 CALL 005DD740 ; ||||\TClient.005DD740
0053B38A |. 8BC8 MOV ECX,EAX ; ||||
0053B38C |. E8 1F240A00 CALL 005DD7B0 ; |||\TClient.005DD7B0
0053B391 |. 8BC8 MOV ECX,EAX ; |||
0053B393 |. E8 78240A00 CALL 005DD810 ; ||\TClient.005DD810
0053B398 |. 8BC8 MOV ECX,EAX ; ||
0053B39A |. E8 A1230A00 CALL 005DD740 ; |\TClient.005DD740
0053B39F |. 8BC8 MOV ECX,EAX ; |
0053B3A1 |. E8 9A230A00 CALL 005DD740 ; \TClient.005DD740
0053B3A6 |. 807C24 40 01 CMP BYTE PTR SS:[ESP+40],1
0053B3AB |. 75 48 JNE SHORT 0053B3F5
0053B3AD |. 56 PUSH ESI
0053B3AE |. 8B7424 58 MOV ESI,DWORD PTR SS:[ESP+58]
0053B3B2 |. 8B46 08 MOV EAX,DWORD PTR DS:[ESI+8]
0053B3B5 |. 50 PUSH EAX ; /Arg1
0053B3B6 |. 8D4C24 1C LEA ECX,[ESP+1C] ; |
0053B3BA |. E8 11230A00 CALL 005DD6D0 ; \TClient.005DD6D0
0053B3BF |. 8B76 04 MOV ESI,DWORD PTR DS:[ESI+4]
0053B3C2 |. 8B06 MOV EAX,DWORD PTR DS:[ESI]
0053B3C4 |. 3BC6 CMP EAX,ESI
0053B3C6 |. 894424 44 MOV DWORD PTR SS:[ESP+44],EAX
0053B3CA |. 74 28 JE SHORT 0053B3F4
0053B3CC |. 8D6424 00 LEA ESP,[ESP]
0053B3D0 |> 8B40 10 /MOV EAX,DWORD PTR DS:[EAX+10]
0053B3D3 |. 8B88 E0030000 |MOV ECX,DWORD PTR DS:[EAX+3E0]
0053B3D9 |. 51 |PUSH ECX ; /Arg1
0053B3DA |. 8D4C24 1C |LEA ECX,[ESP+1C] ; |
0053B3DE |. E8 2D240A00 |CALL 005DD810 ; \TClient.005DD810
0053B3E3 |. 8D4C24 44 |LEA ECX,[ESP+44]
0053B3E7 |. E8 34680000 |CALL 00541C20 ; [TClient.00541C20
0053B3EC |. 8B4424 44 |MOV EAX,DWORD PTR SS:[ESP+44]
0053B3F0 |. 3BC6 |CMP EAX,ESI
0053B3F2 |.^ 75 DC \JNE SHORT 0053B3D0
0053B3F4 |> 5E POP ESI
0053B3F5 |> 8B4C24 10 MOV ECX,DWORD PTR SS:[ESP+10]
0053B3F9 |. 8D5424 14 LEA EDX,[ESP+14]
0053B3FD |. 52 PUSH EDX ; /Arg1
0053B3FE |. E8 2D110A00 CALL 005DC530 ; \TClient.005DC530
0053B403 |. 8D4C24 14 LEA ECX,[ESP+14]
0053B407 |. C64424 34 02 MOV BYTE PTR SS:[ESP+34],2
0053B40C |. E8 6F1B0A00 CALL 005DCF80 ; [TClient.005DCF80
0053B411 |. 8D47 F0 LEA EAX,[EDI-10]
0053B414 |. C64424 34 01 MOV BYTE PTR SS:[ESP+34],1
0053B419 |. 8D48 0C LEA ECX,[EAX+0C]
0053B41C |. 83CA FF OR EDX,FFFFFFFF
0053B41F |. F0:0FC111 LOCK XADD DWORD PTR DS:[ECX],EDX
0053B423 |. 4A DEC EDX
0053B424 |. 85D2 TEST EDX,EDX
0053B426 |. 5F POP EDI
0053B427 |. 7F 08 JG SHORT 0053B431
0053B429 |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
0053B42B |. 8B11 MOV EDX,DWORD PTR DS:[ECX]
0053B42D |. 50 PUSH EAX
0053B42E |. FF52 04 CALL DWORD PTR DS:[EDX+4]
0053B431 |> 8D45 F0 LEA EAX,[EBP-10]
0053B434 |. C64424 30 00 MOV BYTE PTR SS:[ESP+30],0
0053B439 |. 8D48 0C LEA ECX,[EAX+0C]
0053B43C |. 83CA FF OR EDX,FFFFFFFF
0053B43F |. F0:0FC111 LOCK XADD DWORD PTR DS:[ECX],EDX
0053B443 |. 4A DEC EDX
0053B444 |. 5D POP EBP
0053B445 |. 5B POP EBX
0053B446 |> 85D2 TEST EDX,EDX
0053B448 |. 7F 08 JG SHORT 0053B452
0053B44A |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
0053B44C |. 8B11 MOV EDX,DWORD PTR DS:[ECX]
0053B44E |. 50 PUSH EAX
0053B44F |. FF52 04 CALL DWORD PTR DS:[EDX+4]
0053B452 |> 8B4424 40 MOV EAX,DWORD PTR SS:[ESP+40]
0053B456 |. 83C0 F0 ADD EAX,-10
0053B459 |. C74424 28 FFF MOV DWORD PTR SS:[ESP+28],-1
0053B461 |. 8D48 0C LEA ECX,[EAX+0C]
0053B464 |. 83CA FF OR EDX,FFFFFFFF
0053B467 |. F0:0FC111 LOCK XADD DWORD PTR DS:[ECX],EDX
0053B46B |. 4A DEC EDX
0053B46C |. 85D2 TEST EDX,EDX
0053B46E |. 7F 08 JG SHORT 0053B478
0053B470 |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
0053B472 |. 8B11 MOV EDX,DWORD PTR DS:[ECX]
0053B474 |. 50 PUSH EAX
0053B475 |. FF52 04 CALL DWORD PTR DS:[EDX+4]
0053B478 |> 8B4C24 20 MOV ECX,DWORD PTR SS:[LOCAL.2]
0053B47C |. 64:890D 00000 MOV DWORD PTR FS:[0],ECX
0053B483 |. 83C4 2C ADD ESP,2C
0053B486 \. C2 1C00 RETN 1C
Alles anzeigen
Warum ich das euch schreibe ist einfach, damit könnte man eine ASM-ChatFunktion schreiben, wodurch man blitzschnell Spamen kann und falls es eine Chatsperre geben sollte, diese umgehen. Leider fehlen mir noch ein paar Parameter, die ich erst herausfinden muss, aber vielleicht schafft einer von euch ja was daraus zu machen. :) Ich werde mich mal am Wochenende vielleicht ran setzten.
2.Teil, CreateCharacter-Funktion:
Hierzu sage ich vorab habe ich noch nicht die richtige Stelle im Client gefunden, aber die Funktion sieht ungefähr so aus:
void CreateChar(int Server, char* Name, unknown UNKNOWN, int Klasse, int Rasse, int unknown4, int Gender, int Channel, int HairColor, int Hair, int unknown7, int unknown8, int unknown9, int unknown10);
Ich denke, dass die Parameter klar sein müssen, aber hier nochmal eine genauere Liste:
Server: 0 = ,1 = Lapiris, 2 = Xhadra, 3 = Rumapark, 4 = Titurion, 5 = Pendatron;
Gender: 0 = Männlich, 1 = Weiblich;
Rasse: 0 = Mensch, 1 = Feline, 2 = Fee;
Klasse: 0 = Krieger, 1 = Schattenläufer, 2 = Bogenschütze, 3= Magier, 4 = Priester, 5 = Beschwörer;
Beim Parameter Hair und HairColor ist es so, dass Typ A = 0, Typ B = 1, Typ C = 2 usw. ist.
Ein Code im Stack sieht wie folgt aus:
CPU Stack
Address Value ASCII Comments
0018FD7C /00000002 ; |Arg1 = 2
0018FD80 |199E74A0 *tž ; |Arg2 = ASCII "fddffdfsdfsdfsd"
0018FD84 |7C356903 i5| ; |Arg3 = 7C356903
0018FD88 |00000001 ; |Arg4 = 1
0018FD8C |00000000 ; |Arg5 = 0
0018FD90 |00000000 ; |Arg6 = 0
0018FD94 |00000000 ; |Arg7 = 0
0018FD98 |00000001 ; |Arg8 = 1
0018FD9C |00000001 ; |Arg9 = 1
0018FDA0 |00000000 ; |Arg10 = 0
0018FDA4 |00000000 ; |Arg11 = 0
0018FDA8 |00000000 ; |Arg12 = 0
0018FDAC |00000000 ; \Arg13 = 0
Alles anzeigen
Vergleicht man die Parameter mit dem Beispiel, dann ist klar, welchen Character ich erstellt habe.
Bei den letzten 4 Parametern bin ich mir sehr unsicher, die letzten 3 könnte die Position des Characters sein, an dem er erstellt wurde (X,Y,Z), wobei man bei 4Story immer an der selben Stelle aufkommt.
Was könnte man damit machen?
Das ist einfach, man könnte sich theoretisch Charackter erstellen mit unerlaubten Namen, Überschreitung der maximalen Länge des Namens und man könnte unendlich viele Character auf kürzester Zeit erstellen, die gegeben falls den Server crashen könnten. Aber das ist nur eine Spekulation.
In kürzester Zeit werde ich mein altes Projekt, welches ich vor ein paar Monaten erstellt habe, fertig machen und veröffentlichen. Hier mal ein Bild dazu:

Es ist ein PacketEditor, welcher bis jetzt nur die HShield Packets richtig anzeigt, aber dies wird bald behoben sein. Außerdem ist es möglich, mit dem Anklicken einer Zeile, den Hex String in ASCII zu wandeln.
Was haltet ihr vom dem Programm, eine gute Idee oder eher nicht ?
So, dass war's jetzt erst mal von mir, ich hoffe ihr gebt Feedback zu meinen Sachen. Bis zum nächsten mal ;)
MFG