Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Escribir en el propio ejecutable (https://www.clubdelphi.com/foros/showthread.php?t=73148)

Softweb 03-04-2011 18:02:38

Escribir en el propio ejecutable
 
Hola:

Estoy intentando escribir unos datos en el propio ejecutable en ejecución algo simple en el antiguo MS-2 pero complicado en windows ya que no permite abrirlo para escritura.

Se que se puede hacer porque lo e visto realizar por algunas aplicaciones.

Tenéis alguien alguna pista de por donde va el tema.


Gracias

oscarac 03-04-2011 18:21:11

podrias especificar un poco mas lo que pretendes hacer?

Softweb 03-04-2011 19:41:35

Lo que quiero es que desde una aplicación por ejemplo "Gestion.exe" que estoy ejecutando crear un procedimiento para poder escribir unos datos en el mismo ejecutable que esta en ejecución el "Gestion.exe".

E intentado dar la orden de cerrar el programa y en la linea siguiente grabar los datos, pero el comando de cierre cancela los siguientes.


Saludos.

oscarac 03-04-2011 19:51:20

y el objetivo de escribir datos en el ejecutable es para.......

Softweb 03-04-2011 20:32:10

Para modificar una estructura interna con los datos del cliente, algo como una protección


Saludos

Caral 03-04-2011 20:34:34

Hola
Me parece que lo que se pretende es que el programa 1 reciba uno o varios datos de otro programa y este los ejecute segun sea el criterio expuesto.
Saludos

Softweb 03-04-2011 20:37:37

No, lo que pretendo es que el Progama 1 "escriba" unos datos en el Progama 1, o sea en el mismo.

Saludos

Caral 03-04-2011 20:39:47

Hola
Y que los deje ahi, escritos.?....., osea, que cambie el contenido del codigo del EXE?.
Me parece que esto se llama inyección de codigo.
Nada facil.
Saludos

Softweb 03-04-2011 20:42:13

Exasto Caral es eso mismo, no había escuchado eso de "inyección de codigo", me puedes dar una pista de donde buscar algo de información



Saludos

Caral 03-04-2011 20:45:00

Hola
En alguna pagina de hackers..:D:D:D
Esos son los especialistas en eso.:)
Saludos

Softweb 03-04-2011 20:48:40

Si Carol pero a mi solo me hace falta es conseguir permiso de escritura en el y que los datos que voy a escribir no es en la parte de código, si no en la de datos.


Saludos

Caral 03-04-2011 20:53:27

Hola
No entiendo.
Con el permiso del Club, revisa aqui.
Saludos
PD: Si no os parece bien, borrad el enlace.

Casimiro Notevi 03-04-2011 21:20:09

Cita:

Empezado por Softweb (Mensaje 395679)
Si Carol pero a mi solo me hace falta es conseguir permiso de escritura en el y que los datos que voy a escribir no es en la parte de código, si no en la de datos.
Saludos

¿Y cómo diferencia en un ejecutable la parte de código y la de datos?
Seguramente lo que quieres modificar es algún texto, si es eso entonces sólo has de escribir en la posición que te interese.
Suponiendo que sea eso, pero debes explicar EXACTAMENTE qué quieres hacer, no podemos estar intentando adivinar lo que quieres hacer, no sé si es que no lo quieres decir, pero en ese caso es que no será muy legal, no?, en caso contrario, que sí sea legal, entonces simplemente explícalo lo más amplia y claramente posible.

ecfisa 03-04-2011 22:24:01

Hola Softweb.

El tema ya se ha tratado al menos una vez en este mismo foro: Como inyectar código directamente a un proceso externo.

Cita:

Para modificar una estructura interna con los datos del cliente, algo como una protección
Pero no entiendo el por qué valerte de un segundo ejecutable que modifique los datos del cliente...
Si realmente tu intención es proteger esos datos, te va a resultar mucho más sencillo cifrarlos y almacenarlos en el registro de windows o en un archivo desde el mismo programa.

Un saludo.

escafandra 03-04-2011 23:16:45

Según lo veo yo, no pretende inyectar código sino alterar el archivo.exe. La inyección trata de alterar el flujo de un programa en ejecución añadiendo código desde un proceso externo, pero no altera el archivo ejecutable original.

Si queremos alterar un ejecutable, lo mas sencillo es mediante otra aplicación.
El proceso sería:

1.- Programa principal encuentra datos para modificarse a sí mismo.
2.- Programa principal llama a programa secundario y le pasa los datos como parámetros, en un archivo.... Después se cierra.
3.- Programa secundario abre el archivo ejecutable del programa principal y realiza las modificaciones reescribiendo el exe. Después reabre al programa principal y muere.

El proceso puede realizarse también para modificar una dll del programa principal, en ese caso basta con descargarla y es el propio programa principal el que realiza los cambios para recarga después.

El problema está en realizar correctamente los cambios para no dejar inservible nuestra aplicación.


Saludos.

PD. Aquí aparece también tratado el tema de la inyección con un ejemplo interesante.

Softweb 03-04-2011 23:28:17

Hola a todos:

escafandra los has cogido perfectamente, se que lo puedo hacer desde un programa externo o dll, de hecho actualmente lo realizo con un pequeño programa de linea de comando que tengo guardado en el propio ejecutable como recurso, en el momento de escribir los datos guardo el programa en disco y lo ejecuto, este programa me cierra la aplicación, le escribe los datos, lanza de nuevo la aplicación y se auto borra.

Pero es un sistema poco limpio y chapucero y me gustaría hacerlo desde el mismo programa por que se que se puede realizar.

Sobre no equivocarme de datos no hay problema llevo años haciéndolo sin problema, de echo empece en MS-2 que era una maravilla pues permitía hacerlo sin problema, pero el windows condenado no me permite abrirlo para escritura.

Saludos

escafandra 03-04-2011 23:32:11

¿Y no te sirve el que sea tu programe el que llame al programa cambiador de forma automática?. El proceso si quieres se podría hacer al terminar, así no aparecen las incomodidades del cierre.

Saludos.

escafandra 03-04-2011 23:56:06

Añado también que lo que se puede modificar es una dll que use el programa, en este caso no es necesario el cierre, basta con una llamada a la API FreeLibrary , realizar os cambios en la dll y llamar a LoadLibrary

Para este método debemos estar seguros de que esa librería sólo la usamos nosotros.


Saludos.


La franja horaria es GMT +2. Ahora son las 09:07:47.

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