2008-11-03 42 views
7

Esta pregunta está relacionada con my previous one.¿Cómo funciona la protección mediante contraseña del código Excel VBA?

¿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?

Respuesta

13

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 tengo entendido, 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.

Así que Excel no necesita desencriptar ningún código, solo necesita evitar que las personas lo vean.

Office 2007 does cifrar 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 tuviera que seguir probando las contraseñas mediante programación hasta que el vbext_pp_locked evaluado como falso, habría encontrado su contraseña.

+0

Me pregunto si existe una opción en 2007 para almacenar solo el código de bytes para las macros dentro de un libro de trabajo, lo que le permite entregar funciones sin la fuente? – DaveParillo

+0

Esa funcionalidad no está (AFAIK) integrada en ninguna versión de Office. Más bien, la expectativa es que si desea específicamente la automatización de un archivo de Office incluido, use las Herramientas de Visual Studio para Office (VSTO) para escribir su propia DLL y almacenarla como un complemento. –

+3

FYI - Creé un xlsm (usando el convertidor disponible para 2003). Cambié la extensión xlsm a xip, descomprimí y miré dentro. Todo el VBA estaba dentro de un solo archivo 'vbaProject.bin'. En un editor hexadecimal, parece que se compila a partir de exactamente los mismos bloques BIFF de los que están hechos otros archivos de Excel. Todas las cadenas en las macros eran claramente visibles. Por lo tanto, no parece que el cifrado haya cambiado demasiado. – DaveParillo

3

Phil es correcto: la contraseña le impide mirar los módulos, 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, & 2003, no es la integral OpenOffice.org's Documentation of the Microsoft Excel File Format:

El formato de archivo de Excel se llama BIFF. (Binary Interchange File Format). 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 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. Se puede encontrar una documentación completa del formato de los archivos de documentos compuestos here.

El Bloque de protección de libro se produce 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 récord En Biff5 - BIFF8 la estructura del bloque de protección de libro:

configuración
  • WINDOWPROTECT ventanas: 1 = protegida
  • proteger el contenido de libro: 1 = protegidos
  • valor hash de la contraseña 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.

-1

Alguien ha creado 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í es el blog chico: 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 desde un post anterior de su blog:

Por 2007/2010 archivos de Excel (.xlsm) no siguientes pasos :

  1. Cree un nuevo archivo .xlsm.
  2. En la parte de VBA, establezca una contraseña simple (por ejemplo, 'macro').
  3. Guarde el archivo y salga.
  4. Cambie la extensión del archivo a '.zip', ábralo mediante cualquier programa del archivador.
  5. Encuentra el archivo: 'vbaProject.bin' (en la carpeta 'xl').
  6. Extraerlo del archivo.
  7. Abra el archivo que acaba de extraer con un editor hexadecimal.
  8. Buscar y copiar el valor de parámetro de DPB (valor en comilla), ejemplo: DPB = "282A84CBA1CBA1345FCCB154E20721DE77F7D2378D0EAC90427A22021A46E9CE6F17188A". (Este valor se generó para la contraseña 'macro'. Puede usar este valor DPB para omitir los pasos 1-8)

  9. Realice los pasos 4-7 para archivos con contraseña desconocida (archivo que desea desbloquear).

  10. Modificar 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 que debe rellenar caracteres que faltan con 0 (cero). Si el valor es más largo, eso no es un problema (péguelo como está).

  11. Guardar el archivo 'VBAProject.bin' y la salida del editor hexadecimal.

  12. Reemplazar el archivo 'vbaProject.bin' existente con uno modificado.
  13. Cambio de extensión '.zip' Volver a '.xlsm'
  14. Ahora, abra el archivo de Excel que necesita para ver el código VBA. La contraseña para el código VBA será simplemente macro (como en el ejemplo Estoy mostrando aquí).
+1

Esto realmente no responde la pregunta. – GregRos

+0

No responde directamente, pero el tipo que preguntó podría seguir los pasos y el código si quiere saber específicamente cómo funciona. – Morosho

Cuestiones relacionadas