• Sorry ^^
    aber ich habe noch eine frage, wie wird crc32(4) berechnet?
    bei mir kommt da nie dein ergebniss raus ich bekomme in php -206169288 (int) und in java von 0x26291b05 bis 0xa523f600.
    Sorry nochmal ich bekomm des einfach nich hin
    mfg funjoker^^

  • naja nimm einfach ne andere sprache als java

    das einzige was ich zum thema bitconverter.getbytes in bezug auf java gefunden hab war folgendes:

    Code
    myByte= ByteBuffer.allocate(4);
    myByte.putInt( myInt);
    
    
    myByte.flip();
    mySocketChannel.write(myByte);


    ich kann kein java aber vllt kannste damit was anfangen ..

  • Sollten wir den ganzen Thread nicht lieber ins Coding Forum verschieben? ;-)

  • Hat jemand ne ahnung ob es keine clc32 funktion für c++ gibt wikipedia spukt nur das aus und der rest den ich bei google gefunden hab ist schrott -.-


    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    using namespace std;
    #define CRC32POLY 0x04C11DB7 /* CRC-32 Polynom */

    int datastream[] = {1,0,0,0,1,1,0,0};
    int databits = 8;

    __int32 crc32 = 0;

    int main(void)
    {
    int i;
    for (i = 0; i < databits; ++i)
    if (((crc32 & 0x80000000) ? 1 : 0) != datastream[i])
    crc32 = (crc32 << 1) ^ CRC32POLY;
    else
    crc32 <<= 1;
    printf("0x%08X\n", crc32);
    cin.get();
    cin.get();
    return EXIT_SUCCESS;

    }

  • Zitat von Xenox3;76473

    Ich bins nochmal :D ich hab noch ein kleines problem mit dem session id packet. Ich bekomme es einfach nicht^^. Welchen Port benutzt es den 2300,2800 oder 15400)?
    Das erste packet mit 5e ist bei mir das packet mit meinem pw und id

    [COLOR="DarkOrange"]Server Ports sind:

    Login Server : 23000
    Char Server : 28000
    World Server : 15400
    [/COLOR]

    Zitat von Xenox3;76479

    also ich bekomm schon 5 packete ohne ihrgendein pw oder id einzugeben

    00 1a 4f d1 f0 3b 00 b0 8c 02 ec 49 08 00 45 00 ..O..;.....I..E.
    00 34 2d 64 40 00 80 06 bd 0c c0 a8 02 65 c3 3b .4-d@........e.;
    8a 0a c1 67 59 d8 e2 a9 25 e5 00 00 00 00 80 02 ...gY...%.......
    20 00 1a ee 00 00 02 04 05 b4 01 03 03 08 01 01 ...............
    04 02
    ..

    Das ist das erste 0.o komisch komisch komisch ich sehe zwar 5e und 80 und die 00 aber net so viele 00 und es ist auch entweder eine lange id oder ich weiß nicht genau was die id ist :D

    [COLOR="DarkOrange"]Wenn du am anfang diesen Packet bekommst [/COLOR]

    PHP
    5E08000000000000000B544901

    [COLOR="DarkOrange"] dann bist du mit Flyff verbunden.[/COLOR]



  • Ach wikipedia hatte ich ganz vergessen :D. Ich hab die crc32 funktion ein wenig umgeschrieben, aber jetzt funktioniert die ohne größeren aufwand ( in bezug auf den datastream ).

    Naja wir sollten mal wieder auf das eigentliche thread Thema zurückkommen.

  • Wa Her damit :D bitte bitte bitte :D ich hab die berechnung nicht geblickt XDD

    xor gibts in c++ ja nicht -..- und crc muss man ihrgendwie anders machen kpp :D

  • Zitat von Xenox3;76969

    Wa Her damit :D bitte bitte bitte :D ich hab die berechnung nicht geblickt XDD

    xor gibts in c++ ja nicht -..- und crc muss man ihrgendwie anders machen kpp :D


    Und ob, hast du schonmal in den C-Standartbibliotheken nachgeschaut - die dürftest du auch unter C++ verwenden können.
    Google mal unter ciso646 bzw. iso646.h .

    [CENTER][/CENTER]

  • bitwise xor in c++ => "^"

    Beispiel: Berechnung der Length Checksum.

    Als example packet nehmen wir das was funj0ker gepostet hat :

    Code
    SessionID Packet: [5e] [08 00 00 00] [00 00 00 00] [d1 c5 d7 19]
    [5e] [65 72 0e 48] [04 00 00 00] [fa 25 17 18] [14 00 00 00]

    Und so berechnet man den data length checksum:

    Code
    data länge:
    integer      byte array                              bit array
       4    -> {04,00,00,00} -> {0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}

    das bit array muss man nun mit dem datastream in der wikipedia crc32 funktion ersetzen:

    Code
    int datastream[] = {0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; /* int: 4, LSB zuerst */
    	unsigned int crc32_rev = 0xffffffff; /* Schieberegister, Startwert (111...) */
    
    
        for (int i = 0; i < 32; ++i)
            if ((crc32_rev & 1) != datastream[i])
                 crc32_rev = (crc32_rev >> 1) ^ 0xEDB88320; 
            else 
                 crc32_rev >>= 1;
        printf("0x%08X\n", crc32_rev ^ 0x19d7c5d1); /* inverses Ergebnis, MSB zuerst */

    Das ergebeniss musst du jetzt nur noch reversen ( 0x480e7265 -> 0x65720e48 )

  • Hallo,
    Wenn ihr die pakets vom World-Server analysieren wollt müsst ihr aufpassen.
    Der schickt euch ne eigene ID (1.paket vom world-server, länge 13 byte) die ihr dann nehmen müsst um die paket checksums zu erstellen.
    Das Paket hat das format :
    [5e] [08000000] [00000000] id->[0c0d8df4]<-id
    hoffe ihr habts verstanden
    mfg funjoker^^

  • die server laufen auf unterschiedlichen IPs .. bei jedem neuen connect zu einem server wird dir eine sessionid zu geteilt. Die Sessionid's der vorherigen server werden nicht übernommen

    [btw: läuft deine crc32 function jetzt?]

  • Zitat von x0rain;77025

    die server laufen auf unterschiedlichen IPs .. bei jedem neuen connect zu einem server wird dir eine sessionid zu geteilt. Die Sessionid's der vorherigen server werden nicht übernommen

    [btw: läuft deine crc32 function jetzt?]

    [COLOR="DarkOrange"]Gar nicht o.o[/COLOR]



  • funj0ker hat es grad ausprobiert .. er hat mir ein packet vom worldserver gegeben und die loginserver sessionid. Die errechneten checksums stimmten nicht übereinander.

  • jo hab ich grad auch gesehen naja macht mir nicht viel aus^^
    Ich hab jetzt das ding soweit ich muss nur noch das ganze umdrhen also eine dword variable mhh muss ich noch schauen wie ich das mach aber das berechen ist mir jetzt klar^^

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!