Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Temas relacionados > Debates
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-01-2007
Mrcl Mrcl is offline
Registrado
 
Registrado: dic 2006
Posts: 5
Poder: 0
Mrcl Va por buen camino
Evitar cerrar mi programa desde el administrador de tareas

Como evito que cierren mi programa desde el administrador de tareas de Windows
Responder Con Cita
  #2  
Antiguo 16-01-2007
sinalocarlos sinalocarlos is offline
Miembro
 
Registrado: sep 2006
Posts: 152
Poder: 18
sinalocarlos Va por buen camino
he tenido un deja vu:

aqui


me voy antes que vengan los agentes
Responder Con Cita
  #3  
Antiguo 16-01-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cualquier "truco" que utilices para impedir que cierren tu aplicación desde el administrador de tareas no impedirá que te lo cierren usando otro programa. No hay forma "legitima" de impedir que un usuario con derechos de administrador cierre un proceso (ojo, he dicho legitima). Y además no tendría sentido, el administrador tiene que poder hacer lo que le venga en gana, para eso es el administrador.

Por el contrario si lo que quieres es impedir que un usuario con una "cuenta limitada" cierre un proceso, la cosa cambia. Puedes hacer correr tu aplicación como un servicio, por ejemplo.
Responder Con Cita
  #4  
Antiguo 16-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hay procesos de Windows que ni como administrador se pueden quitar. ¿Cómo se hace eso?

// Saludos
Responder Con Cita
  #5  
Antiguo 16-01-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por roman
Hay procesos de Windows que ni como administrador se pueden quitar. ¿Cómo se hace eso?
¿Cuales?
Responder Con Cita
  #6  
Antiguo 16-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
winlogon, lsass, csrss...

Por cierto, el unlocker puede quitar el winlogon, aunque el resultado no es muy bonito

// Saludos
Responder Con Cita
  #7  
Antiguo 16-01-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Pensaba responderte que cualquier otro programa, puede cerrarlos, pero ya veo que lo has descubierto por ti solo. Aunque como también has descubierto el resultado suele ser catastrófico, pero eso es porque son críticos para el funcionamiento del sistema operativo, no es que windows se cierre por venganza .

La razón de que desde el administrador de tareas no se puedan cerrar es bastante mas simple de lo que parece, el administrador de tareas comprueba el nombre de la aplicación antes de intentar cerrarla y si el nombre coincide se niega a cerrarla. Si le pones a cualquier programa el nombre "lsass.exe" el administrador de tareas se negara a cerrarlo, haz la prueba.
Responder Con Cita
  #8  
Antiguo 16-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Esto que comentas ahora Seoane (y que ya ha salido a colación alguna vez en los Foros) parece una verdadera chapuza, ¿no? "Eppur se move"...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 16-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Te creo, lo que pasa es que ahora no encuentro un ejemplo: probé pero alguno me eché que se apago mi pc . Sin embargo, en los ejemplo que puse aparece el mensaje de: "Este proceso es crítico..." pero en ocasions he visto alguno que luego de unos segundos me dice que no tengo permiso y yo siempre uso cuenta de administrador (lo sé, está mal, muy mal, pero esa es otra cuestión ). Si encuentor uno, te digo.

Cita:
Empezado por seoane
el resultado suele ser catastrófico
Digamos que si alguien extraña las pantallas azules...

// Saludos
Responder Con Cita
  #10  
Antiguo 16-01-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por roman
Te creo, lo que pasa es que ahora no encuentro un ejemplo: probé pero alguno me eché que se apago mi pc
No sigas buscando, ya hice un par de pruebas sobre un equipo virtual, y con el "Proccess Explorer" de sysinternals, puedo cerrar el winlogon.exe, lsass.exe, alg.exe y csrss.exe, todos ellos con resultados "catastróficos" Pero el caso es que se pueden cerrar ....

Cita:
Esto que comentas ahora Seoane (y que ya ha salido a colación alguna vez en los Foros) parece una verdadera chapuza, ¿no? "Eppur se move"...
Chapuza y de las gordas, pero supongo que cuentan que un usuario avanzado dispondrá de herramientas de terceros, y que así los usuarios "normales" no se dedicaran a cerrar procesos a lo loco Nada descabellado, si no que se lo digan a un colega mio, que borro media carpeta de windows, y por única explicación solo decía "... pues mientras los borraba no me aviso, ni me dio ningún error ..."
Responder Con Cita
  #11  
Antiguo 02-03-2007
maikeloh maikeloh is offline
Miembro
 
Registrado: feb 2007
Ubicación: Cuba
Posts: 14
Poder: 0
maikeloh Va por buen camino
Question Una pregunta

Vi los hilos de seoane pero me pregunto si no habra una via mas elegante mediante código con la cual yo pueda indicarle al administrador de tareas que mi aplicacion es un proceso critico del sistema. Tal vez hacer algun hook a la API que controla el administrador de tareas (realmente no tengo muy claro como funciona eso, si me pueden indicar link con literatura lo agradeceria). El caso es que requiero urgentemente poder poner una aplicacion como proceso critico del sistema.
Salu2
Responder Con Cita
  #12  
Antiguo 02-03-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Curiosidades

MATAR PROCESOS.. casi todos...
Cita:
Este artículo artículo de Mark Russinovich (de SysInternals), que parece haber sorprendido -según se dice- al mismísimo vicepresidente de Sistemas Operativos de Microsoft nos enseña a ir quitando procesos de Windows hasta dejar sólo dos, eso sí, capando muchas funcionalidades.
Resulta interesante para los que desean optimizar su sistema al máximo:
ARTICULO
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #13  
Antiguo 02-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Logré dejar así al sistema:

http://img163.imageshack.us/my.php?image=procexpeh6.png

Ese proceso del "Drive Letter Access" que parece tener que ver con el acceso a la unidad grabadora de cds, fue imposible matarlo.

// Saludos
Responder Con Cita
  #14  
Antiguo 02-03-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Me pregunto Roman, como de funcional es el windows después de cerrar todos esos procesos. ¿Se puede trabajar con el? o solo sirve como anécdota
Responder Con Cita
  #15  
Antiguo 02-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Esteeee.... Pues, si no te importa tener que oprimir el botón de encendido tres segundos para poder apagar la computadora, y prescindir de superfluosidades como el portapapeles, ... en fin, al menos se puede navegar. Vaya, pues, una anécdota

Pero, ¿te has fijado en el proceso que comento? ¿Cómo hace para permanecer vivo?

// Saludos
Responder Con Cita
  #16  
Antiguo 02-03-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por roman
Pero, ¿te has fijado en el proceso que comento? ¿Cómo hace para permanecer vivo?
Pues no me había fijado, me quede en lo anecdótico de tu mensaje. Pero ahora que sacas de nuevo el tema, que mensaje te da cuando intentas cerrarlo, o no te da ninguna explicación, según creo en windows xp no hay procesos intocables (aparte de los citados), no así el windows vista que implementa unos procesos "intocables" pensados especialmente para el DRM.

Ahora que hablamos de DRM y procesos intocables, algunos rootkits interceptan la Api TerminateProcess, impidiendo así que los otros programas lo cierren. Sera esa la explicación en este caso, se estará defendiendo al mas puro estilo rootkit
Responder Con Cita
  #17  
Antiguo 02-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Je, je, pues sí, podría ser un rootkit, pero es proceso ya venía con la pc. No da ningún error, simplemente se queda ahí.

// Saludos
Responder Con Cita
  #18  
Antiguo 03-03-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Cita:
Empezado por roman
Hay procesos de Windows que ni como administrador se pueden quitar. ¿Cómo se hace eso?
// Saludos
Pues he visto un ejemplo de código, que primero: otorga a su propio proceso privilegios para debug.. (SeDebugPrivilege) y seguidamente lanza el TaskManager, heredando esos mismos privilegios, y hecho esto, mata todo lo que se le ponga por delante.
Está escrito en 'C', pero la técnica es genérica. P.e. seoane lo utiliza aquí. (EnablePrivilege).
Una vez obtenidos los privilegios, realiza un ShellExecute al TaskManager que hereda esos privilegios y a matar todo lo que se ponga por delante...
Las explicaciones están aquí (hay que mover la pantalla del navegador un poco hacia la derecha para verlo bien....)
Siguiendo con el asunto de evitar que se puede matar un proceso, aquí se describen unas técnicas usuales, pero el plato fuerte está aquí donde se describe una patente para realizar procesos seguros.
Quien le pone el cascabel al gato ?
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #19  
Antiguo 03-03-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Pese a lo dicho antes... al mi el procedimiento o no me funciona...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #20  
Antiguo 03-03-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Siguiendo lo comentado por ardilla, vamos a hacer un killer:
Código Delphi [-]
program Killer;

{$APPTYPE CONSOLE}

uses  Windows, Sysutils, Messages, Psapi;

function EnablePrivilege(PrivilegeName: PChar; Enable: Boolean): Boolean;
var
  Token: THandle;
  TokenPrivileges: TOKEN_PRIVILEGES;
  Luid: TLargeInteger;
begin
  Result:= FALSE;
  if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
    TOKEN_QUERY or TOKEN_READ, Token) then
    if LookupPrivilegeValue(nil,PrivilegeName,Luid) then
    begin
      TokenPrivileges.PrivilegeCount:= 1;
      TokenPrivileges.Privileges[0].Luid:= Luid;
      if Enable then
        TokenPrivileges.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED
      else
        TokenPrivileges.Privileges[0].Attributes:= 0;
      Result:=
        AdjustTokenPrivileges(Token,FALSE,TokenPrivileges,0,nil,PDWORD(nil)^);
      CloseHandle(Token);
    end;
end;

procedure Kill(Str: String; Inject: Boolean);
var
  Procesos: array[1..1024] of DWORD;
  Needed, i: DWORD;
  Process, Thread: THandle;
  ModName: Array[0..MAX_PATH] of Char;
  Respuesta: String;
begin
  Str:= Uppercase(Str);
  if EnablePrivilege('SeDebugPrivilege', TRUE) then
  begin
    if EnumProcesses(@Procesos, SizeOf(Procesos), Needed ) then
    begin
      for i:= 1 to (Needed div Sizeof(DWORD)) do
      begin
        Process := OpenProcess(PROCESS_ALL_ACCESS, FALSE,Procesos[i]);
        if Process <> 0 then
        begin
          if GetModuleFileNameEx(Process,0,ModName,SizeOf(ModName)-1) > 0  then
          begin
            StrUpper(ModName);
            if StrPos(ModName,PChar(Str)) <> nil then
            begin
              Write(String(ModName) + ' Lo mato? [No]');
              Readln(Respuesta);
              if SameText(Respuesta,'Si') or SameText(Respuesta,'S') then
              begin
                if Inject then
                begin
                  Thread:= CreateRemoteThread(Process, nil, 0,
                    GetProcAddress(GetModuleHandle('Kernel32'),'ExitProcess'),
                    nil, 0, PDWORD(nil)^);
                  if Thread <> 0 then
                  begin
                    WaitForSingleObject(Thread,INFINITE );
                    CloseHandle(Thread);
                  end;
                end else
                  TerminateProcess(Process,0);
              end;
            end;
          end;
          CloseHandle(Process);
        end;
      end;
    end;
    EnablePrivilege('SeDebugPrivilege', FALSE);
  end;
end;

begin
  Writeln;
  if ParamCount = 1 then
    Kill(ParamStr(1), FALSE)
  else
    if (ParamCount = 2) and (SameText(ParamStr(1),'-i') or
      SameText(ParamStr(1),'/i')) then
      Kill(ParamStr(2), TRUE);
end.
Lo primero es elevarnos nuestro privilegios para que nadie se nos resista. A partir de ahí tenemos dos métodos de matar. Uno es utilizar la función TerminateProcess con el handle del proceso y el otro es matar desde dentro, ejecutando de forma remota la función ExitProcess dentro de nuestra víctima.

Bueno, aquí os lo dejo como curiosidad
Código:
// Modo de empleo

// Matar el notepad
Killer notepad.exe

// Matar el notepad desde dentro (/i tiene que ser el primer parámetro)
Killer /i notepad.exe
Archivos Adjuntos
Tipo de Archivo: zip Killer.zip (3,5 KB, 65 visitas)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Administrador de tareas Iskariote0087 API de Windows 7 31-12-2006 21:26:36
Evitar cerrar un formulario desde un componente genius Varios 1 23-11-2006 16:55:42
Administrador de tareas - recuento de indentificadores mole API de Windows 2 25-08-2006 10:41:52
Activar Administrador de Tareas CARSOFT_AR Varios 4 23-11-2005 21:12:58
Cerrar mi programa desde otro Sr_Sombrero API de Windows 2 02-12-2004 23:12:09


La franja horaria es GMT +2. Ahora son las 13:41:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi