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^^
Packete !?
-
-
naja nimm einfach ne andere sprache als java
das einzige was ich zum thema bitconverter.getbytes in bezug auf java gefunden hab war folgendes:
CodemyByte= 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;76479also 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]
[COLOR="DarkOrange"] dann bist du mit Flyff verbunden.[/COLOR]
-
das hab ich schon danke^^ ich muss nur noch das checksumm in c++ rein machen aber da bin ich glaub ich auf dem richtigen weg^^
-
Könntest du mir deine crc32 Funktion schicken, wenn du eine gefunden hast?
-
Guck dir das an. :o
Schwer, schwer. -
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 . -
oh stimmt :D
-
bitwise xor in c++ => "^"
Beispiel: Berechnung der Length Checksum.
Als example packet nehmen wir das was funj0ker gepostet hat :
CodeSessionID 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:
Codedata 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:
Codeint 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^^ -
was es gibt ne eigene session id für den world server 0.o?!
-
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^^ -
Omg
seid ihr freaks. -
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!