use Win32::API; $|++; typedef Win32::API::Struct gs_peerchat_ctx => qw{ char gs_peerchat_1; char gs_peerchat_2; char gs_peerchat_crypt[256]; }; #typedef struct { # unsigned char gs_peerchat_1; # unsigned char gs_peerchat_2; # unsigned char gs_peerchat_crypt[256]; #} gs_peerchat_ctx; #gs_peerchat_init #---------------- #needs 3 arguments: #- the gs_peerchat_ctx structure #- the challenge of the host which refers the structure #- the gamekey of the game #void gs_peerchat_init(gs_peerchat_ctx *ctx, unsigned char *chall, unsigned char *gamekey) Win32::API->Import('gs_peerchat', 'gs_peerchat_init(irc_data gs_peerchat_ctx, challenge ^challengepointer, gamekey ^gamekeypointer)'); # ^name = pointer # irc_data daten die übergeben/gelesen werden (codierte daten in peerchat_ctx, routine callen, klartext in irc_data lesen yadayada) #gs_peerchat #----------- #needs 3 arguments: #- ctx: the gs_peerchat_ctx structure #- data: the buffer containing the data to encrypt/decrypt #- size: the size of the data #void gs_peerchat(gs_peerchat_ctx *ctx, unsigned char *data, int size) Win32::API->Import('gs_peerchat', 'gs_peerchat(irc_data gs_peerchat_ctx, irc_buffer ^irc_bufferpointer, size integer)'); #peerchat_ctx = variableninhalt, type gs_peerchat_ctx definiert da oben mit den typedef #muss vermutlich geändert werden #1. functionstest, darf das gamekey heissen oder lieber anders weils da oben im import auch genannt ist (nicht das es datacollision gibt) my $gamekey = "cc3tibwars"; my $challenge_server = "djhQLYRayo;lZ>Y|"; # kann natürlich auch hex sein? my $challenge_client = "zNwEhedF{qGI^lhs"; # 1 zum decoden, 1 zum entcoden, weiss aber noch nciht welcher was ist, muss also evtl einfach vertauscht werden my $datenpaket_test1 = "5...-..";#decode my $datenpaket_test2 = "...V..^.....*.H5!;..P....";#encode # muss bestimmt alles irgendwie in ein anderes format, pack/unpack hex zeugs