Tuesday, June 17, 2008

Codificando scripts en Bash

Mi buen Amigo RenzoP me hizo una pregunta ahora que me motivo a postear esta explicacion de como imbuir un script, archivo, binario, etc. dentro de un script de Bash y luego utilizarlo.
Este metodo es utilizado para muchas labores, en el mundo en el que ando, la primera vez que lo vi fue con el instalado de Nessus de las versiones 2.X (aun existe en la 2.2.11) donde hay un script de autoinstalacion que tiene imbuido un tarball con el binario instalador de Nessus.
La forma sencilla es utilizando uuencode y uudecode. Los scripts a continuacion carecen de lineas de limpieza y estetica porque solamente tienen fines de explicacion.

1. Tenemos un script como :
cat radio.sh
#!/bin/bash
mplayer -wid 58723239 -slave -vo xv,sdl,x11 -ao alsa,oss,sdl,arts -framedrop -contrast 0 -brightness 0 -hue 0 -saturation 0 -cache 384 'http://s7.viastreaming.net:7320' -identify

2. Lo codificamos con uuencode :
uuencode radio.sh radio.decoded > radio.encoded

uuencode permite codificar archivos binarios para su transmision en formato ASCII por medio que solamente permiten este formato (pagina man)
  • radio.sh es el script del punto 1.
  • radio.decoded es el nombre que ira incluido dentro del archivo codificado que viene a continuacion de los permisos del archivo como se vera mas adelante y que sera usado para la decodificacion.
  • radio.encoded es el nombre del archivo codificado que se genera.
El contenido de radio.encoded es :







3. Finalmente, se imbuye (existe esa palabra ?) el script codificado dentro de otro que solamente hace la extraccion y ejecucion :











Esta codificacion es muy comun en lenguajes de scripting para distribuir programas binarios con autoinstaladores, para ocultar el contenido de scripts (la decodificacion se deriva a un directorio temporal y antes de concluir la ejecucion del script padre, se elimina el script decodificado del directorio temporal) y, de hecho, hay herramientas que no solo codifican sino encriptan y comprimen.

No comments: