elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Ayuda VBS, por favor!!!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda VBS, por favor!!!!  (Leído 4,629 veces)
matarcola2

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Ayuda VBS, por favor!!!!
« en: 7 Mayo 2012, 12:45 pm »

Hola a tod@s, por favor si alguien puede ayudarme a crear un VBS que compruebe regularmente si una aplicación de windows ha estado cierto tiempo inactiva (de procesador o peticiones de memoria) y entonces se cierre.

La razón es que la empresa en al que trabajo tenemos más usuarios que licencias para un programa de gestión, pero no todos los usuarios necesitan el programa abierto toda la jornada. Incluso algunos usuarios lo abren por la mañana, se sacan la información que necesita y lo minimizan y no lo vuelven a utilizar hasta pasadas unas horas, de esta manera impidien que otros usuarios puedan entrar.

La cuestión mi idea es implantar por GPO (o no) una tarea programada que ejecute un VBS regularmente que compruebe la inactividad del proceso (nombreprograma.exe) y si no se ha usado por ejemplo en xx minutos le haga un taskkill.

Muchas gracias a todos.


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.821



Ver Perfil
Re: Ayuda VBS, por favor!!!!
« Respuesta #1 en: 7 Mayo 2012, 13:19 pm »

Lo que pides no es tán fácil, Es un proceso, No un servicio, Desde el momento en que ejecutas el proceso, Este no marca un estado "Idle" de inactividad porque sigue abierto y con las dll's cargadas... O al menos por eso creo lo creo, No lo sé..

Con algo de esto te podría hacer una verificación:

- ¿Sabes que dll's carga el programa cuando está "activo", en uso? (No las que carga al abrir el programa, sino las que carga cuando "sacas información", Compruebalo.)
- ¿Al programa se le manda algún parámetro al usarlo? Por ejemplo, si tiene que abrir un archivo, etc...
- Si el nombre de la ventana del programa cambia entre el estado "en uso" e "inactivo", Entonces dime el nombre exacto del título de la ventana del programa cuando el programa no hace nada.
- ¿El programa se minimiza a la barra de tareas, o al área de notificación? ¿Si el programa se encuentra minimizado en cualquiera de los dos casos, significa al 100% que el usuario ya ha terminado su tarea y se podría terminar el proceso?

PD: Y supongo, que la solución también te sirve en un bat, no?.

Salu2.


« Última modificación: 7 Mayo 2012, 13:25 pm por EleKtro H@cker » En línea

matarcola2

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Ayuda VBS, por favor!!!!
« Respuesta #2 en: 7 Mayo 2012, 13:30 pm »

Hola.

Muchas gracias por tu respuesta.

La cuestión es que no controlo nada de dll´s, nombres de ventana, etc...

El programa se minimiza en la barra de tareas, pero eso no significa que ya se pueda cerrar, se tendría que cerrar al pasar 15 minutos, p.ej..

Despues de varios días buscando, en algún lado había visto un código en VBS que comprobaba los procesos de windows en ejecución y el consumo de recursos (procesador, memoria, etc...) pero no he sabido como adaptarlo a lo que yo quiero, pero eso he recurrido a este foro.

La cuestión es que si un usuario no ha utilizado el programa en 15-20 minutos es que no le ha hecho falta y podría haberlo utlizado otro usuario en su lugar.

Me da igual si es en VBS o un .bat.

Muchas gracias.
En línea

matarcola2

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Ayuda VBS, por favor!!!!
« Respuesta #3 en: 8 Mayo 2012, 10:26 am »

Hola a tod@s, por favor si alguien puede ayudarme a crear un VBS que compruebe regularmente si una aplicación (proceso en ejecución) de windows ha estado cierto tiempo inactiva (de procesador o peticiones de memoria) y en caso de haber estado inactiva xx minutos cerrar dicha aplicación.

La aplicación corre localmente en los equipos y consume licencia al estar abierta y conectarse al BDSERVER.

La razón es que la empresa en al que trabajo tenemos más usuarios que licencias (son caras) para un programa de gestión que utlizamos, pero no todos los usuarios necesitan el programa abierto toda la jornada. Incluso algunos usuarios lo abren por la mañana, se sacan la información que necesita y lo minimizan y no lo vuelven a utilizar hasta pasadas unas horas, de esta manera impidien que otros usuarios puedan entrar.

Mi idea sería distribuirlo por GPO (o no) como una tarea programada que ejecute un VBS regularmente que compruebe la inactividad del proceso (nombreprograma.exe) y si no se ha usado en ese equipo por ejemplo en xx minutos le haga un taskkill.

Hace algún tiempo, en algún lado había visto un código en VBS que comprobaba los procesos de windows en ejecución y el consumo de recursos (procesador, memoria, etc...) pero no he sabido como adaptarlo a lo que yo quiero, pero eso he recurrido a vosotros..

La cuestión es que si un usuario no ha utilizado el programa en 15-20 minutos es que no le ha hecho falta y podría haberlo utlizado otro usuario en su lugar.

Muchas gracias.

En línea

matarcola2

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Ayuda VBS, por favor!!!!
« Respuesta #4 en: 10 Mayo 2012, 08:22 am »

Hola, googleando me he encontrado estepost de Delphi:

Basicamente obtenemos el tiempo de CPU que lleva la aplicacion, esperamos unos milisegundos y volvemos a obtener el tiempo de CPU. La diferencia entre uno y otro nos permite el % de CPU que ha usado la aplicacion.

Código:
1.uses PsApi;
2.
3.function CPUTime(Path: String): Integer;
4.var
5.  Procesos: array[1..1024] of DWORD;
6.  Needed, i: DWORD;
7.  Process: THandle;
8.  ModName: array[0..MAX_PATH] of Char;
9.  CreationTime: FILETIME;
10.  ExitTime: FILETIME;
11.  KernelTime: FILETIME;
12.  UserTime: FILETIME;
13.  OldTime: int64;
14.begin
15.  Result:= 0;
16.  if EnumProcesses(@Procesos,SizeOf(Procesos),Needed) then
17.  begin
18.    for i:= 1 to (Needed div Sizeof(DWORD)) do
19.    begin
20.      Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
21.        FALSE,Procesos[i]);
22.      if Process <> 0 then
23.      begin
24.        if GetModuleFileNameEx(Process,0,ModName,SizeOf(ModName)-1)>0  then
25.        begin
26.          if StrIComp(ModName,PChar(Path)) = 0 then
27.          begin
28.            if GetProcessTimes(Process,CreationTime,ExitTime,KernelTime,UserTime) then
29.            begin
30.              OldTime:= int64(KernelTime) + int64(UserTime);
31.              Sleep(100);
32.              if GetProcessTimes(Process,CreationTime,ExitTime,KernelTime,UserTime) then
33.              begin
34.                Result:= (int64(KernelTime) + int64(UserTime) - OldTime) div 10000;
35.              end;
36.            end;
37.            // Solo usamos el primer proceso que encontramos
38.            break;
39.          end;
40.        end;
41.        CloseHandle(Process);
42.      end;
43.    end;
44.  end;
45.end;

Ejemplo de uso:

Código:
1.
2.ShowMessage(IntToStr(CPUTime('c:\windows\notepad.exe')));
3.

Si alguien supiese adaptarlo a un script que se ejecute desde una tarea programada pero en vez de mucho consumo de cpu en unos segundos controlase el poco consumo de cpu en determinado tiempo, ya lo tendríamos...
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.821



Ver Perfil
Re: Ayuda VBS, por favor!!!!
« Respuesta #5 en: 10 Mayo 2012, 12:24 pm »

Hola de nuevo,

El % De CPU no es lo mismo que el CPUTIME, Lo digo por el code de Delphi, Aunque puedes obtener el %CPU con esta operación:

TotalProcessRuntime / CpuTime / 100

EDITO: Y otra cosa, No te recomiendo nada que las comprobaciones se hagan cada X milisegundos... Por dios, ¿Quieres reventar el PC? xD, Deja segundos de margen.



No es exactamente lo que pides, Pero aquí tienes:

Código
  1. @Echo OFF
  2.  
  3. :: By Elektro H@cker
  4. ::
  5. :: Este code comprueba cuantos ciclos (Tiempo de CPU) se han utilizado desde el inicio del proceso. Si el ciclo de tiempo es superior al máximo permitido, Mata el proceso.
  6. :: PD: Hay un POSIBLE margen de error de tiempo de 10 segundos debido a que es el lapsus de tiempo (Delay) que tarda en actualizarse TASKLIST internamente.
  7. ::
  8. ::
  9. ::
  10. :: CONFIGURACIÓN
  11. ::
  12. :: Program=El nombre del proceso a comprobar.
  13. Set "Program=winamp.exe"
  14. :: MAX_CPU_Activity_Time=HORAS:MINUTOS:SEGUNDOS
  15. Set "Max_CPU_Activity_Time=00:10:00"
  16. :: Delay=El tiempo de espera entre comprobación, En segundos.
  17. Set "Delay=60"
  18. ::
  19. ::::::::::::::::::::::::::::::::::::::::::::::::
  20.  
  21. :Check
  22. Tasklist /FI "CPUTIME gt %Max_CPU_Activity_Time%" | Find /I "%PROGRAM%" 1>NUL
  23.  
  24. If %Errorlevel% EQU 0 (
  25. Taskkill /F /T /IM "%PROGRAM%" 1>NUL || Echo Error al intentar cerrar el proceso: %PROGRAM%...
  26. ) Else (
  27. Ping -n %DELAY% Localhost 1>NUL
  28. )
  29.  
  30. Goto :Check



También te puedo hacer la comprobación basada en el consumo de RAM:

Código
  1. @Echo OFF
  2.  
  3. :: By Elektro H@cker
  4. ::
  5. :: Este code comprueba la memoria que está usando un proceso. Si la memoria usada es inferior a la mínima memoria permitida, Mata el proceso.
  6. :: PD: Hay un POSIBLE margen de error de tiempo de 10 segundos debido a que es el lapsus de tiempo (Delay) que tarda en actualizarse TASKLIST internamente.
  7. ::
  8. ::
  9. ::
  10. :: CONFIGURACIÓN
  11. ::
  12. :: Program=El nombre del proceso a comprobar.
  13. Set "Program=winamp.exe"
  14. :: Minimum_Memory_Usage=El mínimo uso de memoria permitido, En kilobytes.
  15. Set "Minimum_Memory_Usage=10000"
  16. :: Delay=El tiempo de espera entre comprobación, En segundos.
  17. Set "Delay=60"
  18. ::
  19. ::::::::::::::::::::::::::::::::::::::::::::::::
  20.  
  21. :Check
  22. Tasklist /FI "MEMUSAGE lt %Minimum_Memory_Usage%" | Find /I "%PROGRAM%"
  23.  
  24. If %Errorlevel% EQU 0 (
  25. Taskkill /F /T /IM "%PROGRAM%" 1>NUL || Echo Error al intentar cerrar el proceso: %PROGRAM%...
  26. ) Else (
  27. Ping -n %DELAY% Localhost 1>NUL
  28. )
  29.  
  30. Goto :Check


También puedes comprobar todo esto y muchas más cosas que tasklist no permite, Usando "WMIC Process".

Salu2.
« Última modificación: 10 Mayo 2012, 13:27 pm por EleKtro H@cker » En línea

matarcola2

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Ayuda VBS, por favor!!!!
« Respuesta #6 en: 11 Mayo 2012, 08:08 am »

Muchas gracias Electro H@cker, hoy por la tarde tan pronto termine el curro lo probaré, eres un genio.
En línea

matarcola2

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Ayuda VBS, por favor!!!!
« Respuesta #7 en: 22 Mayo 2012, 18:45 pm »

Hola, lo siento pero no consigo que funcione...

Gracias de todas maneras.

Saludos:-)
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.821



Ver Perfil
Re: Ayuda VBS, por favor!!!!
« Respuesta #8 en: 22 Mayo 2012, 19:53 pm »

Hola, lo siento pero no consigo que funcione...

Gracias de todas maneras.

Saludos:-)

Ni siquiera te sirve el code que te puse del consumo de MB?

Salu2
En línea

matarcola2

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Ayuda VBS, por favor!!!!
« Respuesta #9 en: 23 Mayo 2012, 08:42 am »

Hola de nuevo.

Pues no, no me funciona ninguno de los dos, es como si no fuese capaz de ver la aplicacion que quiero monitorear, incluso he probado con mayusculas, minusculas, el primer caracter en mayuscula, etc....

Gracias de todas maneras.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
SOS:AYUDA POR FAVOR!!!
Juegos y Consolas
wennam 2 3,183 Último mensaje 5 Enero 2004, 04:01 am
por FeRmO
AYUDA -.- ahora no entro más en 4chan (tengo una duda, ayuda por favor)
Foro Libre
Draklit 6 8,764 Último mensaje 15 Octubre 2010, 03:14 am
por Draklit
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines