-Hace un tiempo hice una aplicación para:
1; Eliminar archivos con extenciónes maliciosas.
2; Desocultar carpetas, ademas, eliminar aquellas que tengan un nombre como: "RECYCLER ó DaTa".
3;Terminar Procesos Locales y en la Misma Instancia "Inyectar Codigo" al archivo que terminara los procesos("kb.bat").
Nota: Todo Esto Lo Hara Sobre Unidades Extraibles, Excepto la Opción "3".
Code entero para que sepan como funciona:
Código:
On Error Resume Next
Dim Drive_Map()
ReDim Drive_Map(10)
Dim Port_Map()
ReDim Port_Map(10)
Dim Bit_Map()
ReDim Bit_Map(512)
Set WshFSO = CreateObject("Scripting.Filesystemobject")
Set WshShell = CreateObject("Wscript.Shell")
User = WshShell.ExpandEnvironmentStrings("%UserName%")
Temp = WshShell.ExpandEnvironmentStrings("%Temp%")
Unit = Array("D","E","F","G","H","I","J","K","L","M","N")
ExtE = Array("bat","BAT","cmd","CMD","com","COM","dll","DLL","exe","EXE","hsh","HSH","js","JS","jse","JSE","lnk","LNK","pif","PIF","scr","SCR")
CarE = Array("Data","Restore","Recycler","System") 'Aqui las Probables Carpetas de Malware.
ROOTF = WshFSO.GetAbsolutePathName(".\")
Set PATH = WshFSO.GetFolder(ROOTF & "\" & "LOGS")
CPATH = PATH.ShortPath
c = 0
For i=0 To 10 Step 1
If (WshFSO.DriveExists(Unit(i))) Then
Drive_Map(c) = Unit(i)
c = c + 1
End If
Next
e = 0
For j=0 To c-1 Step 1
Set LIST = WshFSO.Drives(Drive_Map(j) & ":")
If LIST.DriveType = 1 Then
Port_Map(e) = Drive_Map(j)
e = e + 1
End If
Next
Do
FASM = InputBox("Elija Por Numero La Opción Deseada:"+Chr(10)+"1;Eliminar Virus De Unidades Con Registros."+Chr(10)+"2;Desocultar Carpetas De Unidades."+Chr(10)+"3;Terminar Procesos Locales Por Selección.","KILL BYTES","2",5000,7000)
Loop Until IsNumeric(FASM)
Select Case (FASM)
Case (0):
WScript.Quit
Case (1):
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine "Session: " & User & " - Files"
MFET.Close
f = 0
For k=0 To e-1 Step 1
Root = Port_Map(k) & ":\"
Set PathA = WshFSO.GetFolder(Root)
Set FILES = PathA.Files
For Each FILE In FILES
Bit_Map(f) = FILE
f = f + 1
Next
Next
For l=0 To f-1 Step 1
Set Cmp_File = WshFSO.GetFile(Bit_Map(l))
If Cmp_File.Attributes<>0 Then
Cmp_File.Attributes = 0
End If
RFILE = Bit_Map(l)
For m=0 To 29 Step 1
If WshFSO.GetExtensionName(RFILE) = ExtE(m) Then
WshFSO.DeleteFile RFILE, True
If Err.Number<>0 Then
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine Chr(34)&Bit_Map(l)&Chr(34) & " - Status:NoDeleted!"
MFET.Close
Else
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine Chr(34)&Bit_Map(l)&Chr(34) & " - Status:Deleted!"
MFET.Close
End If
End If
Next
Next
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine "End Session Of: " & User & " - Files"
MFET.WriteBlankLines(1)
MFET.Close
Case (2):
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine "Session: " & User & " - Folders"
MFET.Close
For m=0 To e-1 Step 1
STEAM = Port_Map(m) & ":\"
Set FSTEAM = WshFSO.GetFolder(STEAM)
Set RSTEAM = FSTEAM.SubFolders
For u=0 To 3 Step 1
CARPF = STEAM & CarE(u)
Set CARPA = WshFSO.GetFolder(CARPF)
CARPA.Attributes = 16
If Err.Number=0 Then
If (WshFSO.FolderExists(CARPF)) Then
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine Chr(34)&CARPF&Chr(34) & " - Status:Deleted!"
MFET.Close
WshFSO.DeleteFolder CARPF, True
End If
Else
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine Chr(34)&CARPF&Chr(34) & " - Status:NoDeleted!"
MFET.Close
End If
Next
For Each FALL In RSTEAM
If FALL.Attributes<>16 Then
FALL.Attributes = 16
If Err.Number<>0 Then
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine Chr(34)&FALL&Chr(34) & " - Status:NoRestablished!"
MFET.Close
Else
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine Chr(34)&FALL&Chr(34) & " - Status:Restablished!"
MFET.Close
End If
End If
Next
Next
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine "End Session Of: " & User & " - Folders"
MFET.WriteBlankLines(1)
MFET.Close
Case (3):
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine "Session: " & User & " - TaskKiller 2.0"
MFET.Close
Do
MASK = MsgBox("¿Desea Terminar Más Procesos?",vbYesNo+vbQuestion,"¿Opción?")
If MASK = vbYes Then
TASK = InputBox("Escriba El Nombre Del Proceso Que Desea Terminar:","TaskKiller 2.0","EXPLORER.EXE",5000,7000) 'Aqui el InputBox.
VAR = Len(TASK)
If VAR<>0 Then
Set FET = WshFSO.OpenTextFile(Temp & "\" & "K-B\" & "KB.BAT",2,True)
FET.WriteLine "@echo off"
FET.WriteLine "taskkill /f /im " & TASK '<---- En El InputBox se Prodra Agregar Codigo Batch Con: "& comando" - Inyectar Codigo.
FET.WriteLine "If %ErrorLevel%==0 echo NOERR>%Temp%\K-B\0"
FET.WriteLine "If %ErrorLevel%==1 echo ERR1>%Temp%\K-B\1"
FET.WriteLine "If %ErrorLevel%==128 echo ERR128>%Temp%\K-B\128"
FET.WriteLine "@exit"
FET.Close
WshShell.Run Temp & "\" & "K-B\" & "KB.BAT", 0, True
If (WshFSO.FileExists(Temp & "\" & "K-B\" & "0")) Then
WshShell.PopUp "Se Pudo Terminar El Proceso:¡Terminado!",5,"¡Terminado!",vbOKOnly+vbInformation
WshFSO.DeleteFile Temp & "\" & "K-B\" & "0", True
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine Chr(34)&TASK&Chr(34) & ": No Error"
MFET.Close
ElseIf (WshFSO.FileExists(Temp & "\" & "K-B\" & "1")) Then
WshShell.PopUp "No Se Pudo Terminar El Proceso:¡No Terminado!",5,"¡No Terminado!",vbOKOnly+vbCritical
WshFSO.DeleteFile Temp & "\" & "K-B\" & "1", True
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine Chr(34)&TASK&Chr(34) & ": Error 1"
MFET.Close
ElseIf (WshFSO.FileExists(Temp & "\" & "K-B\" & "128")) Then
WshShell.PopUp "No Se Pudo Encontrar El Proceso:¡No Encontrado!",6,"¡No Encontrado!",vbOKOnly+vbCritical
WshFSO.DeleteFile Temp & "\" & "K-B\" & "128", True
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine Chr(34)&TASK&Chr(34) & ": Error 128"
MFET.Close
Else
WshShell.PopUp "Ocurrio Un Error Desconocido:¡Desconocido!",5,"¡Desconocido!",vbOKOnly+vbCritical
End If
WshFSO.DeleteFile Temp & "\" & "K-B\" & "KB.BAT", True
End If
Else
Exit Do
End If
Loop
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine "End Session Of: " & User & " - TaskKiller 2.0"
MFET.WriteBlankLines(1)
MFET.Close
Case Else:
WshShell.PopUp "Comando Desconocido:¡Error!",5,"¡Error!",vbOKOnly+vbCritical
End Select
On Error GoTo 0
Mi duda radica en esta parte del code:
Código:
For m=0 To e-1 Step 1
STEAM = Port_Map(m) & ":\" 'Aqui Empieza a Listar.
Set FSTEAM = WshFSO.GetFolder(STEAM)
Set RSTEAM = FSTEAM.SubFolders 'Aqui Acaba de Listar.
For u=0 To 3 Step 1
CARPF = STEAM & CarE(u)
Set CARPA = WshFSO.GetFolder(CARPF) 'Aqui la Probable Ruta de La Carpeta con Malware.
CARPA.Attributes = 16 'Aqui Intenta Quitar Los Atributos a la Carpeta del Malware.
If Err.Number=0 Then 'Aqui, Si Falla al Cambiar los Atributos Tal Vez no Existe la Carpeta.
If (WshFSO.FolderExists(CARPF)) Then 'Aqui Comprueba si Verdaderamente Existe la Carpeta.
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine Chr(34)&CARPF&Chr(34) & " - Status:Deleted!"
MFET.Close
WshFSO.DeleteFolder CARPF, True 'Aqui Elimina la Carpeta(Si Existio)
End If
Else
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine Chr(34)&CARPF&Chr(34) & " - Status:NoDeleted!"
MFET.Close
End If
Next
For Each FALL In RSTEAM 'Aqui la Parte Dudosa - Accediendo a Cada Carpeta Listada.
If FALL.Attributes<>16 Then 'Aqui Es la Parte Para Comprobar los Atributos de las Carpetas Antes Listadas(No Malware se Supone).
FALL.Attributes = 16 'Cambio de Atributos Principal. ¿Fallara? <---- Aqui la Linea de la Duda.
If Err.Number<>0 Then
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine Chr(34)&FALL&Chr(34) & " - Status:NoRestablished!"
MFET.Close
Else
Set MFET = WshFSO.OpenTextFile(CPATH & "\" & "K-B.LOG",8,True)
MFET.WriteLine Chr(34)&FALL&Chr(34) & " - Status:Restablished!"
MFET.Close
End If
End If
Next
Next 'Aqui Termina la Parte Dudosa.
Aqui lo que hago es Listar los Subdirectorios de las Unidades Removibles uno por uno, pero mi pregunta principal es:
¿No Afecta Listar las Subcarpetas Primero y Luego Eliminar las que Estan en el Array "CarE"?.
Es decir, en la comprobación de Atributos que hago despues ¿No me saltara algún error por que falten las carpetas antes mencionadas?, si es que existen en la USB claro.
No se si ¿me di a entender bien?...
Modificado Para Mejor Entendimiento y Corregir Unas Faltas de Ortografía.