Accueil > Forum > > > > Récupération et réencodage de packet d'un serveur
Récupération et réencodage de packet d'un serveur
dimanche 14 mars 2010 à 16:52:17 |
Récupération et réencodage de packet d'un serveur

mic1331
|
Tout d'abord bonjour à la communauté ! Donc j'explique ma venu ici.
En gros, je cherche à récupéré les paquet envoyer par mon serveur de jeu qui sont pour un certain client, la version 1.25 pour qu'un client 1.61 puisse les lire. Des gens qui on beaucoup bosser sur le sujet on mit l'objet de leur travaux sur un wiki:
http://www.serveur-aegir.com/techwiki/index.php?title=Accueil
Il explique comment lire les paquets envoyer par le serveur et quel type de cryptage est utilisé.
Je cherche donc à créé une sorte de proxy qui change les paquet d'un serveur 1.25 en paquet pour client 1.61.
Voila, je tient a préciser que mes connaissances en C sont très faible, je sais que se projet ne sera surement pas à ma porter, je sais juste programmer sous flash donc j'ai juste les bases de la programmation.
|
|
mardi 16 mars 2010 à 01:14:39 |
Re : Récupération et réencodage de packet d'un serveur

uaip
|
Salut,
Bon courage à toi, c'est du sacré boulot
Cordialement, uaip.
|
|
mardi 16 mars 2010 à 12:00:25 |
Re : Récupération et réencodage de packet d'un serveur

mic1331
|
Enfaite si on pourrai juste me dire comment récupéré et renvoyer des paquet pour le reste je me débrouillerai, je sais qu'il faut un port d'écoute mais par où commencer je ne vois pas.
Merci D'avance,
Cordialement.
|
|
mardi 16 mars 2010 à 18:44:34 |
Re : Récupération et réencodage de packet d'un serveur

uaip
|
Tu peux utiliser la bibliothèque winsowk pour les sockets (elle est inclue de base dans Windows). Elles fonctionnent comme sous Linux (en gros).
Cordialement, uaip.
|
|
mardi 16 mars 2010 à 21:46:56 |
Re : Récupération et réencodage de packet d'un serveur

mic1331
|
Ok merci de m'indiquer une piste ^^. Si quelqu'un d'autre possède des infos qu'il m'en fasse par  .
Merci,
Cordialement.
|
|
mardi 16 mars 2010 à 22:23:45 |
Re : Récupération et réencodage de packet d'un serveur

uaip
|
J'ai pas tout saisi le problème en fait, mais pour récupérer des infos d'un serveur en C sous Windows, tu as des libs haut niveau sans doute (que je ne connais pas) ou cette fameuse bibliothèque windosk.
Un code a été déposé sur ce même site il n'y a pas si longtemps : http://www.cppfrance.com/codes/ETRE-AVERTIS-LORS-NOUVEL-ARTICLE-SUR-BLOG-TYPE_51443.aspx
Cordialement, uaip.
|
|
mardi 16 mars 2010 à 23:31:19 |
Re : Récupération et réencodage de packet d'un serveur

mic1331
|
J'arrive a récupéré les paquets voila le code:
Code C/C++ :
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#define TAILLETAMPON 1024
int main()
{
//On crée nos variables
SOCKET mon_socket;
SOCKADDR_IN sin;
int mtampon = 4;
//On initialise Winsock
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
//On défini nos paramètres
sin.sin_addr.s_addr = inet_addr("ip_serveur");
sin.sin_family = AF_INET;
sin.sin_port = htons(port_serveur);
//On crée le socket !
mon_socket = socket(AF_INET,SOCK_STREAM,0);
bind(mon_socket, (SOCKADDR *)&sin, sizeof(sin));
//On connecte notre socket
connect(mon_socket, (SOCKADDR *)&sin, sizeof(sin));
int i;
for (i=0 ; i < TAILLETAMPON ; i+=1) {
char tampon[i];
recv(mon_socket, tampon, sizeof(tampon),0);
printf("%d \n", tampon);
}
}
je constate que les paquet que je reçois mes paquets, les 2 première ligne sont des paquets identique, ils sont identique 16 par 16 je suppose que le premier paquet fait 2 octet et que tous les autres en font 16 (corriger moi si je me trompe). Donc maintenant si je comprend bien le wikia il faudrait que je les décryptes apparemment la méthode de cryptage s'appelle "XOR", je ne sais pas ce que c'est mais bon si ils le disent  . Ils donnent un script pour décrypter (je pense) les paquets le problème c'est que ça ne met pas vraiment compréhensible, je comprendre les unsigned etc (truc de base) mais il y a pas mal d'erreurs. Donc voila qu'il nous donne:
Code C/C++ :
signed short Pak_SwitchEncryptionOff_150 (pak_t *pak, unsigned long seed)
{
// the 1.50 protocol cryptography uses extensively the standard C random number generator,
// which is a VERY BAD idea, since its implementation may differ from system to system !!!
char stack1[10];
char stack2[10];
unsigned char a;
unsigned char c;
char *edi;
char *ebp;
int index;
unsigned int algo;
signed short checksum;
// initialize the system's pseudo-random number generator from the seed given in the datagram
// (they apparently swapped the bytes in an attempt to confuse the reverse-engineerers)
srand ( (int) (((unsigned char *) &seed)[0] << 24)
| (int) (((unsigned char *) &seed)[3] << 16)
| (int) (((unsigned char *) &seed)[1] << 8)
| (int) (((unsigned char *) &seed)[2]));
// now generate the crypto tables for the given datagram length
// stack sequences
for (index = 0; index < 10; index++)
{
stack1[index] = (char) rand ();
stack2[index] = (char) rand ();
}
// xor table
for (index = 0; index < pak->data_size; index++)
{
cryptotables_150.xor[index] = (unsigned char) stack2[rand () % 10];
cryptotables_150.xor[index] *= (unsigned char) stack1[rand () % 10];
cryptotables_150.xor[index] += rand ();
}
// offset & algo tables
for (index = 0; index < pak->data_size; index++)
{
cryptotables_150.offsets[index] = rand () % pak->data_size;
if (cryptotables_150.offsets[index] == (unsigned int) index)
cryptotables_150.offsets[index] = (index == 0 ? 1 : 0);
cryptotables_150.algo[index] = rand () % 21;
}
// cryptographic tables are generated, now apply the algorithm
for (index = pak->data_size - 1; index >= 0; index--)
{
algo = cryptotables_150.algo[index];
ebp = &pak->data[cryptotables_150.offsets[index]];
edi = &pak->data[index];
a = *ebp;
c = *edi;
if (algo == 0) { *edi = ((a ^ c) & 0x0F) ^ c; *ebp = ((a ^ c) & 0x0F) ^ a; }
else if (algo == 1) { *edi = ((a ^ c) & 0x0F) ^ c; *ebp = (a >> 4) | (c << 4); }
else if (algo == 2) { *edi = (c >> 4) | (c << 4); *ebp = (a >> 4) | (a << 4); }
else if (algo == 3) { *edi = (a >> 4) | (c << 4); *ebp = ((a ^ c) & 0x0F) ^ c; }
else if (algo == 4) { *edi = (a & 0x0F) | (c << 4); *ebp = (a & 0xF0) | (c >> 4); }
else if (algo == 5) { *edi = (c & 0xF0) | (a >> 4); *ebp = (a << 4) | (c & 0x0F); }
else if (algo == 6) { *edi = (a >> 4) | (c << 4); *ebp = (a << 4) | (c >> 4); }
else if (algo == 7) { *edi = (c & 0xF0) | (a >> 4); *ebp = (a & 0x0F) | (c << 4); }
else if (algo == 8) { *edi = (a & 0x0F) | (c << 4); *ebp = (c & 0xF0) | (a >> 4); }
else if (algo == 9) { *edi = (a & 0xF0) | (c >> 4); *ebp = (a & 0x0F) | (c << 4); }
else if (algo == 10) { *edi = (a << 4) | (c & 0x0F); *ebp = (a & 0xF0) | (c >> 4); }
else if (algo == 11) { *edi = (a << 4) | (c >> 4); *ebp = ((a ^ c) & 0x0F) ^ a; }
else if (algo == 12) { *edi = (a >> 4) | (a << 4); *ebp = (c >> 4) | (c << 4); }
else if (algo == 13) { *edi = a; *ebp = c; }
else if (algo == 14) { *edi = (a & 0xF0) | (c >> 4); *ebp = (a << 4) | (c & 0x0F); }
else if (algo == 15) { *edi = ((a ^ c) & 0x0F) ^ a; *ebp = ((a ^ c) & 0x0F) ^ c; }
else if (algo == 16) { *edi = a; *ebp = (c >> 4) | (c << 4); }
else if (algo == 17) { *edi = (a << 4) | (c & 0x0F); *ebp = (c & 0xF0) | (a >> 4); }
else if (algo == 18) { *edi = (a << 4) | (c >> 4); *ebp = (a >> 4) | (c << 4); }
else if (algo == 19) { *edi = (a >> 4) | (a << 4); *ebp = c; }
else if (algo == 20) { *edi = ((a ^ c) & 0x0F) ^ a; *ebp = (a << 4) | (c >> 4); }
}
// and finally, quadruple-XOR the data out
for (index = pak->data_size - 1; index >= 0; index--)
{
if (index <= pak->data_size - 4)
{
pak->data[index + 0] ^= (cryptotables_150.xor[index] & 0x000000FF); // we can XOR 4 bytes in a row
pak->data[index + 1] ^= (cryptotables_150.xor[index] & 0x0000FF00) >> 8;
pak->data[index + 2] ^= (cryptotables_150.xor[index] & 0x00FF0000) >> 16;
pak->data[index + 3] ^= (cryptotables_150.xor[index] & 0xFF000000) >> 24;
}
else if (index == pak->data_size - 3)
{
pak->data[index + 0] ^= (cryptotables_150.xor[index] & 0x0000FF); // we can XOR 3 bytes in a row
pak->data[index + 1] ^= (cryptotables_150.xor[index] & 0x00FF00) >> 8;
pak->data[index + 2] ^= (cryptotables_150.xor[index] & 0xFF0000) >> 16;
}
else if (index == pak->data_size - 2)
{
pak->data[index + 0] ^= (cryptotables_150.xor[index] & 0x00FF); // we can XOR 2 bytes in a row
pak->data[index + 1] ^= (cryptotables_150.xor[index] & 0xFF00) >> 8;
}
else if (index == pak->data_size - 1)
pak->data[index] ^= (cryptotables_150.xor[index] & 0xFF); // end of stream
}
// in the 1.50 protocol, the checksum info is at the trailing end of the pak.
checksum = *(unsigned short *) &pak->data[pak->data_size - 2]; // so get it from there...
pak->data_size -= 2; // ...and correct the data size
return (checksum); // finished, pak is decrypted
}
Si quelqu'un a une idée de comment s'en servir qu'il m'en fasse par (je cherche a apprendre car ça m'intéresse beaucoup je suis peut être totalement a coté de la plaque mais bon je met ce que je pense être bon).
Merci d'avance,
Cordialement.
|
|
mercredi 17 mars 2010 à 13:58:00 |
Re : Récupération et réencodage de packet d'un serveur

mic1331
|
Enfaite maintenant que j'ai rechercher pas mal de "truc" je peux surement mieux expliquer ce que je cherche a faire (j'espère être plus clair ^^):
Donc je possède un serveur, d'un vieux jeu pour ce qui connaisse c'est t4c (la quatrième prophétie un jeu en 2D précurseur de pas mal de mmo je pense..) il a été connu sur GOA un vieux site où on pouvait y retrouver pas mal de jeu en ligne.
Voila pour la petite anecdote de t4c.
En gros, il existe plusieurs version de ce jeu (la 1.25, la 1.50, la 1.61, la 1.63 et la 1.70) des développeurs très sympathique on permis a des gens comme moi de pouvoir créé un serveur de ce jeu. Mais ils on limiter les "T4C Server" a la 1.50, il faut un "proxy" qui récupère les paquet du serveur, les décrypte, le reencrypte et les renvoi au client et vice versa pour qu'un client 1.61 ou supérieur (suivant le reencyptage) puisse se connecter au serveur, alors ma venu ici consiste a essayer de comprendre comment faire. Petit problème, j'ai utiliser la lib winsock je récupère des paquets le problème c'est que je pense récupéré les paquets de mon réseau et non les paquets envoyer par mon serveur, j'ai tester cela en regardant comment était composer les paquets se sont les même que mon serveur soit allumer ou éteint  . Donc si quelqu'un a une idée de comment récupéré ces fameux paquets serveur  qu'il se manifeste !! ^^ Bien sur que toutes réponse même novice comme moi est la bienvenu  .
Merci d'avance,
Cordialement.
|
|
jeudi 18 mars 2010 à 19:02:31 |
Re : Récupération et réencodage de packet d'un serveur

uaip
|
Salut.
Si tu indiques l'IP du serveur, c'est sur le serveur que tu te connectes.
Les bind() sont facultatifs pour les clients.
N'oublie pas de fermer ta socket en fin de programme.
Tu fais une erreur : printf("%d \n", tampon);
tampon est un tableau de char, et non un entier. Donc : printf("%s \n", tampon);
Cordialement, uaip.
|
|
vendredi 19 mars 2010 à 19:05:53 |
Re : Récupération et réencodage de packet d'un serveur

mic1331
|
Effectivement suis-je bête :P par contre j'ai fait un test, alors si je met mon ip je reçoit *C(+ un caractère bizarre) tout le temps si je met "youtube" se sera autre chose mais tout la même chose est-ce normal de recevoir la même chose ? Si c'est crypté je pense qu'il y aurait des caractère différent. (mon code est le même que celui d'au dessus avec le "%s" à la place du "%d")
Merci d'avance,
Cordialement.
|
|
Cette discussion est classée dans : serveur, client, récupération, paquet, réencodage
Répondre à ce message
Sujets en rapport avec ce message
client/serveur FTP [ par fab ]
Salut!!!Je développe un prog client/serveur FTP en C++ Builder . Je veux pouvoir envoyer un fichier image au serveur . Pour cela j'utilise le composan
help me!!!!!!!!!! source en C transfert de fichier client/serveur [ par fdhb ]
bonjour c urgent je cherche un source en C sous unix code client & code serveur pour l'envoi d'un fichiermerci
client serveur [ par wanny ]
bonjour à tous.Voila, j'ai une appli off line en VC++.Je dois développer une nouvelle fonctionnalité de mises à jour de modules appartenant à cette ap
administration a distance [ par roverkiller ]
je cherche deux prog ou pluto deux sources en C (1 serveur et un client) pour une administrationa distance, lire des fichiers, lé modifié et pouvoir
Client/Serveur UDP sur 1 unique machine ! [ par sena ]
Bonjour,j'ai fais deux programmes :un client et un serveur UDP.Ceux ci fonctionnent bien quand je les fait communiquer sur 2 machines différentes.Ce q
probleme serveur-client [ par dorian2031 ]
ben voila le probleme, dans mon serveur-clientmon client envoi bien un message avec : char buffer[1024]="slt a toi\0";.... send(serveur,buffer,1024,
utilisation des connection point sous visualC++ [ par julien20vt ]
J'ai besoin d'implémenter un client qui utilise les connectionpoint. Le serveur est un serveur de fax de la librairie windows FaxComex.lib.Si quelqu'u
Tutorial - Socket, serveur, client BCPP + GUI [ par NyxArm ]
Bonjours tout le monde, je suis présentement en période d'appretissage du language CPP sur Borland(v.6). Maintenant que j'ai acquis quelque conna
client/serveur [ par darktiger ]
Comment faire pour transferer un fichier entre 2 ordinateurs apres avoir etabli la liaison client / serveur???
Client/Serveur - Multiutilisateur [ par jsonor ]
Bonjour à tous,Je cherche à faire un prog client/serveur en c++ avec un serveur qui puisse gérer la connexion d'un ou plusieurs client...J'ai pu voir
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|