Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: g5server en 19 Julio 2017, 11:47 am



Título: Problemas al firmar un exe creado con py2exe
Publicado por: g5server en 19 Julio 2017, 11:47 am
Problemas al firmar un exe creado con py2exe

Hasta ahora me estaba funcionado muy bien.

El problema me ha surgido cuando incluyo el zipfile en el exe y posteriormente lo firmo.

1) Creo ejecutable con zipfile dentro del exe:
    setup(zipfile=None,
      .
      .
      .

FUNCIONA CORRECTAMENTE.

2) Lo firmo:    signtool sign /a dist\mi_exe.exe

NO FUNCIONA. NO OFRECE MENSAJE. NADA

Alguna idea. ? Gracias: José María


Título: Re: Problemas al firmar un exe creado con py2exe
Publicado por: Eleкtro en 19 Julio 2017, 16:43 pm
Hola. Con solo realizar una simple búsqueda en Google habrías encontrado la solución a tu problema:

  • https://stackoverflow.com/questions/28808842/how-to-digitally-sign-a-binary-produced-with-py2exe
  • https://medium.com/@bjoernstiel/code-signing-py2exe-executables-a222c0d06d3f
+
  • http://lmgtfy.com/?q=sign+py2exe

Saludos


Título: Re: Problemas al firmar un exe creado con py2exe
Publicado por: g5server en 19 Julio 2017, 17:17 pm
He planteado mi pregunta después de muchas horas de búsqueda en Google.

Eres muy amable Electro, aunque lamentablemente ya había leído eso y no me aporta nada.

Quizás no te has fijado que en los enlaces que me indicas hace referencia expresa a:

zipfile='mifichero.lib', en lugar de zipfile=None.

Al ponerlo en None, consigo que esa librería se incorpore al EXE y, aunque engorde el ejecutable, provoca una mejora muy muy sustancial de velocidad.

Mi gran problema, es que cuando hago eso, al firmarlo se genera un EXE roto.

Muchas gracias por tu tiempo e interés. Un saludo




Título: Re: Problemas al firmar un exe creado con py2exe
Publicado por: Eleкtro en 19 Julio 2017, 17:33 pm
Quizás no te has fijado que en los enlaces que me indicas hace referencia expresa a:

zipfile='mifichero.lib', en lugar de zipfile=None.

Al ponerlo en None, consigo que esa librería se incorpore al EXE y, aunque engorde el ejecutable, provoca una mejora muy muy sustancial de velocidad.

Por favor, lee en profundidad los artículos que he compartido en esos enlaces, sobre todo esta parte:

Cita de: https://medium.com/@bjoernstiel/code-signing-py2exe-executables-a222c0d06d3f
Create the executable

Without going too much into detail, the exe created by py2exe is a simple loader that loads the Python interpreter plus your Python code. The Python code can either be bundled inside the exe or be detached from the exe loader as a separate library.

In order to apply a sign certificate, we need to detach the library from the exe loader. This is done by specifying the zipfile property on the setup dictionary

setup(name="name",
      console=[],
      windows=[app],
      ...
      # py2exe options
      zipfile = "app.lib", # detached zip library
      data_files = [],
      options={"py2exe": py2exe_options},
)

Si además lees la documentación oficial de py2exe, comprenderás en base al texto citado arriba, que al especificar zipfile = None estás impidiendo (al menos en teoría) la posibilidad de firmar digitálmente el archivo autoextraible/SFX generado con py2exe:

Cita de: http://www.py2exe.org/index.cgi/ListOfOptions
zipfile - name of shared zipfile to generate; may specify a subdirectory; defaults to 'library.zip'. If zipfile is set to None, the files will be bundled within the executable instead of 'library.zip'.

En resumen, dependiendo de como configures el parámetro "zipfile", si especificas el valor "none" entonces los archivos.py que componen a tu programa de Python serán incluidos tal cual dentro del exe generado, y si por lo contrario especificas un nombre de archivo entonces los archivos.py se incluiran dentro de un archivo comprimido/zip aislado dentro del exe generado, y para hacer lo que quieres, es decir, firmar el exe, en teoría necesitas crear dicho archivo comprimido como se explica en aquél artículo, por ende, la solución al problema ya se te ha ofrecido...

EDITO:
...Otra cosa bien distinta es que la solución no te guste por las desventajas que supone xD, lamentablemente al parecer py2exe no permite la modificación del nivel de compressión del archivo zip resultante dentro del SFX, de poder hacerlo eso solventaría el inconveniente del impacto negativo al que haces referencia en la velocidad de descomprensión e inicio del intérprete/script, pero no, al parecer no se puede modificar (al menos no diréctamente, pero supongo que en el código fuente si).

De todas formas py2exe está muy sobrevalorado... a pesar de ser una herramienta obsoleta (última release en sourceforge: año 2008, y en la web de PyPI: año 2014, es un proyecto descontinuado). Como alternativa siempre puedes probar a generar el SFX con la librería cx_Freeze, y comprobar por ti mismo si el exe generado puedes firmarlo o tampoco se puede...

  • http://cx-freeze.readthedocs.io/en/latest/overview.html
  • https://github.com/anthony-tuininga/cx_Freeze

Saludos!


Título: Re: Problemas al firmar un exe creado con py2exe
Publicado por: g5server en 19 Julio 2017, 17:53 pm
Tendré que asumir que no es posible incorporar lib en el exe y a la vez firmarlo digitalmente.

Estoy tratando de dar más velocidad a una aplicación django y me pareció una buena idea.
También he pensado en la posibilidad de volcar ese lib a la memoria y utilizarlo desde ahí, aunque no he encontrada nada que me de pistas de cómo se puede hacer. Quizás no sea posible

Muy amable, muchas gracias