Ir al contenido


Foto

Ejecutar un ejecutable solamente desde otro ejecutable


  • Por favor identifícate para responder
25 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 05 octubre 2010 - 01:09

Pues eso compañero, quiero hacer que un pequeño ejecutable sincronizado con sistema principal sólo pueda ser ejecutado desde la misma, me explico mi sistema se llama Principal.exe y tiene un modulo llamado modulo1.exe, que deseo hacer? pues al ejecutarse Modulo1.exe directamente no se pueda ejecutarse y se cierre pero que al ejecutarlo desde Principal.exe sí se pueda ejecutarse.

Saludos.
  • 0

#2 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 05 octubre 2010 - 01:14

Y porque no probar si la otra aplicación esta creada, de lo contrario terminar esta.


Saludos!
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 05 octubre 2010 - 01:17

Y porque no probar si la otra aplicación esta creada, de lo contrario terminar esta.


Saludos!


NO es lo que quiero, lo que pasa es que ese modulo puede ser ejecutado fuera de su lugar e incluso sacar beneifico sobre ella, quiero evitar que sea ejecutado directamente sino desde mi programa principal.

Saludos.
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 octubre 2010 - 01:19


Y porque no probar si la otra aplicación esta creada, de lo contrario terminar esta.


Saludos!


NO es lo que quiero, lo que pasa es que ese modulo puede ser ejecutado fuera de su lugar e incluso sacar beneifico sobre ella, quiero evitar que sea ejecutado directamente sino desde mi programa principal.

Saludos.


Pero, porque no la haces parte del ejecutable principal....

Salud OS
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 05 octubre 2010 - 01:21

Pero, porque no la haces parte del ejecutable principal....

Salud OS


Porque es un módulo, se comercializa por separado ;).

Saludos.
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 octubre 2010 - 01:23

Me has recordado mis tiempos de DOS cuando creaba ejecutables y los unia a un Menu, si los ejecutaba por fuera no corrian ya que les enviaba un parámetro por la linea de comandos.

Algo así:

Menu.exe
1. modulo1.exe par1 par2
2. modulo2.exe par1 par2

Salud OS

  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 octubre 2010 - 01:25


Pero, porque no la haces parte del ejecutable principal....

Salud OS


Porque es un módulo, se comercializa por separado ;).

Saludos.


Ah caray, pues lo que yo haría es generar una licencia donde diga que modulos puedes ejecutar, no veo de otra.

Salud OS
  • 0

#8 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 05 octubre 2010 - 01:28

Yo te decía algo como esto...



delphi
  1. program TuPrograma;
  2.  
  3. uses
  4.   Controls,
  5.   Forms,
  6.   .......................
  7.  
  8. {$R *.res}
  9.  
  10. var
  11.   h: HWND; // No estoy seguro si aqui se declara la variable de esta forma
  12.  
  13. begin
  14.   Application.Initialize;
  15.   h := FindWindow(nil, 'Título Ventana Principal');
  16.   if h <> 0 then
  17.     begin
  18.       Application.CreateForm(TTuFormulario, TuFormulario);
  19.       Application.Run;
  20.     end
  21.   else
  22.     begin
  23.       Application.Terminate;
  24.     end;
  25. end.




Algo asi...


Saludos!
  • 0

#9 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 05 octubre 2010 - 01:38

Buenas,

Podrías mirar de ejecutar esa aplicación pasándole un parámetro. Desde modulo1.exe compruebas ese parámetro y, si no es correcto, lo cierras.

También podrías usar un truco que hay en Trucomanía. Desde el principal escribes y desde el modulo lees. Si no hay nada escrito... cierras.

No se, son ideas :D

Nos leemos

  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 octubre 2010 - 03:48

Que recuerdos aquellos cuando me enteré que no era el único loco que usaba Delphi, trucomanía fué al primer foro que me suscribí, después a Programadores Delphi de México seguido de Club Delphi, Club Developers y  hasta el día de hoy con DelphiAccess.

Salud OS
  • 0

#11 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 05 octubre 2010 - 04:15

Pues se me ocurre que podrías comprobar cual es el ejecutable que llamo al tuyo.

Aqui hay un ejemplo para saber si tu ejecutable esta llamado desde el IDE de delphi, pero las funciones que ponene te pueden servir. Sobre todo  "GetParentProcessIDForNT"

http://groups.google...767c0461c1e80c3

Aunque creo que al final lo mejor va a ser el sistema de licencias :D


  • 0

#12 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 05 octubre 2010 - 06:09

Mirándolo de esa forma, mi idea fallaría en una posible suplantación del ejecutable principal, seguramente esto se solucione con el paso de algún parámetro como dice cadetill, o con la implementación de alguna dll.


Saludos!
  • 0

#13 vvalladolid

vvalladolid

    Advanced Member

  • Miembros
  • PipPipPip
  • 90 mensajes
  • LocationMéxico

Escrito 05 octubre 2010 - 06:32

Hola,

Estoy de acuerdo con cadetill y felipe.....

Ejecutandolo desde tu priemer exe y pasandole parámetros, donde el segundo exe los valide y si no son los que tu definiste termines la ejecución del programa.

Los o el parámetro que manejes solo tu lo sabes y está dentro de tus aplicaciones.
  • 0

#14 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 06 octubre 2010 - 02:49

Lo de los parámetros esta muy bien hasta que alguien te hace una aplicación como esta:



delphi
  1. program CmdSpy;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   Windows,
  7.   SysUtils;
  8.  
  9. var
  10.   i: Integer;
  11. begin
  12.   for i:= 0 to ParamCount do
  13.     Writeln(ParamStr(i));
  14.   Readln;
  15. end.



Y la coloca en vez de tu aplicación. Solo tiene que llamar el proceso desde la aplicación principal y ya conoce los parámetros "secretos".

PD: Yo nunca lo he hecho  :angel: ... tenia este código aquí por casualidad  :wink:

  • 0

#15 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 06 octubre 2010 - 03:35

Lo de los parámetros esta muy bien hasta que alguien te hace una aplicación como esta:



delphi
  1. program CmdSpy;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   Windows,
  7.   SysUtils;
  8.  
  9. var
  10.   i: Integer;
  11. begin
  12.   for i:= 0 to ParamCount do
  13.     Writeln(ParamStr(i));
  14.   Readln;
  15. end.



Y la coloca en vez de tu aplicación. Solo tiene que llamar el proceso desde la aplicación principal y ya conoce los parámetros "secretos".

PD: Yo nunca lo he hecho  :angel: ... tenia este código aquí por casualidad  :wink:


¿ Cuanta gente sabría hacer esto ?, ¿ y cuanta la haría ?.

En todo caso, a esta gente se lo puedes poner mucho más difícil aún : simplemente pasando dos parámetros. El primero será la fecha-hora actual y el segundo esa misma fecha-hora encriptada (usando un algoritmo cualquiera de clave privada). El módulo comprueba que la fecha-hora sea correcta (no sea que esten utilizando una fecha-hora anterior, para la que han capturado su encriptación) y comprueba que el segundo parámetro corresponda a su valor encriptado según nuestra clave privada. Solo una vez comprobado esto, ejecutará el módulo externo.

Saludos.
  • 0

#16 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 06 octubre 2010 - 04:57

Buenas,

Lo de los parámetros esta muy bien hasta que alguien te hace una aplicación como esta:


jejejeje, claro, nada es infalible, por eso se crakea el Delphi, el Windows, el AutoCAD,..... :D :p

También, para más seguridad, puedes hacer una combinación de las propuestas dadas. Controlar parámetros, encriptados, y el truco de Trucomanía y mirar si la otra app está en ejecución :)

No obstante, nada te asegura que alguien, con tiempo, ganas y conocimientos, se te salte la protección. Ya hemos dicho muchas veces que el nivel de protección tiene que ser proporcional a lo crítico que pueda ser la aplicación ;)

Nos leemos

  • 0

#17 vvalladolid

vvalladolid

    Advanced Member

  • Miembros
  • PipPipPip
  • 90 mensajes
  • LocationMéxico

Escrito 06 octubre 2010 - 07:38

Estoy de acuerdo, pero para evitar eso puedes realizar varias validaciones antes de enviar tus parametros.

Fecha, peso, crc, cualquier atributo de tu archivo ejecutable.

Si hay diferencia, pues no envías la ejecución.

Y más drastico, existe la ingenieria inversa.
  • 0

#18 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 06 octubre 2010 - 01:45


Lo de los parámetros esta muy bien hasta que alguien te hace una aplicación como esta:



delphi
  1. program CmdSpy;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   Windows,
  7.   SysUtils;
  8.  
  9. var
  10.   i: Integer;
  11. begin
  12.   for i:= 0 to ParamCount do
  13.     Writeln(ParamStr(i));
  14.   Readln;
  15. end.



Y la coloca en vez de tu aplicación. Solo tiene que llamar el proceso desde la aplicación principal y ya conoce los parámetros "secretos".

PD: Yo nunca lo he hecho  :angel: ... tenia este código aquí por casualidad  :wink:


¿ Cuanta gente sabría hacer esto ?, ¿ y cuanta la haría ?.

En todo caso, a esta gente se lo puedes poner mucho más difícil aún : simplemente pasando dos parámetros. El primero será la fecha-hora actual y el segundo esa misma fecha-hora encriptada (usando un algoritmo cualquiera de clave privada). El módulo comprueba que la fecha-hora sea correcta (no sea que esten utilizando una fecha-hora anterior, para la que han capturado su encriptación) y comprueba que el segundo parámetro corresponda a su valor encriptado según nuestra clave privada. Solo una vez comprobado esto, ejecutará el módulo externo.

Saludos.


Esta me parece la mejor solución, parámetros fecha-hora encriptados.
  • 0

#19 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 06 octubre 2010 - 02:15

Sigo pensando en el uso de licencias, muy útil incluso para activar por módulos tu sistema aún con todos los módulos instalados y beneficioso a la hora de activar cualquier módulo sin instalar nada, solo actualizando la licencia.

Salud OS
  • 0

#20 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 06 octubre 2010 - 03:36

Hola
Podra ser una chapuza de principiante pero para simples mortales pienso que es suficiente.
En este ejemplo si no es llamado del primer programa el segundo no arranca.
No uso variables ni claves ni nada de eso.
El unico que podria abrirlo y ver como se hace es Seoane, sin ofender a nadie.. :D :p
Pienso que aun sabiendo como se hace no podria correrse una vez que el primero se cierra.
A ver que opinais de lo hecho por un novato.
Saludos
PD: El codigo lo pongo luego, por ahora intentad abirlo. *-) :D
No: Aqui lo dejo para que lo despedacéis.. :D :D :D :p :p

Archivos adjuntos


  • 0




IP.Board spam blocked by CleanTalk.