Me han pedido que actualice algunas macros de Excel 2003, pero los proyectos de VBA están protegidos con contraseña, y parece que falta documentación ... nadie sabe las contraseñas.
¿Hay alguna forma de eliminar o descifrar la contraseña en un proyecto de VBA?
Respuestas:
Puede probar este
VBA
enfoque directo que no requiere edición HEX. Funcionará para cualquier archivo (* .xls, * .xlsm, * .xlam ...).Probado y trabaja en:
¿Busca la versión de 64 bits? Ver esta respuesta
Cómo funciona
Haré todo lo posible para explicar cómo funciona. Disculpe mi inglés.
Usando el código
¡Haga una copia de seguridad de sus archivos primero!
Cree un nuevo archivo xlsm y almacene este código en el Módulo 1
code credited to Siwtom (nick name), a Vietnamese developer
Pegue este código debajo del código anterior en el Módulo 1 y ejecútelo
Regrese a sus proyectos VBA y disfrute.
fuente
Sí, siempre que esté utilizando una
.xls
hoja de cálculo de formato (el valor predeterminado para Excel hasta 2003). Para Excel 2007 en adelante, el valor predeterminado es.xlsx
, que es un formato bastante seguro, y este método no funcionará.Como dice Treb, es una comparación simple. Un método es simplemente intercambiar la entrada de contraseña en el archivo usando un editor hexadecimal (ver Editores hexadecimales para Windows ). Ejemplo paso a paso:
Copie las líneas que comienzan con las siguientes teclas:
PRIMERO COPIA DE SEGURIDAD del archivo de Excel para el que no conoce la contraseña de VBA, luego ábralo con su editor hexadecimal y pegue las líneas copiadas anteriores del archivo ficticio.
Si necesita trabajar con Excel 2007 o 2010, hay algunas otras respuestas a continuación que pueden ayudar, particularmente estas: 1 , 2 , 3 .
EDITAR febrero de 2015: para otro método que parece muy prometedor, mire esta nueva respuesta de Đức Thanh Nguyễn.
fuente
CMG...
cadena es más larga que la original.Me basé en la fantástica respuesta de Đức Thanh Nguyễn para permitir que este método funcione con versiones de Excel de 64 bits. Estoy ejecutando Excel 2010 de 64 bits en Windows 7 de 64 bits.
Cree un nuevo archivo xlsm y almacene este código en el Módulo 1
Pegue este código en el Módulo 2 y ejecútelo
DESCARGO DE RESPONSABILIDAD Esto funcionó para mí y lo he documentado aquí con la esperanza de que ayude a alguien. No lo he probado completamente . Asegúrese de guardar todos los archivos abiertos antes de continuar con esta opción.
fuente
Hay otra solución (algo más fácil), sin los problemas de tamaño. Utilicé este enfoque hoy (en un archivo XLS 2003, usando Excel 2007) y tuve éxito.
DPB=...
piezaDPB=...
cadena aDPx=...
* NOTA: Asegúrese de haber cambiado la contraseña a un nuevo valor, de lo contrario, la próxima vez que abra la hoja de cálculo, Excel informará de errores (Error inesperado), luego, cuando acceda a la lista de módulos VBA, verá los nombres de módulos de origen pero reciben otro error al intentar abrir formularios / código / etc. Para remediar esto, regrese a las Propiedades del proyecto VBA y configure la contraseña con un nuevo valor. ¡Guarde y vuelva a abrir el documento de Excel y debería estar listo!
fuente
Colin Pickard tiene una excelente respuesta, pero hay un 'cuidado' con esto. Hay casos (aún no he descubierto la causa) en los que la longitud total de la entrada "CMG = ........ GC = ...." en el archivo es diferente de un archivo de Excel al siguiente. En algunos casos, esta entrada será de 137 bytes, y en otros será de 143 bytes. La longitud de 137 bytes es la impar, y si esto sucede cuando crea su archivo con la contraseña '1234', simplemente cree 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.
EDITAR
Esto no es válido para archivos Excel 2007/2010. El formato de archivo .xlsx estándar 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 desprotegido, puede cambiar la extensión .xlsx a .zip, luego abrir el archivo zip y ver todos los datos xml. Es muy sencillo.
Sin embargo, cuando protege con contraseña un archivo de Excel 2007, todo el archivo .zip (.xlsx) en realidad se cifra mediante el cifrado RSA. Ya no es posible cambiar la extensión a .zip y examinar el contenido del archivo.
fuente
Para un tipo de archivo
.xlsm
o.dotm
debe hacerlo de una manera ligeramente diferente..xlsm
archivo a.zip
.vbaProject.bin
archivo y ábralo en un Editor Hex (uso HxD , es completamente gratuito y liviano).DPB
y reemplace conDPx
y guarde el archivo.vbaProject.bin
archivo antiguo con este nuevo en el archivo comprimido..xlsm
..xlsm
archivo.fuente
.zip
si tiene instalado 7-Zip . En este caso, puede hacer clic derecho en el.xlsm
archivo y elegir "7-Zip -> Abrir archivo"Vale la pena señalar que si tiene un archivo Excel 2007 (xlsm), simplemente puede guardarlo como un archivo Excel 2003 (xls) y utilizar los métodos descritos en otras respuestas.
fuente
1.
convertir .xlsm a .xls2.
descifrar el código de .xls3.
convertir .xlsm a .xlsx4.
Poner el código de los módulos en .xls a. xlsx y guárdelo como .xlsmCon mi turno, esto se basa en la excelente respuesta de kaybee99 que se basa en la fantástica respuesta de Thanc Thanh Nguyễn para permitir que este método funcione con las versiones x86 y amd64 de Office.
Una descripción general de lo que ha cambiado, evitamos push / ret, que está limitado a direcciones de 32 bits y lo reemplazamos con mov / jmp reg.
Probado y trabaja en
cómo funciona
Cree un nuevo archivo con el mismo tipo que el anterior y almacene este código en el Módulo 1
Pegue este código en el Módulo 2 y ejecútelo
fuente
¿Has intentado simplemente abrirlos en OpenOffice.org?
Tuve un problema similar hace algún tiempo y descubrí que Excel y Calc no entendían el cifrado del otro, por lo que permitieron el acceso directo a casi todo.
Esto fue hace un tiempo, así que si eso no fue solo una casualidad de mi parte, también podría haber sido reparado.
fuente
En el caso de que su bloque
CMG="XXXX"\r\nDPB="XXXXX"\r\nGC="XXXXXX"
en su archivo de 'contraseña conocida' sea más corto que el bloque existente en el archivo de 'contraseña desconocida', rellene sus cadenas hexadecimales con ceros finales para alcanzar la longitud correcta.p.ej
CMG="xxxxxx"\r\nDPB="xxxxxxxx"\r\nGC="xxxxxxxxxx"
en el archivo de contraseña desconocido, debe establecerse en
CMG="XXXX00"\r\nDPB="XXXXX000"\r\nGC="XXXXXX0000"
para preservar la longitud del archivo.También he tenido esto trabajando con archivos .XLA (formato 97/2003) en Office 2007.
fuente
Para Excel 2007 en adelante, debe cambiar su extensión de archivo a .zip. En el archivo hay una subcarpeta xl, allí encontrará vbaProject.bin. Siga el paso anterior con vbaProject.bin y guárdelo nuevamente en el archivo. Modifique de nuevo su extensión y ¡voilà! (es decir, siga los pasos anteriores)
fuente
Las contraseñas de proyectos de VBA en documentos de Access, Excel, Powerpoint o Word (
2007, 2010, 2013 or 2016
versiones con extensiones.ACCDB .XLSM .XLTM .DOCM .DOTM .POTM .PPSM
) se pueden eliminar fácilmente .Es simplemente una cuestión de cambiar la extensión del nombre de archivo a
.ZIP
, descomprimir el archivo y usar cualquier editor hexadecimal básico (como XVI32 ) para "romper" la contraseña existente, lo que "confunde" a Office para que solicite una nueva contraseña la próxima vez que el archivo sea abrió.Un resumen de los pasos:
.ZIP
extensión.ZIP
y ve a laXL
carpeta.vbaProject.bin
y abrirlo con un editor hexadecimalDPB
aDPX
..bin
vuelva a colocar el archivo en el archivo zip, vuelva a su extensión normal y abra el archivo como siempre.VBA Project Properties
.Protection
pestaña, establece una nueva contraseña.OK
, cierre el archivo, vuelva a abrirlo, presione ALT + F11.En este punto, puede eliminar la contraseña por completo si lo desea.
Las instrucciones completas con un video paso a paso que hice "cuando" están en YouTube aquí .
Es sorprendente que esta solución haya estado disponible durante años, y Microsoft no ha solucionado el problema.
fuente
Colin Pickard es en su mayoría correcto, pero no confunda la protección de "contraseña para abrir" para todo el archivo con la protección de contraseña de VBA, que es completamente diferente de la anterior y es la misma para Office 2003 y 2007 (para Office 2007, cambie el nombre el archivo a .zip y busque el vbaProject.bin dentro del zip). Y que técnicamente la forma correcta de editar el archivo es usar un visor de documentos compuestos OLE como CFX para abrir la secuencia correcta. Por supuesto, si solo está reemplazando bytes, el antiguo editor binario puede funcionar.
Por cierto, si se pregunta sobre el formato exacto de estos campos, ahora lo tienen documentado:
http://msdn.microsoft.com/en-us/library/dd926151%28v=office.12%29.aspx
fuente
Si el archivo es un archivo zip válido (los primeros bytes se
50 4B
usan en formatos como.xlsm
), descomprima el archivo y busque el subarchivoxl/vbaProject.bin
. Este es un archivo CFB al igual que los.xls
archivos. Siga las instrucciones para el formato XLS (aplicado al subarchivo) y luego simplemente comprima el contenido.Para el formato XLS, puede seguir algunos de los otros métodos en esta publicación. Personalmente prefiero buscar el
DPB=
bloque y reemplazar el textocon espacios en blanco Esto evita problemas de tamaño de contenedor CFB.
fuente
Probé algunas de las soluciones anteriores y ninguna de ellas funciona para mí (excel 2007 xlsm file). Luego encontré otra solución que incluso recupera la contraseña, no solo descifrarla.
Inserta este código en el módulo, ejecútalo y dale algo de tiempo. Recuperará su contraseña por la fuerza bruta.
fuente
ElcomSoft fabrica los productos Advanced Office Password Breaker y Advanced Office Password Recovery que pueden aplicarse a este caso, siempre que el documento se haya creado en Office 2007 o anterior.
fuente
Tom - Inicialmente cometí un error de colegial ya que no vi el tamaño del byte y en su lugar copié y pegué desde el "CMG" configurado para la entrada posterior. Sin embargo, se trataba de dos tamaños de texto diferentes entre los dos archivos, y perdí el proyecto VBA tal como lo advirtió Stewbob.
Usando HxD, hay un contador que rastrea la cantidad de archivos que está seleccionando. Copie comenzando desde CMG hasta que el contador lea 8F (hexadecimal para 143) y del mismo modo al pegar en el archivo bloqueado - Terminé con el doble del número de "..." al final de la pasta, que parecía extraño de alguna manera y se sentía casi antinatural, pero funcionó.
No sé si es crucial, pero me aseguré de cerrar el editor hexadecimal y sobresalir antes de volver a abrir el archivo en Excel. Luego tuve que ir a través de los menús para abrir el Editor VB, a las Propiedades del Proyecto VB e ingresé la contraseña 'nueva' para desbloquear el código.
Espero que esto ayude.
fuente
Mi herramienta, VbaDiff , lee VBA directamente del archivo, por lo que puede usarlo para recuperar el código VBA protegido de la mayoría de los documentos de Office sin recurrir a un editor hexadecimal.
fuente
La protección es una simple comparación de texto en Excel. Cargue Excel en su depurador favorito ( Ollydbg es mi herramienta de elección), encuentre el código que hace la comparación y corríjalo para que siempre sea verdadero, esto debería permitirle acceder a las macros.
fuente
Para Excel 2016 de 64 bits en una máquina con Windows 10, he usado un editor hexadecimal para poder cambiar la contraseña de un xla protegido (no he probado esto para ninguna otra extensión). Consejo: cree una copia de seguridad antes de hacer esto.
Los pasos que tomé:
¡Espero que esto haya ayudado a algunos de ustedes!
fuente
la extensión de su archivo de Excel cambia a xml. Y ábralo en el bloc de notas. encontrar el texto de la contraseña en el archivo xml.
ves como debajo de la línea;
(Perdón por mi mal ingles)
fuente
Si trabaja en
Java
usted puede intentarloVBAMacroExtractor
. Después de extraer los scripts de VBA,.xlsm
encontré la contraseña en texto sin formato.fuente