Club Delphi  
    Paypal   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
sinalocarlos sinalocarlos is offline
Miembro
 
Registrado: sep 2006
Posts: 152
Poder: 20
sinalocarlos Va por buen camino
he tenido un deja vu:

aqui


me voy antes que vengan los agentes
Responder Con Cita
  #2  
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: 26
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
  #3  
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
  #4  
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: 26
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
  #5  
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
  #6  
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: 26
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
  #7  
Antiguo 16-01-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Poder: 36
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
  #8  
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
  #9  
Antiguo 02-03-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 24
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
  #10  
Antiguo 03-03-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 24
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
  #11  
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: 26
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
  #12  
Antiguo 03-03-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 24
ArdiIIa Va por buen camino
He visto por ahí que lo habitual en estos casos es abrir el proceso con: OpenProcess PROCESS_TERMINATE
Aquí hay un ejemplo pero sin utilización de privilegios, y aquí hay otro que si los utiliza, pero como puedes ver ambos abren el proceso con PROCESS_TERMINATE
Por cierto seoane, has leído el tema de las patentes de procesos seguros... precisamente para evitar esto y otras muchas cosas ?
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
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 20:26:36
Evitar cerrar un formulario desde un componente genius Varios 1 23-11-2006 15:55:42
Administrador de tareas - recuento de indentificadores mole API de Windows 2 25-08-2006 09:41:52
Activar Administrador de Tareas CARSOFT_AR Varios 4 23-11-2005 20:12:58
Cerrar mi programa desde otro Sr_Sombrero API de Windows 2 02-12-2004 22:12:09


La franja horaria es GMT +2. Ahora son las 02:27:29.


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