Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cómo determinar el tamaño original de un archivo ejecutable (https://www.clubdelphi.com/foros/showthread.php?t=91537)

roman 02-03-2017 16:08:46

Estoy de broma. Además, sabía desde el principio que éste es un tema de la especialidad de él :)

Pero sí soy una cara bonita :D

LineComment Saludos

jhonny 02-03-2017 16:51:03

Que conste en el acta que yo al menos estuve leyendo y tenía mi cara así ->>> :cool:

dec 02-03-2017 18:03:03

Hola a todos,

Cita:

Empezado por jhonny (Mensaje 513913)
Que conste en el acta que yo al menos estuve leyendo y tenía mi cara así ->>> :cool:

Este es un tema interesante no porque lo iniciase un servidor de ustedes... pero porque está abriendo la puerta a hacer todo tipo de programas. No pocas "herramientas de autor" utilizan este tipo de técnicas. Se trata de que el ejecutable al que adjuntamos un determinado contenido, puede "interpretar" dicho contenido, y, a partir de ahí imagináos... por ejemplo, podríamos hacer un programa que sirva a los usuarios para programar de una forma muy sencilla, digamos que con prácticas "acciones visuales", generando completos ejecutables para Windows. Quiere decirse que nuestro ejecutable, por debajo, "intepreta" las acciones del usuario, llevándolas a cabo como se deba. Otro posible ejemplo: oye usuario,/cliente, con mi programa puedes elegir las imágenes que quieras, que, mi programa te las va a poner dentro de un ejecutable, que podrás enviar a quien quieras, y, que mostrará dichas imágenes con una presentación muy bonita, usando las opciones que tú mismo has determinado.

Esto es casi como contar con un "compilador", pero, lógicamente, sin la complejidad de un compilador... que es algo que se me escapa completamente.

escafandra 02-03-2017 23:25:18

En realidad mi ayuda no es para tanto, un poco de conocimiento del formato PE, y los tipos de datos, nada más.

Cita:

Empezado por dec (Mensaje 513920)
Este es un tema interesante no porque lo iniciase un servidor de ustedes... pero porque está abriendo la puerta a hacer todo tipo de programas. No pocas "herramientas de autor" utilizan este tipo de técnicas. Se trata de que el ejecutable al que adjuntamos un determinado contenido, puede "interpretar" dicho contenido...

Pero no podemos olvidar la cara oscura del asunto... Un Joiner:
Código:

Stub + Programa Gancho + MalawareAñadido
Y para despistar, el conjunto tendrá el icono del programa gancho que será lo único que se ejecutará de forma visible liberando el malaware. :cool:


Saludos.

Casimiro Notevi 02-03-2017 23:51:07

¡¡¡Qué malvado!!! :rolleyes:

escafandra 02-03-2017 23:58:47

Cita:

Empezado por Casimiro Notevi (Mensaje 513936)
¡¡¡Qué malvado!!! :rolleyes:

Es que es así como se hace... :p


Saludos.

escafandra 03-03-2017 00:39:56

Cita:

Empezado por dec (Mensaje 513888)
¿Podría modificarse dicho código para que funcionase en Windows de 64 bits? Podría ser interesante, si bien no imprescindible ahora mismo. Lo pregunto ya por abusar... y no quiero hacerlo.

EL PE de ejecutables 64bits tiene algunas diferencias con el de 32bits. Sin ir muy lejos, hay dos versiones de la estructura IMAGE_NT_HEADERS que dependen a su vez de dos versiones de IMAGE_OPTIONAL_HEADER, una para 32 y otra para 64bits.

Esta modificación del código original lo capacita para funcionar compilado a 64bits:
Código Delphi [-]
function GetExeSize: cardinal;
var
  p: PBYTE;
  i, NumSections: integer;
begin
  Result := 0; // if error then result = 0
  p := pointer(GetModuleHandle(nil));      // DosHeader  'MZ'
  inc(p, PImageDosHeader(p)^._lfanew + 4); // ImageFileHeader
  NumSections := PImageFileHeader(p)^.NumberOfSections;
  inc(p, sizeof(TImageFileHeader) + PImageFileHeader(p)^.SizeOfOptionalHeader); // IMAGE_SECTION_HEADER (SectionHeaders)
  for i:= 1 to NumSections do
  begin
    with PImageSectionHeader(p)^ do
      if PointerToRawData + SizeOfRawData > Result then
        Result := PointerToRawData + SizeOfRawData;
    inc(p, sizeof(TImageSectionHeader));
  end;
end;

PD/ Una cosa más, la información de depuración puede alterar el tamaño del ejecutable con lo que es conveniente hacer las añadiduras al archivo una vez depurado el ejecutable y eliminada esta información.

Saludos.

dec 03-03-2017 11:36:29

Hola a todos,

Te estás pasando ya escafandra, muchísimas gracias. No he probado con ejecutables de 64 bits pero lo haré en cuantito pueda. Respecto de la información de depuración, es cierto, que, tal vez desde otro punto de vista, ya me había topado con dicho problema, de modo que "fuerzo" a que el ejecutable "final" se compile en "modo release". Esto lo hago de una forma tal vez "bruta" pero efectiva, añadiendo estas líneas al comenzar el "begin" del archivo de proyecto del ejecutable en cuestión:

Código Delphi [-]
  {$IFDEF DEBUG}
   Remember that...
  {$ENDIF}

De este modo, si estamos en "modo debug", el "Remember that...", en este caso, causará un error de compilación que nos hará saber de no podemos seguir por dicho camino.

Muchas gracias de nuevo escafandra, voy a intentar hacer las pruebas con 64 bits lo antes posible, y tal vez hasta pueda preparar algo más o menos genérico que compartir por aquí.

dec 03-03-2017 13:03:12

1 Archivos Adjunto(s)
Hola a todos,

Adjunto a este mensaje tenéis "la prueba" de que todo lo que hemos tratado en este hilo funciona, es decir, se trata de un programa "escritor" que adjunta un "archivo zip" a un archivo ejecutable "plantilla". Dicho programa plantilla puede ser compilado para 32 ó 64 bits y funcionará igualmente. Echad un vistazo y si tenéis alguna duda no dejéis de comentarlo aquí mismo. El proyecto está hecho con Delphi XE2: no sé hasta qué punto funcionará en versiones más "antiguas" de Delphi.

P.D. Cabe añadir que el archivo que se adjunta al ejecutable "plantilla" es un archivo zip no por gusto. Como he comentado arriba, si se llega a firmar el ejecutable plantilla, pareciera que la función "GetExeSize" no se percata de dicha información añadida al ejecutable, sin embargo, no hay problema en descomprimir el "archivo zip" incrustado en el ejecutable, por ejemplo, con los componentes "Abbrevia" (pero también con programas como IZArc), porque, la información que queda "detrás" del "archivo zip" parece ignorarse sin más. No sé si estoy equivocado, pero, me parece que esto implica que el archivo tenga que ser un "archivo zip", puesto que de otro modo igual entraríamos en problemas "corrompiendo" el archivo original, ya digo, todo esto, si se llega a firmar el ejecutable "plantilla", que, por otro lado, será lo más normal.

jhonny 03-03-2017 13:52:02

Muy interesante todo lo que leo acá, no he sido quien abrió el hilo pero muchas gracias a todos.

Casimiro Notevi 03-03-2017 16:27:54

Voy a por las gafas de cerca :)

roman 03-03-2017 16:55:30

Te presto las mías :rolleyes:

Cita:

Empezado por jhonny (Mensaje 513956)
Muy interesante todo lo que leo acá, no he sido quien abrió el hilo pero muchas gracias a todos.


Casimiro Notevi 03-03-2017 19:57:57

¡Aaahhh!, ahora sí que lo pude leer :D

dec 14-03-2017 17:10:54

¡Hola a todos!

Cita:

Empezado por dec (Mensaje 513920)

Hola a todos,

Este es un tema interesante no porque lo iniciase un servidor de ustedes... pero porque está abriendo la puerta a hacer todo tipo de programas. No pocas "herramientas de autor" utilizan este tipo de técnicas. Se trata de que el ejecutable al que adjuntamos un determinado contenido, puede "interpretar" dicho contenido, y, a partir de ahí imagináos... por ejemplo, podríamos hacer un programa que sirva a los usuarios para programar de una forma muy sencilla, digamos que con prácticas "acciones visuales", generando completos ejecutables para Windows. Quiere decirse que nuestro ejecutable, por debajo, "intepreta" las acciones del usuario, llevándolas a cabo como se deba. Otro posible ejemplo: oye usuario,/cliente, con mi programa puedes elegir las imágenes que quieras, que, mi programa te las va a poner dentro de un ejecutable, que podrás enviar a quien quieras, y, que mostrará dichas imágenes con una presentación muy bonita, usando las opciones que tú mismo has determinado.

Esto es casi como contar con un "compilador", pero, lógicamente, sin la complejidad de un compilador... que es algo que se me escapa completamente.

Dicho y hecho... http://www.photocompiler.com/

:) :) :) :) :) :) :D

Casimiro Notevi 14-03-2017 17:25:44

^\||/^\||/^\||/

dec 14-03-2017 17:38:04

Cita:

Empezado por Casimiro Notevi (Mensaje 514315)
^\||/^\||/^\||/

Yo creo que tendrá su público. :)

jhonny 14-03-2017 18:58:41

Cita:

Empezado por dec (Mensaje 514312)
¡Hola a todos!



Dicho y hecho... http://www.photocompiler.com/

:) :) :) :) :) :) :D

¡Genial! :O

dec 14-03-2017 19:05:11

Cita:

Empezado por jhonny (Mensaje 514324)
¡Genial! :O

Gracias Jhonny. :)


La franja horaria es GMT +2. Ahora son las 04:41:12.

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