h1

Iconos de archivos .EXE y .DLL en Linux

10 \10UTC agosto \10UTC 2007

Hace tiempo que quería hacer ésto. Es una pequeña “cuenta pendiente” que data ya de principios de los años 2000. Además, como me parece un post harto insustancial, voy a llenarlo un poco de mi propia historia para hinchar así mi ego.

Cuando abrieron el Ciber, yo era un pobre ignorante de la vida que estaba maravillándose con los iconos del Windows 98. Sí, sufro una extraña atracción por todo tipo de símbolos y señales que informen de algo. Recuerdo un verano de los noventa, cuando lamenté la pérdida de un número de la Muy Interesante donde aparecían un montón de signos (y, ahora que lo recuerdo, emoticonos) con sus correspondientes explicaciones. Así que ni digamos con el Windows 98.

El caso es que eso fue el centro de mis pérdidas de tiempo en ese ciber durante bastante tiempo(ahora cerrado por razones que no vienen al caso, jijiji). Estaba todo el día buscando información sobre los iconos del Windows. Hasta descubrí que haciendo un dibujo de 32×32 en el paint y guardándolo como .ICO se obtiene un icono chapucero, pero funcional al fin y al cabo. Acabé por encontrar un programa llamado ArtIcons Pro, pero el hecho de ser shareware me limitaba mucho en este superestúpido campo de la informática.

Aún cuando funcionaba ese programa, seguía viendo a los iconos como algo esquivo. Un montón de caracteres extraños y al azar encerrados dentro de un fichero con una sugerente extensión, a los cuales no podía acceder por los métodos normales.

Pasó el tiempo, y me fui olvidando del tema. Acabé instalando Linux, haciendo las cosas guays que hacen los que tienen Linux, seguí progresando en C hasta que el aburrimiento me llevó a crear icoscan, una herramienta que separa los iconos de diferentes resoluciones en un .ICO normal. Alguna vez me fue útil, pero con el tiempo descubrí que me valía para más bien poco. Se quedó apalancado por ahí.

Paralelamente, hice una herramienta que examinaba los ficheros .EXE/.DLL de Windows y mostraba información sobre sus secciones. Madre mía, menudo cristo. Jamás vi un ejecutable más incomprensible y enrevesado. De lo peor que pude analizar hasta entonces. De éste hice varias versiones: La primera era muy cutre y achaparrada, la segunda era un poco más profesional e intentaba buscar iconos… pero no lo conseguía.

Y después de mucho esfuerzo (truncado por una provechosa excursión a Suances de la que hablaré por aquí) lo logré. Ayer mismo volví a mi querido ordenador y conseguí extraer todos los iconos de ejecutable del Resource Hacker (qué irónico, ¿no?).

Hoy estuve limpiando el código, y después de extraer más de ocho mil iconos de la partición de Windows, me atrevo a liberar el código (sí, también funciona con DLL):

exe2ico.c

No necesita nada en especial para ser compilado:

$ gcc exe2ico.c -o exe2ico
$ ./exe2ico shell32.dll

Y comenzará a extraer los iconos de shell32.dll, escribiéndolos en el directorio en curso. Algunos resultados (con shell32.dll):

shell32.dll

Aún así, hay algunos detalles por retocar, ya que por alguna misteriosa razón no todos los iconos se extraen bien. Tampoco es un programa muy útil, así que no creo que vaya a solucionar nunca esos problemas.

Bibliografía: El artículo en CodeBreakers (inglés), y la muy útil información proporcionada por oicìliS (portugués).

ACTUALIZACIÓN: Esta tarde me inspiré y decidí hacer un thumbnailer para Gnome de archivos ejecutables. Y al parecer el invento salió bien. Por fin puedo ver los iconos de los archivos .EXE y .DLL directamente desde el explorador de archivos, en vez de esa maldita hoja con la patita de Gnome. He aquí algunas capturas:

Viendo algunos iconos en C:\WINDOWS\System32
Algunos iconos más de esa misma carpeta
Mi lujuriosa carpeta de virus y otras cochinaditas para destripar en el tiempo libre

¿Qué necesitas para poder ver los iconos de un .EXE? Pues, antes que nada, la anteriormente mencionada herramienta (exe2ico.c) compilada, y alojada preferiblemente en /usr/bin. También necesitarás la herramienta convert de imagemagick, Nautilus (el explorador de archivos de Gnome, por supuesto) y un editor de texto. Oh, sí, vamos a hacernos los superhackers siderales del futuro escribiendo archivos.

Lo primero es, como root, editar el fichero /usr/bin/exe-thumbnailer.sh. Este fichero no existe, pero lo crearemos. Podemos editarlo con vi, con gedit o incluso a base de echo’s. Preferencias al gusto del cliente. En mi caso usaré gedit:

# gedit /usr/bin/exe-thumbnailer.sh

(También podemos usar sudo en vez de acceder directamente a una consola de root)

El siguiente paso será escribir esta parrafada:

#!/bin/bash
#
# exe-thumbnailer.sh file.exe file.png size
#
#
UNIQUE=/tmp/$$.ico
 
if [ "$3" != "" ]; then
WIDTH_INFO="-w $3"
fi
 
rm -f $UNIQUE
 
exe2ico -d 32 $WIDTH_INFO -o $UNIQUE "$1"
 
if [ ! -f "$UNIQUE" ]; then
if [ ! -f "$UNIQUE" ]; then exe2ico -d 32 -o $UNIQUE "$1"; fi
if [ ! -f "$UNIQUE" ]; then exe2ico -d 16 -o $UNIQUE "$1"; fi
if [ ! -f "$UNIQUE" ]; then exe2ico -d 8 -o $UNIQUE "$1"; fi
if [ ! -f "$UNIQUE" ]; then exe2ico -d 4 -o $UNIQUE "$1"; fi
if [ ! -f "$UNIQUE" ]; then exe2ico -d 2 -o $UNIQUE "$1"; fi
if [ ! -f "$UNIQUE" ]; then exe2ico -d 0 -o $UNIQUE "$1"; fi
if [ ! -f "$UNIQUE" ]; then exe2ico -o $UNIQUE "$1"; fi
 
 
if [ ! -f "$UNIQUE" ]; then
exit 1
fi
fi
# Por alguna extraña razón, los iconos salen el doble de grandes. Quita esta línea si se ven demasiado pequeños.
RSIZ=`expr $3 / 2`
 
if [ "$RSIZ" == "" ]; then
RSIZ=32
fi
 
convert $UNIQUE -resize ${RSIZ}x${RSIZ} $UNIQUE.png
RETVAL=$?
mv $UNIQUE.png "$2"
rm -f $UNIQUE
exit $RETVAL

Guardamos el fichero y le damos permisos de ejecución:

chmod a+x /usr/bin/exe-thumbnailer.sh

¿Para qué sirve esto? Este script será llamado por Nautilus a la hora de ver “qué hay” dentro de un .EXE y cómo debe visualizarse. El funcionamiento del mismo es un poco burdo, pero recordad que todo lo que yo recito es GPL, así que doy vía libre a la mejora de este script, que bien necesita un poco más de inteligencia: Sencillamente saca un icono apropiado, y lo convierte a PNG. Nada más.

El siguiente paso es registrar este thumbnailer o miniaturizador en GConf. Para eso, ejecutamos:

$ gconftool-2 -s /desktop/gnome/thumbnailers/application@x-ms-dos-executable/enable -t boolean true
$ gconftool-2 -s /desktop/gnome/thumbnailers/application@x-ms-dos-executable/command -t string '/usr/bin/exe-thumbnailer.sh %i %o %s'

Con lo que el miniaturizador queda listo para su empleo. Después de eso, sólo tienes que pasearte por la carpeta de la partición de tu Windows y deleitarte ante las maravillosas posibilidades que ofrece el hecho de que el software sea abierto😉

Bibliografía de ésto último: Integrating existing software with Gnome.

Saludos

13 comentarios

  1. Hay que me lol! (Y)


  2. […] Extraer iconos de .exe y .dll en GNU/Linuxbatchdrake.wordpress.com/2007/08/10/utilidad-de-extraccion-d… por drjackzon hace pocos segundos […]


  3. Muy bueno el post😀


  4. EDITO: La URL del código estaba mal. Ahora ya se puede descargar el código.

    Saludos


  5. […] Iconos de archivos .EXE y .DLL en Linux Hace tiempo que quería hacer ésto. Es una pequeña “cuenta pendiente” que data ya de principios de los […] […]


  6. Me ha sido muy útil esta herramienta. Por fin puedo poner lanzadores en el escritorio de los programas windows que tengo con wine


  7. Muchas gracias por el programa.
    Me ha venido de perlas !!

    Felicidades !!!

    (Centralita Virtual, http://www.zoonsuite.com)


  8. Muy útil. Gracias.


  9. Gracias, tu herramienta me ayudado mucho.


  10. ¡Muchísimas gracias! Ya no tendré que depender de los programas de windows para extraer los iconos. Un paso más y una excusa más para ser 100% libre.


  11. Excelente. Había perdido un icono que cree hace tiempo y lo he podido sacar del ejecutable.


  12. Admin or Moder!

    WARNING!
    If you will not delete this topic within 5 days – Spam will be here, I promise!

    Goot Lak! God Fak!


  13. Compilado y funcionando,
    Gracias poe el trabajo.



Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: