ESTE SERVICIO PUEDE CONTENER TRADUCCIONES DE GOOGLE. GOOGLE NIEGA CUALQUIER RESPONSABILIDAD RELACIONADA CON LAS TRADUCCIONES, EXPRESA O IMPLÍCITA, INCLUYENDO CUALQUIER RESPONSABILIDAD ACERCA DE LA PRECISIÓN, LA CONFIABILIDAD Y CUALQUIER RESPONSABILIDAD IMPLÍCITA DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO EN PARTICULAR Y DE NO INFRACCIÓN.

Por su comodidad, se ha traducido el sitio web de Kaspersky Lab utilizando un software de traducción de Google Translate. Se hicieron unos esfuerzos razonables para proporcionar una traducción precisa; no obstante, las traducciones automáticas no son perfectas y no hay ninguna intención de sustituir el trabajo de los traductores. Se proporcionan estas traducciones como un servicio para los usuarios del sitio web de Kaspersky Lab y se han publicado tal "como es". No hay ninguna garantía, expresa o implícita, acerca de la precisión, la confiabilidad o exactitud de cualquier traducción desde el inglés a cualquier otro idioma. La traducción de algunos contenidos (imágenes, videos, Flash, etc) podrían no ser totalmente fiel debido a las limitaciones del software de traducción.

Virus.DOS.Zhengxi

Clase Virus
Plataforma DOS
Descripción

Detalles técnicos

Esta es una familia de virus parásitos muy peligrosos, polimórficos y furtivos. Estos virus tienen más de 7K de longitud, son muy complejos y quizás los virus DOS más complejos. Estos virus infectan archivos EXE, OBJ y LIB, y añaden COM-droppers a los archivos ZIP, ARJ y RAR. Los virus contienen las cadenas de texto internas:


Terminación anormal del programa
The Virus / DOS 0.54 Copyright (c) 1995 Zhengxi Ltd
¡Advertencia! ¡Este programa solo para uso interno!

Instalación

El código del virus recibe el control desde diferentes puntos dependiendo de la forma de infección, pero en todos los casos el destino es la rutina de desencriptado polimórfico. En los archivos EXE (anexos) la rutina de descifrado recibe el control inmediatamente cuando se carga un archivo EXE en la memoria para su ejecución, en archivos EXE (inserción) – desde el código de cargador (ver infección EXE), en los archivos vinculados con OBJ / Archivos LIB: a partir de la instrucción CALL (ver infección OBJ / LIB), los cuentagotas COM tienen instrucciones JMP en sus comienzos, que JMP lleva el control a la rutina de descifrado.

Al ser descifrado, la rutina de instalación del virus recibe el control. El virus engancha INT 1 (seguimiento en un paso) y rastrea INT 21h. Mientras rastrea, el virus busca algún código específico dentro del controlador INT 21h (ese código está presente en DOS 5.x y DOS 6.x). Si se encuentra dicho código, el virus verifica varias condiciones y termina la instalación en algunos casos.

El virus finaliza la instalación si:

  • MS Windows está instalado
  • la unidad de arranque es A: o B:
  • INT 8, 13h, 28h apunta al mismo segmento (para salir de la instalación si el monitor antivirus está instalado?)
  • el día del archivo de host (sello de fecha y hora) es el mismo o cerca del día actual (dos bits más altos del número de día actual XORed con día de archivo es igual a cero)
Entonces el virus asigna el bloque de la memoria del sistema para la copia TSR del virus, almacena en su cuerpo 11 bytes desde la dirección del controlador INT 21h, y remueve el código INT 21h con instrucción FAR CALL (2F FF 1E ???) que trae el control al controlador INT 25h (Absolute Disk Read). Luego, el virus almacena los primeros cinco bytes del controlador INT 25h y escribe allí cinco bytes de FAR JMP en el código del virus. El resultado es el siguiente:

INT 21h controlador:
… …
+ ——- 2E FF 1F ???? CALL FAR CS: Int25
� C7 06 ???? ; ¿Palabra mágica?
� Int25: ???? ???? ???? ???? ; ahora addr de INT 25h
� … … …

+> INT 25h controlador:
+ ——– EA ???? ???? JMP FAR VirusHandler
� … … …

+> Controlador de virus:
2E 8F 06 … POP CS: Caller_IP
… …
Como resultado, el virus tiene el mismo controlador para interceptar llamadas INT 21 hy INT 25 h. Para separar estas llamadas, el virus comprueba la dirección de la persona que llama (Caller_IP). Si la llamada va desde el controlador INT 21h, el virus pasa el control a la rutina del controlador Virus INT 21h, en otro caso, el controlador Virus INT 25h recibe el control.

La rutina de instalación está completa, pero el virus puede mover su código a otros bloques de memoria (ver el análisis del controlador INT 21h). Por lo tanto, la copia TSR del virus no ocupa los mismos bloques de la memoria del sistema, sino que puede moverse a otras direcciones, incluidas las UMB.

Luego, el virus devuelve el control al programa host. Hay tres variantes diferentes de dicho retorno, dependen del método de infección. En el caso del cuentagotas COM, el virus solo muestra el mensaje:


Terminación anormal del programa
y regresa a DOS con la función Terminate (INT 21h, AH = 4Ch). En caso de que el método de infección se anexe al EXE, el virus restaura el encabezado del archivo original mediante el uso de un motor polimórfico (genera una rutina de desencriptado polimórfico y lo ejecuta para restaurar el encabezado original, vea la infección EXE a continuación). En el caso de la inserción de EXE, el virus simplemente regresa al programa host porque el cargador de virus insertado en el archivo restaura el código original por sí mismo. En el caso del archivo OBJ / LIB, el virus también regresa al programa host (vea la infección OBJ / LIB a continuación).

INT 21h Handler

El virus intercepta 18 de las funciones INT 21h:

3Dh, 6Ch – Abrir / Crear archivo
3Eh – Cerrar archivo
3Fh – Leer archivo
42h – Lseek
4Bh – Ejecutar archivo
41h – Eliminar archivo
11h, 12h – FindFist / Siguiente FCB
4Eh, 4Fh – FindFist / Siguiente ASCII
00h, 4Ch – Terminar
31h – Stay TSR
67h – Establecer la cuenta de la manija
48h, 49h, 4Ah – funciones de administración de memoria (Asignar, liberar, cambiar el tamaño)
El virus utiliza las funciones Establecer cuenta de manejo, Ejecutar archivo y administración de memoria para ocultar su código en la memoria del sistema: el virus manipula con bloques MCB para que no sean visibles en el mapa de memoria mientras usa utilidades de exploración de memoria.

Al interceptar las funciones Terminate, Stay TSR y FreeMemory, el virus mueve su código a una nueva dirección en la memoria del sistema. El virus asigna un nuevo bloque de la memoria (que puede ser convencional o bloque de memoria UMB) y se copia allí mismo. Entonces, al instalar el virus no afecta los bloques UMB para colocar su copia TSR, pero luego puede moverse a UMB y ocultarse allí.

Mientras se abre el archivo, el virus realiza varias llamadas diferentes. Primero, el virus comprueba el modo de apertura, y si el archivo se abre para la escritura, el virus desinfecta el archivo.

Antes de la desinfección, el virus comprueba que se accede al archivo y el programa que accede a ese archivo (llamante). El virus compara el nombre de acceso al programa (llamante) con la lista de nombres (ver a continuación), y no desinfecta el archivo al que se accede si el nombre del programa que accede es de esa lista. Los nombres de archivo son:


UUENCODE.EXE, PKLITE.EXE, LZEXE.EXE, NDD.EXE, DIET.EXE, AFD.EXE, SD.EXE,
SPEEDDSK.EXE, DEFRAG.EXE, TLINK.EXE, LINK.EXE
En el caso de la función AH = 3D00h (Open Readly), el virus realiza algunas acciones extrañas. Escanea el código de la persona que llama y lo revisa. Parece que el parche de algunos antivirus escáner. Afortunadamente, el virus tiene el error y esa rama nunca se ejecuta.

Al abrir el archivo, el virus también lleva el control a la rutina invisible: el virus sustituye la longitud del archivo por la original.

Mientras lee el archivo, el virus llama a la rutina de sigilo. En caso de leer desde el encabezado del archivo infectado, el virus lee, descifra y copia el encabezado original en el buffer de lectura.

En el caso de la función de Lseek, el virus lleva el control a otra rutina de sigilo del virus: el virus no permite buscar la longitud original del archivo.

Al eliminar el archivo infectado, el virus lo desinfecta.

Mientras busca los archivos con FindFirst / Next Calls, el virus sustituye la longitud del archivo con la original si el archivo está infectado.

FindFist / Next Las llamadas ASCII también son utilizadas por el virus para detectar los archivos en busca de infección. El virus guarda el nombre de cualquier archivo al que se acceda con la función FindFirst, y aproximadamente cada 5to archivo (con probabilidad 3/16) accedido con la función FindNext. El virus tiene solo un buffer para el nombre del archivo, por lo tanto, cada nombre siguiente sobrescribe el anterior.

Al cerrar cualquier archivo, el virus comprueba e infecta el archivo con el nombre que está almacenado en el búfer. El virus también infecta el archivo que está cerrado, pero lo hace con una probabilidad de 1/4 (por el resultado del generador aleatorio del virus)

Infección

Antes de infectar el archivo, el virus comprueba varias condiciones:
  • el archivo no es "solo crea" al comparar el número del día actual con la fecha del archivo y la marca de tiempo del archivo (lo mismo que durante la instalación)
  • el archivo es local, y no en A: o B: unidad
  • el nombre del archivo no es *.? V? (* .OVL?)
  • hay suficiente espacio libre en el disco (verificaciones con INT 21h, AH = 36h)
En el caso de todas estas condiciones, el virus lee el encabezado del archivo y lo comprueba en busca de EXE, OBJ, LIB y archiva sellos.

Infección de archivos EXE

El virus infecta EXE mediante tres métodos diferentes: adjuntar, insertar e infectar archivos en archivos autoextraíbles.

Primero, el virus comprueba la estructura del archivo, y si es un archivo EXE autoextraíble (creado por ZIP2EXE, por ejemplo), el virus infecta el archivo adjunto (ZIP, ARJ, RAR) por el método que se describe a continuación: crea el cuentagotas COM y lo agrega a los contenidos del archivo.

Luego, el virus verifica la longitud del archivo y no infecta los archivos con una longitud inferior a 400 h (1024) bytes. Si la longitud del módulo cargable (nota: no la longitud del archivo) es mayor que 32K, el virus inserta su cargador en el medio del archivo. En otro caso, el virus infecta el archivo añadiendo un método.

Al infectar los archivos al agregar el método, el virus lee el encabezado del archivo, lo cifra y lo guarda al final del archivo. Luego, el virus ejecuta su generador polimórfico y guarda el cuerpo del virus cifrado y los bucles polimórficos en el extremo del archivo. Para finalizar la infección, el virus aumenta la longitud del archivo al valor que se divide por 9Dh da el resto 25h (para detectar archivos ya infectados, es un virus "ID") y modifica los campos de encabezado EXE (registros y longitud del módulo).

Nota: el virus cifra el encabezado original del archivo host con el bucle de cifrado polimórfico, y ese bucle es diferente con la rutina que se utiliza al cifrar el cuerpo del virus. Es decir, el virus llama al motor polimórfico dos veces, al tiempo que cifra el encabezado EXE original y al encriptar el cuerpo principal.

Al ejecutar el archivo EXE infectado, los bucles de descifrado restauran el cuerpo del virus principal pero no el encabezado del archivo original. Para volver al programa host, el virus debe descifrar los datos del host, pero el motor genera bucles aleatorios con funciones de cifrado seleccionadas al azar. Para resolver ese problema, el virus almacena los valores iniciales del generador aleatorio al encriptar los datos del host, y ejecuta el generador polimórfico con los mismos valores mientras descifra esos datos. Como resultado, el generador trae el mismo código que se usó para encriptar los datos del host, y al ser ejecutado, esa rutina lo descifra.

Infección de archivos EXE (inserción)

Si la longitud del archivo es superior a 32K, el virus busca al principio del módulo principal EXE (justo después del encabezado EXE), lee 6K del código y busca las rutinas C / Pascal allí. Por lo general, las rutinas C / Pascal comienzan desde el mismo "encabezado" que guarda el registro BP, y mueve el puntero SP a BP.

El virus escanea el código para esos "encabezados" y si se encuentra dicho código, el virus escanea los siguientes 54h bytes de código para la instrucción RET o CALL FAR para evitar la superposición de la siguiente subrutina o la dirección reubicada. Si se encuentra dicho código (RET o CALL FAR), el virus sale de la rutina de infección.

Luego, el virus lee 54h bytes de esa rutina, la sobrescribe con el código del cargador de virus, luego encripta el cuerpo del virus principal con el motor polimórfico y lo guarda en el archivo final. Luego, el virus cifra con la función SUB simple el código original de la subrutina y la segunda parte del cargador, y lo guarda al final del archivo. Luego, el virus escribe al final del archivo los datos aleatorios de la misma forma que el método de infección "anexo".


No infectado Infectado
———— ——–
+ ————– + + ————– +
�Exe Encabezado � eExe Encabezado �
+ ————– � + ————– �
�Código EXE principal � �Código EXE principal �
� ————– � � ————– �
�C / Pascal subr � – + � Cargador de virus � Parte 1, 52h bytes, no encriptado
� ————– � � � ————– �
� � � in Código EXE principal �
� � � � (continuación) �
+ ————– + � + ————– �
� irusVirus � Encriptado con bucles polimórficos
� � ————– �
� lo Cargador de virus � Parte 2, encriptado con comando SUB
� � ————– � 70h bytes
+ -> � Código guardado � Código original de la subrutina parcheada,
� ————– � 52h bytes, encriptados con SUB
� Datos aleatorios � longitud del archivo / 9Dh, el resto es 25h
+ ————– +
Al ejecutarse, el cargador busca el nombre del archivo de host mediante el uso de campos de PSP, abre los archivos, busca el extremo del archivo, luego lee, descifra y ejecuta la segunda parte del cuentagotas. Esa parte restaura la subrutina parcheada, asigna la memoria del sistema (convencional o UMB), lee el cuerpo principal del virus y pasa el control al ciclo polimórfico de desencriptación. Ese bucle descifra el cuerpo del virus y pasa el control a la rutina de instalación.

Esa es una forma de infección muy insidiosa. El código del virus está oculto en el archivo y no hay una entrada directa al código del virus desde el encabezado del archivo. La subrutina reemplazada por el cargador de virus puede ser "rara vez ejecutada". Por ejemplo, la subrutina que muestra el mensaje de error. Entonces, el virus puede "dormir" en dichos archivos durante mucho tiempo, y luego saltar e infectar el sistema bajo algunas condiciones limitadas.

Infecting Archives

En caso de archivo, el virus crea en memoria la imagen del gotero COM infectado y lo agrega al archivo. Los droppers COM siempre comienzan con la instrucción JMP seguida de datos aleatorios, código de virus cifrado y bucle polimórfico de desencriptación. La instrucción JMP lleva el control al ciclo de descifrado.

El nombre del cuentagotas se selecciona al azar y finaliza con la extensión .COM, por ejemplo:


HAIF.COM, UCM.COM, DOO.COM, VLG.COM, y así sucesivamente.
Al procesar los campos de archivo, el virus no usa ninguna utilidad externa, sino que llena por sí solo todos los campos necesarios. El virus no empaqueta el gotero, pero usa el método "almacenado": el virus se almacena en el archivo "tal cual". Al infectar el virus, verifica el contenido de los archivos y no los infecta dos veces.

Infección de archivos OBJ y LIB

Al infectar los módulos OBJ / LIB, el virus comprueba los campos del archivo, crea e inserta allí nuevos registros de objetos que contienen el código de virus cifrado con bucles polimórficos.

Al escanear el archivo de objeto, el virus comprueba el código de ese archivo para C / Pascal subrutina "encabezado", así como al insertarlo en archivos EXE, e infecta los archivos solo si se encuentra ese código. Pero en el caso del módulo OBJ o LIB, el virus no suelta el código de cargador allí, sino que sobrescribe el encabezado C / Pascal con la instrucción CALL (E8xxxx).

Al estar vinculado en un archivo ejecutable, CALL lleva el control al ciclo de descifrado polimórfico del virus. Ese bucle descifra el código del virus y pasa el control a la rutina de instalación del virus.

Al igual que en los archivos EXE (inserción), es posible que CALL nunca reciba el control y que el virus duerma durante mucho tiempo. Pero bajo ciertas condiciones, el virus puede saltar e infectar el sistema.

INT 25h Handler

Este manejador realiza la rutina de sigilo en el nivel INT 25h. Al acceder a las entradas del directorio, el virus sustituye la longitud del archivo por las originales, mientras lee el encabezado del archivo infectado, el virus lo restaura y le muestra la forma original.

El virus no se da cuenta del 100% de sigilo en el nivel INT 25h, por supuesto. Hay formas de eludir la rutina de sigilo. Pero si algún programa antivirus lee el contenido del archivo mediante las funciones de INT 21h DOS, luego lee la estructura del directorio y luego el contenido del archivo mediante llamadas INT 25h absolutas, el virus permanece oculto.

Trigger Routine

SI al procesar archivos ZIP el virus encuentra algún registro que está empaquetado con el método "almacenado", comprueba la fecha y hora del archivo ZIP. Si el año de la última modificación de ese archivo es 1996 o más, el virus buscará todos los archivos de todos los directorios de todos los discos desde C: hasta Z :, y luego eliminará los archivos y el árbol completo de subdirectorios.


Enlace al original