Me han pedido que actualice algunas macros de Excel 2003, pero los proyectos VBA están protegidos por contraseña, y parece que falta documentación... nadie conoce las contraseñas.
¿Hay alguna forma de eliminar o descifrar la contraseña de un proyecto VBA?
Sí, siempre que utilices una hoja de cálculo con formato .xls
(el predeterminado para Excel hasta 2003). Para Excel 2007 en adelante, el valor por defecto es .xlsx
, que es un formato bastante seguro, y este método no funcionará.
Como dice Treb, es una comparación sencilla. Un método es simplemente cambiar la entrada de la contraseña en el archivo usando un editor hexadecimal (ver Editores hexadecimales para Windows). Ejemplo paso a paso:
Cree un nuevo archivo de Excel simple.
En la parte de VBA, establezca una contraseña simple (digamos - 1234).
Guardar el archivo y salir. Entonces compruebe el tamaño del archivo - vea Stewbob's gotcha
Abre el archivo que acabas de crear con un editor hexadecimal.
Copie las líneas que comienzan con las siguientes claves:
CMG=....
DPB=...
GC=...
PRIMERO HAGA UN RESPALDO del archivo de Excel del que no sabe la contraseña de VBA, luego ábralo con su editor hexadecimal y pegue las líneas copiadas arriba del archivo ficticio.
Guarde el archivo excel y salga.
Ahora, abra el archivo de Excel en el que necesita ver el código VBA. La contraseña para el código VBA será simplemente 1234 (como en el ejemplo que muestro aquí).
Si usted necesita trabajar con Excel 2007 o 2010, hay algunas otras respuestas a continuación que podría ayudar, en particular estos: 1, 2, 3.
EDIT Feb 2015: para otro método que parece muy prometedor, mira esta nueva respuesta por Đức Thanh Nguyễn.
Colin Pickard tiene una excelente respuesta, pero hay un 'cuidado' con esto. Hay casos (aún no he averiguado la causa) en los que la longitud total de la entrada "CMG=........GC=...." en el archivo es diferente de un archivo Excel a otro. En algunos casos, esta entrada será de 137 bytes, y en otros será de 143 bytes. La longitud de 137 bytes es la extraña, y si esto ocurre cuando creas tu archivo con la contraseña '1234', simplemente crea otro archivo, y debería saltar a la longitud de 143 bytes.
Si intenta pegar el número incorrecto de bytes en el archivo, perderá su proyecto VBA cuando intente abrir el archivo con Excel.
EDIT
Esto no es válido para los archivos de Excel 2007/2010. El formato de archivo estándar .xlsx es en realidad un archivo .zip que contiene numerosas subcarpetas con el formato, el diseño, el contenido, etc., almacenados como datos xml. Para un archivo de Excel 2007 no protegido, basta con cambiar la extensión .xlsx por .zip, luego abrir el archivo zip y buscar entre todos los datos xml. Es muy sencillo.
Sin embargo, cuando se protege con contraseña un archivo de Excel 2007, todo el archivo .zip (.xlsx) se encripta en realidad utilizando el cifrado RSA. Ya no es posible cambiar la extensión a .zip y examinar el contenido del archivo.
La protección es una simple comparación de texto en Excel. Cargue Excel en su depurador favorito (Ollydbg es mi herramienta preferida), encuentre el código que hace la comparación y arréglelo para que siempre devuelva true, esto debería permitirle acceder a las macros.