Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Counter Strike (https://forum.antichat.xyz/showthread.php?t=94821)

ronald 04.12.2008 20:43

Counter Strike
 
Народ, интересует как реализовать механизм подключения к серверу Counter-strike 1.6, из результатов снифера, понял, что там передаются специальные пакеты, а как это реализовать :confused: . Может кто подскажет?

De-visible 04.12.2008 21:36

передать такие же пакеты.

eLWAux 04.12.2008 21:54

(а вдруг ти перл знаеш?))

сорс для парсинга сервера, может тебе поможет..:
Код:

use IO::Socket;

system('cls');
##########################################################################
#####] (c)oDeD 6y eLWAux [################################################
##########################################################################

##########################################################################
##########################################################################
##########################################################################

 sub readFile {
        open myFILE, "<$_[0]" or die $!;
        while (<myFILE>) { chomp; $res.=$_; }
        return $res;
        close myFILE;
        }

 sub saveFile {
        open(myFILE,">$_[0]") || die "error: $!";
        print myFILE $_[1];
        close(myFILE);
        }

 sub p { print '>'.$_[0]."<\n" }

 sub parce_info_1 {
        my $x = $_[0];

        $x =~ /\xFF\xFF\xFF\xFFm$host.$port\x00(\D+)/;
        $Host_Name = $1.substr($',0,(index $',"\x00"));

        $x = substr($x, 8+length($host.$port.$Host_Name),999);
        $Map_Name = substr($x,0,(index $x,"\x00"));

        $x = substr($x, length($Map_Name)+1, 999);
        $Game_Dir = substr($x,0,(index $x,"\x00"));

        $x = substr($x, length($Game_Dir)+1, 999);
        $Game_Desc = substr($x,0,(index $x,"\x00"));
       
        $x = substr($x, length($Game_Desc)+1, 999);
        $Now_Players = hex(unpack('h',substr($x,0,1)));
        $Max_Players = hex(unpack('H2',substr($x,1,1))); #???
        $Protocol = hex(unpack('H2',substr($x,2,1)));
        $S_type = substr($x,3,1);
                if ($S_type eq 'l') {$S_type='listen'}
                elsif ($S_type eq 'd') {$S_type='dedicated'}
        $S_OS = substr($x,4,1);
                if ($S_OS eq 'l') {$S_OS='linux'}
                elsif ($S_OS eq 'w') {$S_OS='windows'}
        $Passw = hex(unpack('H2',substr($x,5,1)));
                if ($Passw==0) {$Passw='no'} else {$Passw='yes'}
        $Modded = hex(unpack('H2',substr($x,6,1)));
                if ($Modded==0) {$Modded='no'} else {$Modded='yes'}

        $x = substr($x,7,999);
        $Mod_url = substr($x,0,(index $x,"\x00"));

        $x = substr($x,length($Mod_url)+1,999);
        $Mod_dwn = substr($x,0,(index $x,"\x00"));

        $x = substr($x,length($Mod_dwn)+1,999);

        $x = substr($x,length($x)-2,1);
                if ($x==0) {$Secure = 'no'} else {$Secure = 'yes'}
       
        p('Secure        : '.$Secure      );
        p('Mod_dwn        : '.$Mod_dwn    );
        p('Mod_url        : '.$Mod_url    );
        p('Modded        : '.$Modded      );
        p('Passw          : '.$Passw      );
        p('S_OS          : '.$S_OS        );
        p('S_type        : '.$S_type      );
        p('Protocol      : '.$Protocol    );
        p('NowPlayers    : '.$Now_Players );
        p('MaxPlayers    : '.$Max_Players );
        p('HostName      : '.$Host_Name  );
        p('MapName        : '.$Map_Name    );
        p('GameDirectory  : '.$Game_Dir    );
        p('GameDescription: '.$Game_Desc  );
        }
##########################################################################
##########################################################################
##########################################################################
 
 system('cls');

 $host = '85.214.34.55';
 $port = '27018';

 print '[i] '.$host.':'.$port."\n";

 my $sock = new IO::Socket::INET(
                PeerAddr=>$host,
                PeerPort=>$port,
                Proto=>'udp') || die "[-] No Server!";

 $cmd="\xFF\xFF\xFF\xFF"."TSource Engine Query\x00";
 syswrite $sock, $cmd;
 sysread $sock,$x,65535;
 #saveFile('f1.txt',$x);
 parce_info_1($x);


 $cmd="\xFF\xFF\xFF\xFF"."ping\x00";
 syswrite $sock, $cmd;
 sysread $sock,$x,65535;
 #saveFile('ping.txt',$x);


 $cmd="\xFF\xFF\xFF\xFF"."getchallenge\x00";
 syswrite $sock, $cmd;
 sysread $sock,$x,65535;
 if ($x =~ /SERVERISFULL/) {
        print "[-] Server is full!\n";
        exit;
        }
 elsif ($x =~ /BADPASSWORD/) {
        print "[-] Bad password!\n";
        exit;
        }
 $x=~/A00000000 (\d{10})\x20/;
 $Cookie = $1;
 p('Cookie        : '.$Cookie);
 #saveFile('f2.txt',$x);

 close $sock;

##########################################################################
##########################################################################
##########################################################################

кстате, на форуме я уже поднимал похожий вопрос:
https://forum.antichat.ru/thread93517.html

и там мне дали линки:
http://dev.int64.org/docs/gamestat-protocols/halflife.html
http://developer.valvesoftware.com/wiki/Server_Queries
http://developer.valvesoftware.com/wiki/Special:Search?search=protocol&go=Go
http://dump.ru/file/1249347 php class для работи с cs протоколом

вот что я сам нашел: http://www.securitylab.ru/analytics/216301.php лучшее!

и.. у меня возникли проблеми с отправкой пакетов "players" и "inforstring".. х3.. может єто с протокол связано..

разбирайся)

eLWAux 04.12.2008 23:27

через Delphi тебе надо сделать подключения через socket'и и отправлять некоторые пакети на серв.. ищи доки.. вот несколько:
http://www.example-code.com/delphi/socket.asp
http://forum.telenet.ru/index.php?showtopic=64203&st=0&p=1053520&#entry105 3520
вот ирка: http://forum.sources.ru/index.php?showtopic=53816
http://faqs.org.ru/progr/pascal/delphi_internet2.htm
поищи на delphisources.ru примери..

описания пакетов тут: http://dev.int64.org/docs/gamestat-protocols/halflife.html

cylaaaan 04.12.2008 23:35

скажи плз каким ты снифером пользовался?
я вот тоже хочу проследить действия с инетом опр. программы,а не знаю чем, попадаются только LAN сниферы ((

vikseriq 05.12.2008 00:02

Wireshark, Iris

ronald 06.12.2008 19:03

EtherDetect, ток у меня демка на 30 дней, аднако ломается простой переставкой системного времени

th13fnano 08.12.2008 20:04

MultiSniffer - сниферитт все tcp пакеты - есть еще на фикипедии опенсорс сниффер погугли

vvs777 28.12.2008 22:28

Цитата:

как реализовать механизм подключения к серверу Counter-strike 1.6
с помощью всего вышеописанного можно только подключиться.
Описания же, как отправить мессагу (для рекламы по сервакам), как передаются пинги, координаты итп нигде нет. + можно заметить что длина пакетов непостоянна.
Я над этим делом уже достаточно долго работаю.

ComradeBot тому пример.

A_V 03.01.2009 18:21

Может я конечно бред говорю, но не проще заходить через саму КС?
ПРосто реализовать, что бы прога вбивала в консоль игры по очереди "Connect XXXXXXXXXXXX", где ХХХ - ИП, которые будет браться из Текстового файлика( ну к примеру пока так пусть будет), затем тайм аут на секунд 30, затем через консоль "say YYYYYYYYYYYYY", где игрик - реклама...

Вот принципе и все, дело за малым...


Время: 23:15