-
WORM
Es el cuerpo de virus y el que realiza realmente todas las tareas.
Reserva espacio para variables locales, guarda registros, llena la pila
con 0xcc y usa la interrupcion 190h, que segun la dcumentacion conseguida
corresponde a la IP local.
-
Data Setup
Direcciones de datos en memoria y registros...
-
DO_RVA
Relative Virtual Addresses (RVAs). Crea una tabla de direcciones virtuales
de las DLL´s del sistema.
-
RVA_TOP
El virus busca KERN dentro de KERNEL.dll
-
NOT_MSVRT
DLL de entrada y salida muy usado por las aplicaciones win, comprueba
q el sistema es kernel32 (o sea tiene las funciones q necesita) y se queda
con su direccion usando GetProcAddress .
-
RVA_INNER_TOP
Recorre la RVA
-
RVA_PROCESS_FUNC
Compara las funciones disponibles con la RVA, es un bucle interno que
acaba cuando localiza GetProcAddress. Cuando la localiza, la duplica y
guarda en ebp-190.
-
TO_RVA_INNER_TOP
Para moverse en la RVA.
-
TO_RVA_TOP
Esta es la subrutina que busca KERN dentro de KERNEL32, bucle hasta
encontrarlo.
-
GETPROC_LOADED
Carga la direccion efectiva de GetProcAddress y comprueba si esta cargado
-
GPLOADED2
Carga edx con datos
-
GETPROC_LOOP_INC
Incrementa el contador a ebp.
-
GETPROC_LOOP_TOP
Subrutina de operaciones, carga y descarga de segmentos de datos y
cambios de dll.
-
loc_4B4
Carga el puntero de las funciones a utilizar de RVA.
-
DLL_CHECK_NULL_BRANCH
Controla errores de punteros a NULL.
-
CHECK_NULL_BRANCH_INC
Mueve el segmento de datos a la nueva busqueda.
-
CHECK_NULL_BRANCH
Comprueba la nulidad del puntero y si no lo es lo incrementa.
-
GETPROC_SHIFT_NULL
Se encarga de incrementar el puntero recorriendo la libreria getproc
a la siguiente funcion si el puntero es nulo.
-
FUNC_LOAD_DONE
Mueve el puntero al final del ultimo null de la lista de dll's y carga
wam.dll, en esta subrutina tambien parece que crea una estructura de datos
de tipo isapi (Internet Server API).
-
loc_599
Carga direcciones e inicializa la pila.
-
TOO_MANY_THREADS
Captura lenguaje del sistema. Si no es ingles, ejecuta DO_THE_WORK,
si no IS_AMERICAN
-
IS_AMERICAN
Prepara la pagina hackeada.
-
HACK_PAGE
Captura el puerto y recibe todas las peticiones GET_HTML, usa tcpsocketsend.
-
GET_HTML_INC
Subrutina de comparaciones.
-
GET_HTML
compara las peticiones url
-
GET_HTML_INC_JUMP
Captura el siguiente byte a comparar.
-
FOUND_HTML
Pone en el request return los datos de la web hackeada.
-
TCPSOCKSEND_FIND_INC
Suma
-
TCPSOCKSEND_FIND
Compara la direccion de epb con eax donde esta tcpsocketsend, si no
coincide actualiza y descasa mucho tiempo...
-
TCPSOCKSEND_FIND_INC_JUMP
Subrutina de salto.
-
RESET_MEM_PROTECTION
Resetea la protección de memoria
-
DE_THE_WORK
Usa RVA, crea manipuladores para sus plantillas, fija atributos de
fichero, define forma de creación (GENERIC_READ), nombre c:\notworm,
y la crea. Salta a la siguiente función si la creación falla.
-
NOTWORM_YES
Entra en un bucle tan largo que casi es definitivo, si llega a salir
salta a la siguiente función.
-
NOTWORM_NO
Coje la fecha del sistema. Lo carga en eax, salva la hora UTC y la
guarda en ebp. Comprueba si la fecha es menor de 20.
-
TIME_GREATER_20
Comprueba si la fecha es menor que 28 (se supone que por el mes de
febrero), si es menor ejecuta WHITEHOUSE_SOCKET_SETUP
-
WHITEHOUSE_SOCKET_SETUP
Define protocolo, socket, de guarda el fd del socket, fija el puerto
y la ip de www.whitehouse.gov y ... conecta :-)
-
WHITEHOUSE_SOCKET_SEND_INC
Incrementa contador.
-
WHITEHOUSE_SOCKET_SEND
Bucle de envio de paquetes a la casa blanca.
-
WHITEHOSE_SLEEP_LOOP
Descansa unas 4.66 horas.
-
INFECT_HOST
Realiza calculos sobre su propia direccion y guarda la obtenida.
-
loc_A05
Crea socket, carga nueva direccion e intenta conectar, si no funciona
hace un bucle con la funcion anterior.
-
loc_A16
-
GET_NEXT_URL_BYTE
Incrementa puntero del byte de una url
-
SETUP_URL_BYTE
Carga en ecx el isapi del sistema.
-
SEND_URL
Manda '?' y carga las cabeceras y las guarda.
-
GET_NEXT_QUERY BYTE
Incrementa el puntero de las cabeceras.
-
SETUP_QUERY_TO_SEND
Extension de signoe incrementa puntero.
-
SEND_QUERY
Manda las cabeceras y establece las de epb como las nuestras.
-
GET_NEXT_HEADERS
-
SETUP_HEADERS_TO_SEND
Entre esta funcion y la anterior preparan las cabeceras a enviar.
-
SEND_HEADERS
Establece tamaño de cabeceras, cabeceras, descriptor de fichero
y los manda. Esta subrutina es la que manda el código malicioso
a otros equipos.
-
SOCK_CLOSE_LOOP
Cierra el socket.
-
loc_C8C
Si el resulado no ha sido positivo vuelve a DO_THE_WORK
-
TIGHT_LOOP
Un bucle.
-
JUMP_TABLE1
procedimiento de llamada a funciones posteriores.
-
FAKE_TCPSOCKSEND
Reemplaza e socket original por el para servir la pagina hackeada.
-
HOOK_FAKE_TCPSOCKSEND
Reemplaza el tcpsocketsend original.
-
HACK_PAGE_JUMP
Establece el bit de la pagina hackeada.
-
PADDIG_BYTES
Tabla de bytes.
-
DO_REWRITE
Reescribe un bit del codigo del gusano para que apunte al principio
de codigo del gusano.
-
SELF_MODIFY1
Esta funcion auto-modifica el código del gusano.
-
WORMCONTINUE
Llamada a procedimientos
-
Fin
Aparece el código html de la página hackeada.
Este es el conjunto de subrutinas que contiene el virus, procede del
desensamblado del ejecutable del virus, el código fuente en un lenguajo
de alto nivel no se ha podido encontrar ya que no es un VBS.