opcion batch o vbs en sustitucion de schtasks.

Iniciado por guajolote_vengador, 21 Marzo 2012, 09:22 AM

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

guajolote_vengador

Saludos nuevamente, pues bien yo y mis dudas pero como dicen el que no pregunta se queda con la duda.

Estuve leyendo todos los comandos y opciones del schtasks (programador de tareas) y al parecer no tiene solución al problema que tengo, lo que necesito es que se inicie una tarea en determinada fecha, pero el problema es que si el equipo no esta encendido ovbiamente no se ejecutara, según la documentación del schtasks no es posible ejecutar la tarea que se programa para una sola vez si la fecha se pasa, es decir si la programe para un dia 15 mayo del año en curso y en ese día el equipo esta apagado, la tarea ya no se ejecutara al siguiente dia, entonces lo que pregunto existe algún code bach o vbs que tome la fecha y quizás también la hora del equipo y ejecute ciertos comandos en y después de la fecha establecida, obviamente sé que primeramente tendría que poner ese script en digamos en una tarea programada a diario o en el inicio o registro de Windows, esto suponiendo que en el script exista una opción de digamos suponiendo:

If exist "en y despues de la fecha" (goto end) else (goto tarea)

:end
exit

:tarea
comando1
comando2
etc...

Esto lo supongo solamente como un ejemplo demostrativo a lo que me refiero.

Saludos nuevamente y si estoy equivocado en lo que no se puede hacer en el programador de tareas avísenme y si es posible podrían dejar un ejemplo, o también otra alternativa.
Gracias.


Eleкtro

Tu idea es buena, Si que se puede hacer.

Imaginemos que la tarea tiene la fecha programada para ejecutarse el día de mañana (22/03/2012)

Lo que puedes hacer es primero agregar a la tarea un comando (o una tarea nueva con la misma fecha y hora) para crear un archivo para identificar SI la taréa se ejecutó.

Y luego añadir una entrada de registro que compruebe al iniciar sesión si ese archivo existe, Y que haga lo siguiente:
Si existe, Elimina la entrada de registro.
Si no existe, Vuelve a ejecutar el bat que contiene el comando del schtasks pero cambiando la fecha para que se ejecute en el día actual.


- Task.bat

Código (dos) [Seleccionar]
@Echo off
Set Fecha=22/03/2012
If "%1" EQU "+1" (Set Fecha=%Date%)

SCHTASKS /Create /SC ONCE /TN "TAREA" /TR "[TU_TAREA] & cmd.exe /C fsutil file createnew C:\Task.tmp 1 && exit" /ST 01:00 /ET 23:50 /SD %Fecha% /F
Reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /V "TaskCheck" /D "CMD /C If exist C:\Task.tmp (Reg Delete \"HKCU\Software\Microsoft\Windows\CurrentVersion\Run\" /v \"TaskCheck\" /F) ELSE (Start /B C:\Task.bat +1) && Exit" /F
Exit


Espero que me hayas entendido bien :P

Salu2








-- KiLiaN --

A mi fsutil me pide privilegios para usarlo al usarlo fuera del script que has puesto  :huh:
CitarSCHTASKS /Create /SC ONCE /TN "TAREA" /TR "[TU_TAREA] & cmd.exe /C fsutil file createnew C:\Task.tmp 1 && exit" /ST 01:00 /ET 23:50 /SD %Fecha% /F
Reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /V "TaskCheck" /D "CMD /C If exist C:\Task.tmp (Reg Delete \"HKCU\Software\Microsoft\Windows\CurrentVersion\Run\" /v \"TaskCheck\" /F) ELSE (Start /B C:\Task.bat +1) && Exit" /F
Exit

Me he fijado que habres varias comillas y luego no las cierras, tiene algo que ver con el comando schtasks?
Entren al chat de elhacker.net
    
   

@kln13

Eleкtro

Cita de: -- KiLiaN -- en 21 Marzo 2012, 10:30 AM
Me he fijado que habres varias comillas y luego no las cierras, tiene algo que ver con el comando schtasks?

Si las cierro, Lo que pasa es que el símbolo para scapar usando el comando reg es este: \

Cita de: -- KiLiaN -- en 21 Marzo 2012, 10:30 AM
A mi fsutil me pide privilegios para usarlo al usarlo fuera del script que has puesto  :huh:

Bueno FSUtil lo puse para que quedase más profesional pero entonces usen el típico "Echo+ >Archivo.txt" xD

Salu2








guajolote_vengador

Gracias por seguir orientándome, probé tu code pero el primer error es que me indica que "/ET"  no es un argumento valido, después de quitarlo me salió otro error, que "F" tampoco es un argumento valido, después de quitarlo me tiro otro error, que el formato de la hora no era el adecuado, después de arreglarlo se agregó la tarea, pero obviamente me pidió el pass del usuario, bueno a pesar de que la tarea se agregó y que en ningún momento vi que se generara el archivo C:\Task.tmp ya sea en la fecha especifica o antes de ella y aparte no se ejecuta nada, anexo algunas imágenes de lo que se agregó en la tarea programada y las modificación que puse, mas bien los errores que quite:

@Echo off
Set Fecha=23/03/2012
If "%1" EQU "+1" (Set Fecha=%Date%)

SCHTASKS /Create /SC ONCE /TN "TAREA" /TR "[cmd.exe] & cmd.exe /C fsutil file createnew C:\Task.tmp 1 && exit" /ST 01:00 /SD %Fecha%
Reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /V "TaskCheck" /D "CMD /C If exist C:\Task.tmp (Reg Delete \"HKCU\Software\Microsoft\Windows\CurrentVersion\Run\" /v \"TaskCheck\" /F) ELSE (Start /B C:\Task.bat +1) && Exit" /F
Exit


Lo que probé aquí era que se abriera un ventana del cmd, espero no haber estado equivocado.

Y aqui las pics de lo que se agrego:






Saludos y espero se pueda solucionar.



Eleкtro

El problema está en la sintaxis del SCHTASKS.

El comando del SCHTASKS te lo puse como ejemplo para que agregases tu taréa Aquí: [cmd.exe]

Tienes que remplazar esa parte por tu taréa... y añadirle el resto de comandos...

Nunca llegaste a comentar cual es la taréa que intentas añadir, Pero te pongo un ejemplo:

Código (dos) [Seleccionar]
SCHTASKS /Create /SC ONCE /TN "TITULO DE LA TAREA" /TR "Notepad.exe && cmd.exe /C fsutil file createnew C:\Task.tmp 1 && exit" /ST 01:00 /SD %Fecha%

Salu2.








guajolote_vengador

#6
Es extraño pero no puedo ver tu ejemplo solo veo la barra de horizontales, y para ser mas explicito la tarea a ejecutar es un script vbe, y por lo que me dices tengo que poner la accion en la parte donde puse lo del [cmd.exe], digamos que quedaria asi:

@Echo off
Set Fecha=23/03/2012
If "%1" EQU "+1" (Set Fecha=%Date%)

SCHTASKS /Create /SC ONCE /TN "Test" /TR "[C:\temp\tarea.vbe] & cmd.exe /C fsutil file createnew C:\Task.tmp 1 && exit" /ST 01:00 /SD %Fecha%
Reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /V "TaskCheck" /D "CMD /C If exist C:\Task.tmp (Reg Delete \"HKCU\Software\Microsoft\Windows\CurrentVersion\Run\" /v \"TaskCheck\" /F) ELSE (Start /B C:\Task.bat +1) && Exit" /F
Exit


En este momento no lo puedo probar pues estoy publicando desde un movil, pero encuanto este en mi PC lo aplico y despues cuento, de cualquier forma si cometi algun error en el code anterior me podrias indicar en donde, puesto que no puedo visualizar tu ejemplo.

Por cierto este bat o cmd tambien lo ejecutaria desde un vbs en modo "hide" o "0".

Eleкtro

Lo que intentaba explicarte es que no hagas caso de estos caracteres que puse [ ]

Quedaría así:
SCHTASKS /Create /SC ONCE /TN "Test" /TR "wscript C:\temp\tarea.vbs & cmd /C fsutil file createnew C:\Task.tmp 1 && exit" /ST 01:00 /SD %Fecha%

Salu2








guajolote_vengador

#8
Lo probe como lo describes, y la tarea es agregada, aquí el code como lo use con fecha de un dia despues, ósea que el bat setea la fecha del 24/03/2012 y la fecha real es 25/03/2012:

@Echo off
Set Fecha=24/03/2012
If "%1" EQU "+1" (Set Fecha=%Date%)
SCHTASKS /Create /SC ONCE /TN "Test" /RU Root /RP 0123 /TR "C:\temp\wait_10seg.cmd & cmd /C fsutil file createnew C:\Task.tmp 1 && exit" /ST 01:13:00 /SD %Fecha%
Reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /V "TaskCheck" /D "CMD /C If exist C:\Task.tmp (Reg Delete \"HKCU\Software\Microsoft\Windows\CurrentVersion\Run\" /v \"TaskCheck\" /F) ELSE (Start /B C:\Task.bat +1) && Exit" /F
Exit


y todo se agrega, pero no estoy seguro de que se ejecute pues la tarea me marca que se ejecutara el 24/03/2012, y por supuesto la fecha ya se paso, también lo he ejecutado seteando la fecha antes y en la fecha, pero cada que genera la tarea la crea con la fecha de ejecución del seteo del bat.

Ahora cuando se ejecuta la tarea del registro me indica que no se encuentra "C:\Task.bat" y en la línea de ejecución de la tarea me sigue creando toda la línea como se mostraba en la imagen anterior.

ejecutar: cmd /c C:\temp\wait_10seg.cmd & cmd /C fsutil file createnew C:\Task.tmp 1 && exit

Y bueno solo te pido un poco de paciencia ya que a veces soy algo despistado, además he encontrado la forma de hacer lo que quería, con solo agregar una tarea diaria con una fecha de inicio y dentro de la tarea agregar que se elimine la tarea misma para que solo se ejecute una vez. Pero aun así quisiera terminar con esto, yo soy de las personas que no les gusta dejar cosas sin terminar aunque se encuentre otra solución.

Aquí la tarea en un vbs, esto incluye la creación de un usuario con privilegios de Admin y su respectivo pass en modo oculto con la add del registro, ya que de lo contario la tarea no se ejecutara si el ususario no tiene un pass y todo en modo oculto:

createobject("wscript.shell").run "cmd /c net user Root 0123 /add | net localgroup Administradores Root /add | reg ADD ""HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList"" /v Root /t REG_DWORD /d 0 /f | Schtasks /create /tn UPS /sd 26/04/2012 /sc daily /st 13:13:00 /tr C:\temp\tasks.vbe /RU Root /RP 0123",0

Todavía soy muy nob pero creo que hay la llevo saludos y espero tu opinión.

PD. También ando en el uso de lo troyanos backdoor pero hasta la fecha no he podido hacer que alguno funcione, lo e intentado con el poison_ivy 2.0 y el DarkCometRAT5.1, este ultimo el mas reciente pero aun así no me conecta el servidor y eso que ya cree mi cuenta en no-ip y sigo todos los pasos, en fin puedo llevar el tema también aquí o abro otro con el titulo y en el tema correspondiente.

Saludos nuevamente.





Eleкtro

 - Para la fecha, puedes usar este code que devuelve la fecha de mañana:

PD: No lo hice yo.

Código (dos) [Seleccionar]

@echo off

set /a d=%date:~0,2%
set /a m=%date:~3,2%
set /a y=%date:~6,4%

:loop
   set /a d+=1

   if %d% gtr 31 (
      set d=1
      set /a m+=1
     
      if %m% gtr 12 (
         set m=1
         set /a y+=1
      )
   )

Echo %m:~0,1%| Findstr "[1]" >NUL
If not %errorlevel% equ 0 (set m=0%m%)
Set "Fecha=%d%/%m%/%y%"
echo %Fecha%

Exit





- Sobre la tarea, No puedo probar los ejemplos que te voy dando para comprobar donde está el fallo, porque tengo esa característica "capada" en windows, Lo siento  :-\, Pero estoy casi seguro que el problema es que no inicias la instancia de la cmd (al principio), prueba así:

Código (dos) [Seleccionar]
SCHTASKS /Create /SC ONCE /TN "Test" /RU Root /RP 0123 /TR "cmd /C start /W C:\temp\wait_10seg.cmd & fsutil file createnew C:\Task.tmp 1 & exit" /ST 01:13:00 /SD %Fecha%

PD: Asegurate de que en el primer .CMD finalizas el script con la linea del comando "EXIT".
PD2: Si necesitas escribir una ruta con espacios en SCHTAKS, hay que escapar las comillas dobles de esta manera:

Código (dos) [Seleccionar]
/tr "cmd /C start /W \"C:\carpeta con espacios\wait_10seg.cmd\" & fsutil file createnew \"C:\carpeta con espacios\Task.tmp\" 1 & exit"




- Sobre lo de troyanos y puertas traseras también podría intentar ayudarte pero no es un tema relacionado con el scripting :P
   (Que raro, El Darkcomet abre los puertos necesarios automáticamente... O al menos eso promete xD)
   Prueba con tus dudas en el subforo de "dudas generales", o "Análisis y Diseño de Malware (Antes llamado Troyanos y Virus)"


Ya nos contarás si te sirvieron los codes...

Salu2.