[perl] bot de IRC

Hav0c

Power Member
Fiz este bot de IRC ontem, e estou a ter problemas: se o bot não envia nada para o servidor, é expulso por causa do "ping timeout".

Código:
#!/usr/bin/perl -w
# Pedo_bot - by Hav0c
# Warning: this code is full
# with bugs!!1

use IO::Socket;

#$chan = "#rohitab";
$serv = "irc.bluehell.org";
$port = "6667";
$nick = "Hav0c_b0t";
$user = "x1 x2 x3 x4";
$pass = "[passwd]";
$owner = "Hav0c";

#commands:
###############################################

$join = "!join";
$say = "!say";
$exit = "!exit";
$rape = "!rape";
$ping = "!ping";
$flood = "!flood";
$msg = "!msg";
$joke = "!joke";
$rnd = "!rnd";
$xnick = "!nick";
$billy = "!billy";

###############################################
$irc = IO::Socket::INET->new(PeerAddr=>$serv,
PeerPort=>$port,
Proto=>'tcp',
Timeout=>'30') || print "Error creating socket\n";

print "channel:: ";
$chan = <STDIN>;
chop $chan;

print $irc "USER $user\r\n";
print $irc "NICK $nick\r\n";
print $irc "privmsg nickserv IDENTIFY $pass\r\n";

print "Joining channel in 10 seconds\n";
sleep(10); #sl33pz

print $irc "JOIN $chan\r\n";
print "into $chan\n";
sleep(10); #mo' sl33pz

# Comment here to make
# the code look bigger
# <_<

print "$0 will now accept your commands\n";

while($stuff = <$irc>){
#next unless $stuff =~ /^:$owner\b/;

    if($stuff =~ $ping){
        print $irc "privmsg $chan PONG!\r\n";
    }

    if($stuff =~ $say){
        
        print $irc "privmsg $chan $'\r\n";
    }
    if($stuff =~ $join){
        print $irc "JOIN $'\r\n";
    }


    if($stuff =~ $rape){
        print $irc "privmsg $chan 8====D~~~$'\r\n";
    }

    if($stuff =~ $flood){
        print $irc "privmsg $chan $'\r\n"; #I tried to use a loop
        print $irc "privmsg $chan $'\r\n"; #but the mo'fuckin command didn't
        print $irc "privmsg $chan $'\r\n"; #worked
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
    }
        

    if($stuff =~ $exit){
        print $irc "QUIT $'\r\n";
        close($irc);
        exit;
    }
    if($stuff =~ $msg){
        print $irc "privmsg $'\r\n";
    }
    if($stuff =~ $joke){
        print $irc "privmsg $chan I'm masturbating lulz\r\n";
    }
    if($stuff =~ $rnd){
        $ran = int(rand(100));
        print $irc "privmsg $chan $ran\r\n";
    }

    if($stuff =~ $xnick){
        print $irc "NICK $'\r\n";
    }

    if($stuff =~ $billy){
        print $irc "privmsg $chan Linux rapes winblows\r\n";
    }

}

alguma maneira de fazer com que o bot não seja expulso da sala?

PS: os comentários estão em inglês porque o bot foi feito para #rohitab em irc.bluehell.org que é em inglês.
 
Geralmente, não é contra as regras dos servidores de IRC o uso de IRC Bots?

edit - pelo que vi no código isso parece um IRC bot com fins malignos.
report.gif
'd
 
Última edição:
@angelofwisdom, depende das suas funcionalidades e da AUP de cada Servidor.

@Hav0c, eu não percebo nada de perl..., e sinceramente nem olhei para o código :x No entanto existe algo que TENS de ter em conta, o servidor de X em X tempo faz ping a TODOS os seus clientes para confirmar que eles estão ligados ao mesmo, e os clientes para confirmarem isto terão de responder, com pong.

Vê como tratar estes eventos, existem muitos sites a explicar isto, quando fazia bots em tcl encontrava mesmo muita informação sobre isso ;)

abraços, HecKel
 
@angelofwisdom, depende das suas funcionalidades e da AUP de cada Servidor.

@Hav0c, eu não percebo nada de perl..., e sinceramente nem olhei para o código :x No entanto existe algo que TENS de ter em conta, o servidor de X em X tempo faz ping a TODOS os seus clientes para confirmar que eles estão ligados ao mesmo, e os clientes para confirmarem isto terão de responder, com pong.

Vê como tratar estes eventos, existem muitos sites a explicar isto, quando fazia bots em tcl encontrava mesmo muita informação sobre isso ;)

abraços, HecKel


O HecKel tem razão.

Se reparares no cliente mais usado de irc ( o mIRC) vais reparar na janela do status, que ele pinga o server (PING/PONG). Vais ter de fazer o mesmo :P

Se não fosse assim, ele nunca daria timouts, e se eventualmente caísses, o teu nick ficava lá até haver reboot :P
 
Geralmente, não é contra as regras dos servidores de IRC o uso de IRC Bots?

edit - pelo que vi no código isso parece um IRC bot com fins malignos.
report.gif
'd

WTF ? Onde é que viste código maligno ? :P


btw hav0c, tás por dentro do protocolo do msn (msn v12) ?
Ando com ideias de codar um bot para o msn (para controlo remoto de servidores) e estou a pensar em fazer em perl tambem, mas não há muita informação sobre este protocolo :|
 
Última edição:
Não vi código maligno, mas
Código:
    if($stuff =~ $flood){
        print $irc "privmsg $chan $'\r\n"; #I tried to use a loop
        print $irc "privmsg $chan $'\r\n"; #but the mo'fuckin command didn't
        print $irc "privmsg $chan $'\r\n"; #worked
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
    }

e

Código:
print "$0 will now accept your commands\n";

fazem-me crer que ou será usado para fins malignos, ou é um joke. Não estou a insinuar nada - apenas me parece ser - mas pessoalmente prefiro não responder à pergunta enquanto não tiver a certeza de que não estou a ajudar ninguém com software maligno. Faz parte dos meus princípios :x
E acedi ao IRC nesse servidor, e as salas também me pareceram um pouco ao estilo hack/warez.

Anyway, se calhar é melhor eu ficar-me por aqui. A minha opinião está dada.

edit - cá está mais um:
Avisos do servidor IRC disse:
[Logon News - Jan 11 2007] Any bots found on the network without usermode +B are assumed to be intended for malicious purposes and will be forcefully removed.
Não vejo ali o "Mode +B" para indicar que isto é um bot ;) logo, ele está a tentar fazer-se passar por um user e não por um bot.

Nada abona a favor do utilizador, na minha opinião.

edit 2 - @ spastikman, o protocolo do MSN é proprietário. É um pouco complicado encontrares informações sobre ele ;) mas é uma questão de procurar.

edit 3 - @ HecKel, se calhar até tenho algum tempo livre :P

Cumprimentos
angelofwisdom
 
Última edição:
Não vi código maligno, mas
Código:
    if($stuff =~ $flood){
        print $irc "privmsg $chan $'\r\n"; #I tried to use a loop
        print $irc "privmsg $chan $'\r\n"; #but the mo'fuckin command didn't
        print $irc "privmsg $chan $'\r\n"; #worked
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
        print $irc "privmsg $chan $'\r\n";
    }
Sim, de facto flood é considerado por algumas redes como algo proibido, mas

Código:
print "$0 will now accept your commands\n";

Isto não implica absolutamente nada, pode apenas ser a mensagem que dá após fazeres o login no bot. Acontece com cerca de 90% dos bots de IRC. Segurança do mesmo ;)

Não vejo ali o "Mode +B" para indicar que isto é um bot ;) logo, ele está a tentar fazer-se passar por um user e não por um bot.

Na PTnet, por exemplo, nem existe esse modo. Os bots não se diferenciam dos users ;)

abraços, HecKel
 
o problema é que há certos passos na autenticação do cliente que estão confusos.

Quanto ao protocolo ser fechado, não me parece, senão não existiam por aí tantos tutoriais e clientes de msn open source.
 
O report feito acerca desta thread deixa-me numa posição um bom bocado desconfortavel já que se por um lado um bot de IRC com as linhas apontadas pelo angel realmente aparenta poder vir a ser usado para fins menos claros o facto é que pode não o ser.

E essa é a unica razão de não encerrar a thread. No entanto vou subscrever a thread e mante-la sob apertada observação de forma a que não sejam quebradas as regras do forum.

Reforço é o aviso feito pelo angel para terem atenção à ajuda que dão em topicos cuja finalidade é "cinzenta" ou pouco clara.
 
Obrigado pelas respostas. Eu sabia que tinha de fazer algo com um certo "PONG", mas não sabia o que.

E não, este bot não tem qualquer uso maligno. Se olharem para o código, ele só aceita comandos provenientes de mim. E o flood tem apenas 9 linhas pois o caso enviar 10 ou mais, o chanserv faz-lhe um BAN.

edit: Ainda estou a trabalhar no bot, e não adicionei o tal MODE +B, mas estou agora a modificar o codigo e adicionarei-a quando conseguir arranjar algumas falhas

2nd edit: spastikman: não sei muito de bots de msn, por isso não sei se posso ajudar alem do facto de saber que o msn conecta-se a messenger.hotmail.com pela porta 1863
 
Última edição:
btw hav0c, tás por dentro do protocolo do msn (msn v12) ?
Ando com ideias de codar um bot para o msn (para controlo remoto de servidores) e estou a pensar em fazer em perl tambem, mas não há muita informação sobre este protocolo :|

Caso não encontres informação na web sobre o protocolo, podes sempre correr um sniffer e monitorizar toda a actividade na porta que comunica com o MSN.
É impossível esconder-se todo um protocolo, porque ele é "público", passeia pela rede..
 
Caso não encontres informação na web sobre o protocolo, podes sempre correr um sniffer e monitorizar toda a actividade na porta que comunica com o MSN.
É impossível esconder-se todo um protocolo, porque ele é "público", passeia pela rede..
O problema é quando as mensagens não vão como "get" "post" "helo" mas sim em caracteres que para nós não têm qualquer significado.
Quando eu me dava ao trabalho de sniffar o que saía do computador, alguns programas comunicavam duma forma que eu não compreendia - por sinais. Depois recebiam um determinado número de bytes, desligavam a ligação e ligavam-se a outro IP noutra porta .... e o que passava na rede era "imperceptível" para mim. Eu sabia que receberam os dados "naquele" pacote, mas não o consigo decifrar.
Se não estou em erro, o protocolo do MSN é assim. "Em código". Pelo menos quando sniffei o 7.5 não percebia nada daquilo.

Mas eu também preciso de práctica nisto :) e algum reverse-engineering ajudaria a perceber (coisa que não sei fazer :( )
 
Se o teu problema é esse não faltam programas open source para o MSN. aMSN, Mercury, é só procurar e se necessário esgravatar no código que tens lá o protocolo implementado.
 
Mas eu também preciso de práctica nisto :) e algum reverse-engineering ajudaria a perceber (coisa que não sei fazer :( )

True. Correr a aplicação debaixo de um debugger (OllyDbg/SoftICE) dá sempre jeito se meteres uns breakpoints decentes. Sabes o que acabou de chegar (dados) e sabes o que a app está a fazer com eles. Ouro sobre azul...
 
O protocolo MSN é tudo menos imperceptível.. vai tudo em clear, ainda por cima.
Tens a certeza do que estás a dizer? (não estou a perguntar em tom de "estás errado", mas mesmo de "tens a certeza?").
Refiro-me ao 7.5. As IM's vão em plain text, mas o protocolo em si, aquilo que vai e vem, "perguntas e respostas"... nada daquilo era compreensível. Posso-me dar ao trabalho de voltar a verificar e ver isso com mais calma, mas lembro-me daquilo que vi. Era o protocolo "estranho", e as IM's em plain text.

True. Correr a aplicação debaixo de um debugger (OllyDbg/SoftICE) dá sempre jeito se meteres uns breakpoints decentes. Sabes o que acabou de chegar (dados) e sabes o que a app está a fazer com eles. Ouro sobre azul...
É exactamente isso. Quando chegam dados, por mais incompreensíveis que sejam da minha parte, têm com certeza uma função na aplicação. A única forma que conheço de os perceber é se eu estiver a "analisar" aquilo que a aplicação está a fazer com eles.
Como eu tinha dito, eu precisaria era de saber fazer reverse-engineering. Nada que algum tempo (se existir :'( ), paciência e uns bons tutoriais não resolvam :P
 
Autenticação não tenho tempo para testar agora, mas até acredito que seja cifrado. O protocolo em conversação não é nada difícil de entender. Faz uma captura rápida e checka! ;)

EDIT: Já agora
Warrior disse:
É impossível esconder-se todo um protocolo, porque ele é "público", passeia pela rede..
A partir do momento em que se inicia uma sessão cifrada, qualquer protocolo deixa de ser público e fica portanto impossível de o descobrir apenas por eavesdropping.
 
Última edição:
basta dar uma olhadela ao request for comments do IRC e encontras lá 4.6.2:

Código:
[B]4.6.2 Ping message[/B]

      Command: PING Parameters: <server1> [<server2>]   The PING message is used to test the presence of an active client at the other end of the connection.  A PING message is sent at regular intervals if no other activity detected coming from a connection.  If a connection fails to respond to a PING command within a set amount of time, that connection is closed.
  Any client which receives a PING message must respond to <server1> (server which sent the PING message out) as quickly as possible with an appropriate PONG message to indicate it is still there and alive. Servers should not respond to PING commands but rely on PINGs from the other end of the connection to indicate the connection is alive. If the <server2> parameter is specified, the PING message gets forwarded there.
  Numeric Replies:
                            ERR_NOORIGIN                    ERR_NOSUCHSERVER                    Examples:
  PING tolsun.oulu.fi  ; server sending a PING message to
                     another server to indicate it is still
                     alive.

PING WiZ             ; PING message being sent to nick WiZ
  [B]4.6.3 Pong message[/B]

      Command: PONG Parameters: <daemon> [<daemon2>]   PONG message is a reply to ping message.  If parameter <daemon2> is given this message must be forwarded to given daemon.  The <daemon> parameter is the name of the daemon who has responded to PING message and generated this message.
  Numeric Replies:
                            ERR_NOORIGIN                    ERR_NOSUCHSERVER                    Examples:
  PONG csd.bu.edu tolsun.oulu.fi
                   ; PONG message from csd.bu.edu to
os RFC são sempre uma boa maneira de começar quando se quer trabalhar com protocolos.

»» RFC 2812 Internet Relay Chat: Client Protocol
»» http://www.irchelp.org/irchelp/rfc/

com medo de ser considerado novamente como "offtopic" (phear..lol) aqui vai:

http://www.hypothetic.org/docs/msn/

um guia não oficial para o protocolo do MSN.. mas nada como instalar o ethereal e ver o que se passa numa sessão..not! lol..
 
Última edição:
Back
Topo