BAT&VBS:Codigo Dudoso

Iniciado por Leminy, 12 Septiembre 2011, 07:57 AM

0 Miembros y 1 Visitante están viendo este tema.

Leminy

Bien, pues para empezar quisiera agradecer de antemano a quien pueda ayudarme con mi poblema.
-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:


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:


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.  ;D

S3kh

 Mi recomendación es que identés el código, así sería mas fácil la corrección. Por otro lado, podrías volver a explicar un poco mas claro? jeje. Lo que logré entender es que vos querés saber si, una vez eliminados X directorios, si intentás cambiar los atributos te va a dar error o no, eso entendí yo. Y la respuesta a ESO sería que me imagino que si, te daría error supongo, estilo "No se encuentra la ruta especificada". Disculpá si no entendí bien lo que preguntabas :P

PD: Si podrías documentar mas el código estaría bien, porque con un poquito de documentación y prolijidad se puede entender mucho mejor el código a pesar de que uno no conozca VBs, se puede entender igual; no te digo que todas las líneas, pero aunque sea en líneas generales.

Leminy

Bien Compaero S3kh, lo que piensas del code es correcto, primero intentar eliminar algunas carpetas dependiendo el nombre y luego intentar cambiar los atributos del Listado del Carpetas que hice Antes,.... Pero lo que en si quiero saber es, si me tiraria algun error en el cambio principal de atributos, justo aqui:


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.


Y si, voy a Intentar "Documentar" cada parte del code para un mejor entendimiento, ya que: "La información es libre" ¿no?... y por cierto, gracias por responder tan rapido.;D

S3kh

 Por lo que puedo entender, FALL sería cada subdirectorio listado, no? Y si intentás cambiar los atributos de dichos subdirectorios, no tiraría ningún error. (Siempre y cuando los directorios existan).

De nuevo, disculpá si otra vez volví a entender mal :P


Leminy

#4
De nuevo S3kh estas en lo correcto, pero aun asi queda la duda, voy a intentar explicarlo por Bloques:

-Lista Cada Subdirectorio Dentro de la Unidad Extraible.
.....................................
.....................................
-Intento Cambiar los Atributos
De las Posibles Carpetas de Malware.
Nota: Si Hubo Error Al Cambiar Los Atributos
Significa que Tal Vez la Carpeta No Existe Y
Se Salta la Vefificación Final.
.....................................
-Si No Hubo Error Cambia Los Atributos
Significa que, Si Existe la Carpeta Va a La Verificación
Final(Lineas de Abajo.)
.....................................
-Verifico Si Enrealidad Existe Alguna
De Esas Carpetas de Malware.
.....................................
.....................................
-Si Existe La Elimina y Escribe en Un Archivo LOG.
Si No Existe Solo Sale de La Comprobación.
.....................................
.....................................
-Y Aca Restablece Los Atributos de las Demas Carpetas
(No Malware se Supone).
Como Ya Se Han Listado Las Subcarpetas Y... Si Existieron
Posibles Carpetas de Malware las Elimina, Despues, ¿No Afectara
En El: "For Each FALL In RSTEAM" si Faltan las Carpetas Que Pudo Eliminar el Programa?

-Perdon Si No Entiendo Bien Los Metodos Que Se Usan en La Propiedad, Ejemplo:

STEAM = "E:\"
Set FSTEAM = WshFSO.GetFolder(STEAM)
Set RSTEAM = FSTEAM.SubFolders <--- Esta Es la Propiedad.

S3kh

 Si, lo afectará, porque fueron eliminadas. jeje. Por otro lado, lo de los métodos no los recuerdo, ya hace mucho (mas de 3 años) que no hago nada en VBS. Buscá sobre métodos y atributos. Si mal no recuerdo, los objetos forman parte del COM (Common Object Model) de Windows, y me figuro que debe haber algún tipo de documentación respecto a eso.

Acá tenés algo acerca de el método SubFolder:
http://www.psicofxp.com/forums/programacion.313/633216-vbs-listar-ficheros-carpetas-y-subcarpetas.html

http://www.vbforums.com/showthread.php?t=244880 (Este es VB pero los objetos y métodos que se usan son los mismos)

Te ayudaría mas respecto a eso, pero estoy oxidado y no recuerdo mucho.

Leminy

Bueno Pues... Gracias de Nuevo S3kh, Ahora Por La Información... Con Los Links Que Me Proporcionaste y Googleando Un Rato... No Pude Hayar Mucho Sobre Ese Metodo y Sus Propiedades.... Pero Aun Asi, Se Agradece la Ayuda...  ::)

S3kh

jeje, no hay drama. No encontré mucho mas que eso, supongo que algo se puede hacer jejeje. Probá el script, y de última mandame mensaje privado, si necesitás probarlo o algo avisá (Y) Abrazo, suerte

Leminy

#8
Esta Bien, En Estos Dias Hare Prubas con BreakPoints y Demas para Saber si Me Afectaria o No, Lo que He Venido Comentando desde Hace unos Dias... Gracias por Todo S3kh y Cuidate También...;D

Moderador.... ¿Ya Puedes Dar El Tema Como Cerrado?....

Por Cierto El Fin De Semana Hare la Documentación del Code, A Quien Le Interese...  ::)

S3kh

 Haceme saber cuándo la tengas jejej De nada Leminy, un gusto n.n!