Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-10-2008
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
Saber si la aplicación fue ejecutada desde Delphi

saludos,

tengo una curiosidad, miren colegas, necesito detectar a través de códigos si mi aplicación fue ejecutada desde Windows o desde Delphi (despues de compilar), y si es posible cambiar este valor.

miles de gracias de antemano colegas.

saludos!
aeff!
Responder Con Cita
  #2  
Antiguo 31-10-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Bueno, se puede saber qué aplicación ha lanzado a otra (aplicaciones como TaskInfo te lo dicen), por lo tanto es seguro que se puede.
aquí puedes ver la diferencia:





En este caso una se laza desde el IDE y otra desde otra aplicación.

Lo que por ahora no se es como obtener esa info.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 31-10-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
> kernel32.dll
>> Process32First
>> Process32Next
>>> TProcessEntry32.th32ParentProcessID

PD; talvez puedas "renombrar" las clases y nombres de ventanas de Delphi.

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #4  
Antiguo 01-11-2008
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
colegas, no entiendo??? que me estan sugiriendo??

saludos!
aeff!
Responder Con Cita
  #5  
Antiguo 01-11-2008
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
a ver si capté algo, me sugieres que la cosa puede venir por "CreateToolhelp32Snapshot"??
Responder Con Cita
  #6  
Antiguo 01-11-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por aeff Ver Mensaje
a ver si capté algo, me sugieres que la cosa puede venir por "CreateToolhelp32Snapshot"??
Código Delphi [-]
uses TlHelp32;
 
//...
 
function GetParentPID(dwProcessId: Cardinal): Cardinal;
var
 ProcessEntry32: TProcessEntry32;
 hSnapshot: Cardinal;
begin
 Result := 0;
 hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 if hSnapshot <> INVALID_HANDLE_VALUE then
  begin
   if Process32First(hSnapshot, ProcessEntry32) then
    repeat
     if ProcessEntry32.th32ProcessID = dwProcessId then
      begin
       Result := ProcessEntry32.th32ParentProcessID;
       Break;
      end;
    until not Process32Next(hSnapshot, ProcessEntry32);
   CloseHandle(hSnapshot);
  end;
end;

Aunque ahora que lo pienso un poco mejor:

Código Delphi [-]
//...
 
function NtQueryInformationProcess(ProcessHandle, ProcessInformationClass: Cardinal; ProcessInformation: Pointer; ProcessInformationLength: Cardinal; ReturnLength: PCardinal): Cardinal; stdcall external 'ntdll';
 
function GetParentPID(dwProcessId: Cardinal): Cardinal;
var
 hProcess: Cardinal;
 ProcessBasicInformation: record
  ExitStatus, PebBaseAddress, AffinityMask, BasePriority, UniqueProcessId, InheritedFromUniqueProcessId: Cardinal;
 end;
begin
 Result := 0;
 hProcess := OpenProcess(PROCESS_QUERY_INFORMATION, False, dwProcessId);
 if hProcess <> 0 then
  begin
   if NtQueryInformationProcess(hProcess, 0, @ProcessBasicInformation, SizeOf(ProcessBasicInformation), nil) = 0 then
    Result := ProcessBasicInformation.InheritedFromUniqueProcessId;
   CloseHandle(hProcess);
  end;
end;

Para luego:

Código Delphi [-]
function GetProcessImageFileNameA(hProcess: Cardinal; lpImageFileName: PChar; nSize: Cardinal): Cardinal; stdcall external 'psapi';
 
procedure TForm1.Button1Click(Sender: TObject);
var
 dwProcessId, hProcess: Cardinal;
 FileName: array [1..MAX_PATH] of Char;
begin
 dwProcessId := GetParentPID(666);
 if dwProcessId <> 0 then
  begin
   hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_TERMINATE, False, dwProcessId);
   if hProcess <> 0 then
    begin
     GetProcessImageFileNameA(hProcess, @FileName, SizeOf(FileName));
     if LowerCase(ExtractFileName(PChar(@FileName))) = 'delphi32.exe' then
      TerminateProcess(hProcess, 0); // por ejemplo
     CloseHandle(hProcess);
    end;
  end;
end;

end.

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #7  
Antiguo 03-11-2008
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
diaaablos!!! eso está bello, habia hecho algo parecido pero esa API que usaste "GetProcessImageFileNameA" si que no tenia ni idea de que existia, muchas gracias, lo que habia hecho era listar los proceso con la API "CreateToolhelp32Snapshot" y luego buscar su proceso padre con el valor "th32ParentProcessID" del registro "TProcessEntry32", bueno, esta chévere este código, envio respuestas luego.

ahora, ¿se podrá cambiar ese parámetro?, es decir, se podrá de alguna forma cambiar esa información de proceso padre e hijo??

saludos!
espero que me entiendan!
muchas gracias, de veras, muchas gracias!!

aeff!
Responder Con Cita
  #8  
Antiguo 03-11-2008
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
ahh! ni tampoco sabia de la API "NtQueryInformationProcess",

saludos!
Responder Con Cita
  #9  
Antiguo 03-11-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por aeff Ver Mensaje
...¿se podrá cambiar ese parámetro?, es decir, se podrá de alguna forma cambiar esa información de proceso padre e hijo??...
Si el proceso ya existe y no hay la posibilidad de volverlo a correr; solo se me ocurre modificarlo a "bajo nivel".

Si no deseas que sepan que tu aplicación ejecutó un determinado proceso (por ende puedes ejecutarlo), te aconsejo revisar la API CreateProcessWithLogon.

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #10  
Antiguo 11-11-2008
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
se me ocurre algo:

el proceso puede ejecutarse, averiguar "de donde salió", y si no es del proceso "delphi32" entonces se me ocurre una idea, inyectarnos dentro del proceso "delphi32" y luego crear el proceso nuevamente, luego finalizar el primer proceso que no fue ejecutado por "delphi32".

¿que crees?, traigo este idea para ser debatida antes de someterme a algo, ¿piensas que pueda resultar?

muchas gracias nuevamente colega
saludos!

aeff!
Responder Con Cita
  #11  
Antiguo 11-11-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
aeff, me parece una idea aceptable, pero antes de darle mi voto me agradaría saber a qué componente o aplicacion deseas engañar, para ver si hay alguna alternativa optima.

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #12  
Antiguo 11-11-2008
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
diaaaaaaablos!!, acabo de confirmar que en este foro deben existir personas que programan desde que estaban formándose en el vientre de su madre,cHackAll, cómo sabías que mi intención era la de engañar unos componentes. Te cuento que se dicen llamar los AlphaControls, una vez obtuve una versión FULL pero ahora he perdido datos y solo encuentro una versión Trial v4.78 para Delphi 5 que conseguí antes, resulta que estos componentes emiten un mensaje antes de que se creen las ventanas de la aplicación enunciando su versión de prueba, esto es jodedor pero solo sale si la aplicación no ha sido ejecutada por el IDE de Delphi, por eso es que he tratado de hacer algo, ¿que crees?

muchas gracias de antemano colega,
saludos!
aeff!

Última edición por aeff fecha: 12-11-2008 a las 00:04:50.
Responder Con Cita
  #13  
Antiguo 12-11-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Ok, dame el enlace de la version que quieres "analizar" pues en una de las 60000 ocurrencias de Google yo encontre la v6
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #14  
Antiguo 12-11-2008
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
no tengo idea de cual enlace me hablas, por si acaso te diré que los conseguí en este sitio, tengo la versión 4.78 para Delphi 5, pero es trial, ¿que más te puedo decir?, no tengo acceso FULL a Internet y mucho menos a ese sitio, así que con eso te digo que tengo tirar con lo que tengo, esos componentes los obtuve una vez en un centro que me dieron la posibilidad de navegr y quise no desaprovechar el tiempo, ya ves,

muchas gracias de antemano colega!
saludos!
aeff!
Responder Con Cita
  #15  
Antiguo 12-11-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por aeff Ver Mensaje
...inyectarnos dentro del proceso "delphi32" y luego crear el proceso nuevamente, luego finalizar el primer proceso que no fue ejecutado por "delphi32".
(1º) No se si este hilo debería continuar por esos derroteros en estos foros.
(2º) Creo que para que eso funcionase, creo que el proceso delphi32 debería estar "vivo", y no se si eso es lo que quieres.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #16  
Antiguo 13-11-2008
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
de acuerdo, si no podemos continuar con este tema en estos foros no hay problemas, en realidad no pretendo dejar de respetar las normas de este foro, el proceso delphi32 en caso que esté en ejecución se puede hacer lo propuesto anterior mente, de lo contrario pienso en una idea un poco rustica: crear una proceso que registre las clases que contiene este proceso delphi32 originalmente y luego crear el otro proceso,
¿que creen?

saludos!
muchas gracias!
aeff!
Responder Con Cita
  #17  
Antiguo 13-11-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Si bueno, pero por qué estas tan seguro que funcionará de esta manera?, si yo crease un componente "trial" que reaccione tal y como describes, no solo revisaria el parent PID, sino tambien el "IsDebuggerPresent", un FindWindow(xXx....), una verificacion de objetos OLE-COM instanciados por el "ejecutor", etc,. etc.

Ahora dejame ver si entendi, lo que quieres es correr el Delphi "en segundo plano", inyectarle un codigo para que éste ejecute un programa que use el componente :P, luego finalizar el Delphi?

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
Respuesta



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
Aplicacion en Delphi 6 ejecutada por Internet canelita Internet 1 10-07-2008 16:29:07
Cómo cerrar otra aplicacion desde mi aplicacion en Delphi 7 Gaby123 API de Windows 5 04-01-2007 22:44:51
saber la ip de una URL (desde delphi) User_baja1 Internet 4 13-09-2005 12:30:53
¿Cómo puedo saber desde mi aplicación cuándo se abre por primera vez? nuri Varios 7 21-07-2005 14:07:51
Detectar aplicacion a ser ejecutada. anitra_cattivo API de Windows 7 05-11-2004 18:52:41


La franja horaria es GMT +2. Ahora son las 16:40:29.


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