1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[perl] bot de IRC

Discussão em 'Programação' iniciada por Hav0c, 2 de Abril de 2007. (Respostas: 18; Visualizações: 2995)

  1. Hav0c

    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.
     
  2. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    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. [​IMG]'d
     
    Última edição: 2 de Abril de 2007
  3. HecKel

    HecKel The WORM

    @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
     
  4. spastikman

    spastikman Banido


    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
     
  5. spastikman

    spastikman Banido

    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: 2 de Abril de 2007
  6. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    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:
    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: 2 de Abril de 2007
  7. HecKel

    HecKel The WORM

    Sim, de facto flood é considerado por algumas redes como algo proibido, mas

    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 ;)

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

    abraços, HecKel
     
  8. esquiso

    esquiso Power Member

    Acho que

    Código:
    $nick = "Hav0c_b0t";
    dá para perceber que é um bot ;)
     
  9. spastikman

    spastikman Banido

    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.
     
  10. Triston

    Triston Aku Soku Zan SM

    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.
     
  11. Hav0c

    Hav0c Power Member

    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: 2 de Abril de 2007
  12. Warrior

    Warrior Power Member

    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..
     
  13. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    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 :( )
     
  14. Warrior

    Warrior Power Member

    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.
     
  15. PrOdG

    PrOdG Power Member

    O protocolo MSN é tudo menos imperceptível.. vai tudo em clear, ainda por cima.
     
  16. ShadeX

    ShadeX Power Member

    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...
     
  17. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    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.

    É 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
     
  18. PrOdG

    PrOdG Power Member

    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
    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: 3 de Abril de 2007
  19. liquido

    liquido Power Member

    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: 5 de Abril de 2007

Partilhar esta Página