Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
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 12-09-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Tienes una utilidad muy buena para sustituir al TaskManager, el Process Explorer v15.04 de Systernals que te informa de lo que buscas para localizar tu virus. Te dice también la ruta desde la que se ejecutó cada proceso con lo que localizas con facilidad al intruso.

Saludos.
Responder Con Cita
  #2  
Antiguo 12-09-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Releyendo me he dado cuenta de que el anterior código que publiqué contiene un error de princiapiante (las prisas). Localizo memoria pero no la libero...

Como no puedo editarlo, lo republico dejando la chapuza previa.
Código Delphi [-]
function GetUserAndDomainFromPID(ProcessId: DWORD; var User, Domain: String): boolean;
var
  hToken, hProcess, cbBuf, UserSize, DomainSize: Cardinal;
  pSidUser: ^SID_AND_ATTRIBUTES;
  SidNU: SID_NAME_USE;
begin
  Result:= false;
  EnablePrivilege('SeDebugPrivilege', true);
  hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION, false, ProcessId);
  if hProcess <> 0 then
  begin
    if OpenProcessToken(hProcess, TOKEN_QUERY, hToken) then
    begin
      GetTokenInformation(hToken, TokenUser, nil, 0, cbBuf);
      GetMem(pSidUser, cbBuf);
      GetTokenInformation(hToken, TokenUser, pSidUser, cbBuf, cbBuf);
      CloseHandle(hToken);
      UserSize:= 0;
      DomainSize:= 0;
      LookupAccountSid(nil, pSidUser.Sid, nil, UserSize, nil, DomainSize, SidNU);
      if (UserSize <> 0) or (DomainSize <> 0) then
      begin
        SetLength(User, UserSize);
        SetLength(Domain, DomainSize);
        Result:= LookupAccountSid(nil, pSidUser.Sid, PCHAR(User), UserSize, PCHAR(Domain), DomainSize, SidNU);
      end;
      FreeMem(pSidUser);
    end;
    CloseHandle(hProcess);
  end;
  EnablePrivilege('SeDebugPrivilege', false);
end;

Saludos.
Responder Con Cita
  #3  
Antiguo 12-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Sólo por curiosidad, ayer estuve probando una función que encontré buscando en la web, para obtener el dominio y nombre.
Pero aunque obtengo el dominio y nombre del usuario, me muestra cadena vacía cuando el nombre se trata de usuario es 'SYSTEM' o 'SERVICIO LOCAL'.

Agrego la prueba que hice, por si alguien sabe el por qué no muestra esos datos.
Código Delphi [-]
...
uses TlHelp32;

type
  TProcessEntry32Array = array of TProcessEntry32;
  
  PTokenUser = ^TTokenUser;
  TTokenUser = packed record
    User: SID_AND_ATTRIBUTES;
  end;

function GetProcess: TProcessEntry32Array;
var
  Found : Boolean;
  SnapHandle : THandle;
  pr32 : TProcessEntry32;
begin
  SnapHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  pr32.dwSize := Sizeof(ProcessEntry32);
  Found := Process32First(SnapHandle, pr32);
  while Found do
  begin
    SetLength(Result, Length(Result)+1);
    Result[Length(Result)-1] := pr32;
    Found := Process32Next(SnapHandle, pr32);
  end;
  CloseHandle(SnapHandle);
end;

{ Esta es la función que encontré }
function GetProcessUserName(ProcessID: Cardinal; out DomainName, UserName: string): Boolean;
var
  ProcHandle, ProcToken: THandle;
  InfoSize, UserNameSize, DomainNameSize: Cardinal;
  User: PTokenUser;
  Use: SID_NAME_USE;
  DomainNameArray, UserNameArray: array[0..255] of Char;
begin
  Result := False;
  DomainName := '';
  UserName := '';
  ProcHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessID);
  if ProcHandle = 0 then
    Exit;
  try
    if not OpenProcessToken(ProcHandle, TOKEN_QUERY, ProcToken) then
      Exit; 
    try
      GetTokenInformation(ProcToken, TokenUser, nil, 0, InfoSize);
      User := AllocMem(InfoSize * 2); 
      try
        if GetTokenInformation(ProcToken, TokenUser, User, InfoSize * 2, InfoSize) then
        begin 
          DomainNameSize := SizeOf(DomainNameArray);
          UserNameSize := SizeOf(UserNameArray);
          Result := LookupAccountSid(nil, User^.User.Sid, UserNameArray,
            UserNameSize, DomainNameArray, DomainNameSize, Use);
          if Result then
          begin 
            SetString(DomainName, DomainNameArray, StrLen(DomainNameArray));
            SetString(UserName, UserNameArray, StrLen(UserNameArray));
          end; 
        end; 
      finally
        FreeMem(User);
      end; 
    finally
      CloseHandle(ProcToken);
    end;
  finally
    CloseHandle(ProcHandle);
  end; 
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  ProcList: TProcessEntry32Array;
  Un,Dn: string; // nombre,dominio
begin
  ProcList := GetProcess;
  ListBox1.TabWidth:= 100;
  for i:=0 to Length(ProcList)-1 do
  begin
    GetProcessUserName(ProcList[i].th32ParentProcessID, Un, Dn);
    ListBox1.Items.Add(string(ProcList[i].szExeFile)+
       Chr(9)+ Un + Chr(9) + Dn);
  end;
end;
Algo se me esta escapando y no sé que es...

Un saludo.

Edito: La aplicación consta de un TButton y un TListBox solamente.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 12-09-2011 a las 17:48:09. Razón: Agregar aclaración
Responder Con Cita
  #4  
Antiguo 12-09-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
No he probado ese código, pero quizás se solucione dando privilegios debug a la aplicación.

Saludos.
Responder Con Cita
  #5  
Antiguo 12-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por escafandra Ver Mensaje
No he probado ese código, pero quizás se solucione dando privilegios debug a la aplicación.

Saludos.
Supongo entonces que habría que agregarle la función que pusiste más arriba (EnablePrivilege), ¿ No es así ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 12-09-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 18
fide_uci Va por buen camino
Bueno primero que todo muchas gracias a todas las personas que me han ayudado. Les digo que mi programa deberia ser capaz de leer el registro de windows en busca de una clave. Si dicha clave existe entonces deberia leer otra clave del registro y eliminar dichas claves asi como el virus que se guarda en %Windir%\svchost.exe

Para poder hacer todo esto yo necesitaba tumbarlo de la memoria ya que estaba en ejecucion. Es por ello que estuve pidiendo la informacion mencionada antes. A proposito el virus que menciono, al 6to reinicio de la PC despues de que el la infecta, te jode los discos duros poniendole ATA Password y dejandolo bloqueado, siendo imposible de desbloquear de forma comun.
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
¿No sabes Python? no hay problema... Chris Python 21 03-04-2011 06:41:51
Como sabes la IP del cliente con idTCPServer fide_uci Internet 1 13-11-2009 06:40:12
Si no sabes leer, éste es tu post... Gabo Humor 4 06-06-2008 00:15:27
20 cosas que no sabes sobre Google marcoszorrilla La Taberna 6 05-06-2008 20:30:35
¿Qué Tanto Sabes De La Vasectomía? gmontes Humor 4 10-12-2005 09:15:05


La franja horaria es GMT +2. Ahora son las 07:52:14.


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