El Blog de Gualtrysoft

Windows 2000/2003/2008, Active Directory, VBScript, Hyper-V, PowerShell y todo aquello interesante a la hora de usar, configurar y administrar Windows Server. También tenemos longanizas…

Encriptación de Scripts VBScript: SCRENC.EXE

Publicado por urpiano en Jueves 7 de Diciembre de 2006

En ocasiones podemos querer que nuestros scripts puedan ser utilizados, pero que no se pueda leer el código. Imaginemos que tenemos un script en el cual necesitamos que aparezca, por ejemplo, la contraseña de determinado usuario, pues estamos ejecutándolo haciendo un RunAs y por ello la contraseña está ahí. Si este script es ejecutable por cualquiera (por ejemplo en un script de logon), cualquiera puede abrirlo con un editor de texto y ver esa contraseña. Para evitar esto podemos tener el script encriptado. Realmente usar la encriptación del VBScript es un error en esta caso (ya veremos porqué más adelante), pues tenemos mejores formas de hacerlo. Lo correcto es que el script solicite que sea entrada la contraseña; para solucionar el problema añadido de que alguien pueda estar mirando mientras entramos la contraseña y, por tanto, sea capaz de verla, se puede entrar en una caja de texto que enmascare la constraseña, por medio de automatización de Internet Explorer, tal y como indica este artículo:

Masking Passwords by Using Internet Explorer
http://www.microsoft.com/technet/scriptcenter/guide/sas_ent_lppm.mspx?mfr=true

Sí puede ser interesante para, por ejemplo, ocultar rutas de carpetas compartidas ocultas, o sencillamente porque no queremos compartir nuestro código. Para la encriptación de los scripts, necesitamos instalar Script Encoder:

Download details Script Encoder
http://www.microsoft.com/downloads/details.aspx?FamilyID=E7877F67-C447-4873-B1B0-21F0626A6329&displaylang=en&Hash=C6kjX0zrFadqi1l0ER11JFbwRkL2U1eSIKYcP8LDovRo%2fkb4udrHW0caMz8uraO1JNCnQK88HYbGKVRJnUlqtA%3d%3d

La forma de uso es:

screnc <fichero.vbs> <fichero.vbe>

Veamos un ejemplo con un simple script de “Hola Mundo”:

WScript.Echo "Hola Mundo"

Lo guardamos como hola-mundo.vbs y ejecutamos:

screnc hola-mundo.vbs hola-mundo.vbe

Ahora abrimos el fichero hola-mundo.vbe y vemos lo siguiente:

#@~^GQAAAA== Um.bwDR21tK~J_Wsl,H;U9WJhAgAAA==^#~@

¡Rraarrro, rraarro, rrrarrrooo!

¡Ale, ya tenemos nuestro script operativo y a salvo de ojos indiscretos!… ¿o no?. Pues va a ser que no. Como la propia documentación de screnc advierte:

Note that this encoding only prevents casual viewing of your code; it will not prevent the determined hacker from seeing what you’ve done and how.

Es decir, que sólo lo protejemos de la vista de pipiolos, pero no de gente más avezada. Y si no, basta con ver este par de enlaces:

VBE decoder – Decode all files encoded (original version) with screnc.exe
http://www.interclasse.com/scripts/decovbe.php

Windows Script Decoder
http://www.virtualconspiracy.com/index.php?page=scrdec/intro

Así que protejer de ojos indiscretos una contraseña por medio de la encriptación es una forma no recomendable, por no decir mala, de hacerlo; aunque sea más complejo, lo seguro es utilizar el método del primer enlace que he puesto. Así pues, encriptar un script sólo vale para evitar que se pueda ver el código de éste, y ni siquiera la encriptación asegura ésto, pues es fácilmente rompible.

Conclusión: si te preocupa que pueda acceder a tu código otra gente, olvídate de VBScript, usa VB y trabaja con programas compilados como EXE en su lugar. Encriptar scripts sólo sirve para que un usuario no muy ducho en estas lides se quede “a cuadros” al abrir el script, pero un usuario un poquito espabilado podrá ver tu código y, es más, el hecho de estar encriptado probablemente le lanzará a desear con más ahínco ver el código, pues sospechará que algo se quiere ocultar, como, por ejemplo, una contraseña. Por último, encriptar un script para ocultar una contraseña es inseguro, se debe solicitarl entrar la contraseña y utilizar el método de enmascaramiento por medio de Internet Explorer. No obstante, en ocasiones nos veremos que es necesario poner la contraseña en el script, pues por tratarse de algo automatizado totalmente, por no poder estar suministrando la contraseña cada vez que sea necesario (pensemos en un script de logon, por ejemplo, que necesita escribir en el registro en HKLM y por tanto requiere un usuario con ese derecho). Si nos encontramos en esta tesitura, lo mejor es que estudiemos la forma de evitar usar el adminsitrador con el script; en su lugar debemos de tratar que el usuario cuya contraseña está en el script tenga la capacidad, únicamente, de hacer lo que queremos que haga en el script (imaginemos que queremos que escriba en determinada rama de HKLM, podríamos crear una GPO que le diera permiso de escritura en esa clave a un usuario normal y así evitar que nos cacen una contraseña de un administrador).


Una respuesta para “Encriptación de Scripts VBScript: SCRENC.EXE”

  1. [...] es, ni mucho menos algo demasiado seguro, pues es muy fácil saltarse esa encriptación, como se ve aquí. Otra estrategia es el hacerlo de forma interactiva, desde un equipo en el que lanzamos el script [...]

Escribe un comentario

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>