security - una - ¿Cómo funciona la protección con contraseña del código Excel VBA?
proteger proyecto vba excel (3)
Esta pregunta está relacionada con mi anterior .
¿Puede explicar o proporcionar un enlace a una explicación de cómo funciona la protección con contraseña del código de Excel VBA en versiones anteriores a 2007? ¿Cuál es la diferencia en Excel 2007 y versiones anteriores en términos de protección con contraseña?
¿La contraseña de Excel realmente encripta el código? ¿Cómo ejecuta Excel el código si está encriptado?
Por último, ¿cómo funciona el software de eliminación de contraseñas para Excel?
La seguridad de VBA es ampliamente considerada como bastante pobre. El código de VBA no está compilado, y la fuente está disponible en el archivo de Excel. La protección con contraseña es bastante fácil de eludir.
Según lo entiendo, Office 2003 y anteriores guardan el código vba como parte del formato binario de la hoja de trabajo (o documento / presentación). Cuando enciendes el IDE de VBA, simplemente busca ver si el código de VBA ha sido "protegido" o no. Esto no significa que esté encriptado, simplemente no está disponible para ver. La teoría es que esto evita que los usuarios se entrometan con su código, pero un codificador de núcleo duro podría evitar la contraseña.
Por lo tanto, Excel no necesita descifrar ningún código, solo necesita evitar que otras personas lo vean.
Office 2007 encripta macros (no me pregunte cómo ni qué algoritmo). Esto es necesario, presumiblemente porque los archivos XLSM (o cualquier archivo de Office 2007) son solo archivos zip con una extensión diferente. Cualquiera puede entrar en esos archivos y husmear.
Para responder a su última pregunta, ¿cómo funciona la eliminación de contraseña en formatos anteriores de Office? No estoy del todo seguro. Diferentes proveedores posiblemente abordarán el problema de diferentes maneras, pero sospecho que el enfoque más común será un ataque de fuerza bruta contra las contraseñas hasta que se encuentre una coincidencia.
El objeto Excel VBProject tiene una propiedad de Protección que devolverá diferentes enumeraciones dependiendo del estado de protección de la macro ( vbext_pp_locked
si la macro está protegida, por ejemplo). Si vbext_pp_locked
que seguir probando las contraseñas mediante programación hasta que vbext_pp_locked
evaluara como falso, habría encontrado su contraseña.
Phil está en lo cierto: la contraseña le impide mirar los módulos, ellos mismos no están encriptados. Sé que en Excel 2007 un archivo es esencialmente una colección comprimida de XML y otros archivos, pero no conozco los detalles de cómo se maneja el cifrado. Para versiones anteriores - excel 2, 3, 4, 5, 95, 97, 2000, XP, y 2003, está la documentación completa de OpenOffice.org del formato de archivo de Microsoft Excel :
El formato de archivo de Excel se llama BIFF (formato de archivo de intercambio binario). Se usa para almacenar todo tipo de documentos: documentos de hojas de trabajo, documentos de libros de trabajo y documentos de espacios de trabajo. Existen diferentes versiones de este formato de archivo, dependiendo de la versión de Excel que haya escrito el archivo y según el tipo de documento.
Un documento de libro de trabajo con varias hojas (BIFF5-BIFF8) generalmente se almacena utilizando el formato de archivo de documento compuesto (también conocido como "formato de archivo de almacenamiento OLE2" o "formato de archivo de almacenamiento compatible con Microsoft Office"). Contiene varias secuencias para diferentes tipos de datos. Puede encontrar una documentación completa del formato de los archivos de documentos compuestos aquí .
El bloque de protección del libro de trabajo ocurre justo después del bloque DEFINEDNAME (es decir, rangos con nombre) en la mayoría de las transmisiones BIFF, aunque BIFF8 es una desviación importante de ese patrón. El bloque de protección de registros En Biff5 - Biff8 la estructura del Bloque de protección de libros:
- Configuración de ventana WINDOWPROTECT: 1 = protegido
- PROTEGER los contenidos del libro de trabajo: 1 = protegido
- CONTRASEÑA Valor hash de la contraseña; 0 = sin contraseña
- PROT4REV Libro de trabajo compartido: 1 = protegido
- PROT4REVPASS Valor hash de la contraseña compartida; 0 = sin contraseña
El bloque de contraseña almacena un valor hash de 16 bits, calculado a partir de la hoja de cálculo o la contraseña de protección del libro.
Alguien creó un código vba que cambia la contraseña de protección vba a "macro", para todos los archivos de Excel, incluido .xlsm (versiones 2007+). Puedes ver cómo funciona navegando por su código.
Aquí está el blog de chicos: http://lbeliarl.blogspot.com/2014/03/excel-removing-password-from-vba.html Aquí está el archivo que hace el trabajo: https://docs.google.com/file/ d / 0B6sFi5sSqEKbLUIwUTVhY3lWZE0 / edit
Pegado de una publicación anterior de su blog:
Para archivos de Excel 2007/2010 (.xlsm), siga estos pasos:
- Crea un nuevo archivo .xlsm.
- En la parte de VBA, configure una contraseña simple (por ejemplo, ''macro'').
- Guarda el archivo y cierra.
- Cambie la extensión del archivo a ''.zip'', ábralo con cualquier programa del archivador.
- Encuentra el archivo: ''vbaProject.bin'' (en la carpeta ''xl'').
- Extraerlo del archivo.
- Abra el archivo que acaba de extraer con un editor hexadecimal.
Busque y copie el valor del parámetro DPB (valor entre comillas), ejemplo: DPB = "282A84CBA1CBA1345FCCB154E20721DE77F7D2378D0EAC90427A22021A46E9CE6F17188A". (Este valor se genera para la contraseña ''macro''. Puede usar este valor DPB para omitir los pasos 1-8)
Siga los pasos 4 a 7 para el archivo con contraseña desconocida (archivo que desea desbloquear).
Cambie el valor de DBP en este archivo en el valor que ha copiado en el paso 8.
Si el valor copiado es más corto que en el archivo cifrado, debe rellenar los caracteres faltantes con 0 (cero). Si el valor es más largo, eso no es un problema (péguelo como está).
Guarde el archivo ''vbaProject.bin'' y salga del editor hexadecimal.
- Reemplazar el archivo ''vbaProject.bin'' existente con uno modificado.
- Cambiar la extensión de ''.zip'' a ''.xlsm''
- Ahora, abra el archivo de Excel que necesita para ver el código de VBA. La contraseña para el código de VBA será simplemente macro (como en el ejemplo que estoy mostrando aquí).