Excel Cómo descifrar el proyecto VBA que no se puede ver
Como parte importante de los derechos de propiedad intelectual, el código BA es cada vez más valorado. Sin embargo, la protección de los proyectos VBA es relativamente frágil.
Tengo un documento aquí que utiliza tecnología de cifrado para bloquear el proyecto VBA para que no se pueda ver. El "proceso" completo contiene un módulo estándar y tres procesos con aproximadamente 75 líneas de código. como documento de prueba.
La contraseña de protección del proyecto VBA es "shourou".
Si estás interesado en esto, ¡puedes descifrarlo!
Nota: El proyecto debe estar completamente descifrado, es decir, el proyecto VBA debe restaurarse, en lugar de simplemente leer o ver el nombre del proceso o el nombre del módulo.
El código aún se puede volcar
Módulo: ---------------------------- ------- mdlVBA ----------------------------------
Atributo VB_Name = "mdlVBA"
Opción explícita ''''Declaración de variable explícita
Opción Módulo privado ''''Proyecto externo deshabilitado
Const pública gstrUSER_MSG_TITLE como cadena = "ExcelHome.Net"
Función privada FieldsExists(intWsIndex como entero, opcional blnDisplayAlerts como booleano = True) como booleano
''''Función: verifique la hoja de trabajo especificada si el campo el nombre coincide con el nombre del campo incorporado
'''' Parámetros: intWsIndex: = índice de la hoja de trabajo: = si se muestra un cuadro de diálogo de advertencia cuando hay una discrepancia
Dim Ws como Excel .Worksheet
Dim astrFieldNames() como cadena
Dim vntHeader como variante
Dim I como entero
Dim intColumnSize Como entero p>
En caso de error, vaya a ErrorHandler
Seleccione caso intWsIndex
Caso 1
Establezca Ws = Hoja1
intColumnSize = 10 ' '''Número de campos
ReDim astrFieldNames(1 a intColumnSize)
astrFieldNames(1) = "OfficeID"
astrFieldNames(2) = "NombreOficina"
astrFieldNames(3) = "Región"
astrFieldNames(4) = "Provincia"
astrFieldNames(5) = "Ciudad"
astrFieldNames(6) = "Dirección"
astrFieldNames(7) = "StartData"
astrFieldNames(8) = "ExpiryData"
astrFieldNames(9) = "OfficeArea"
astrFieldNames(10) = "Reviser"
Fin de selección
vntHeader = Ws.Cells(1, 1) .Resize(1, intColumnSize).Value ''''Fila de encabezado
Para I = 1 a intColumnSize
Si no es StrComp(vntHeader(1, I), astrFieldNames(
I), vbTextCompare) = 0 Luego salga para
Siguiente
Si obtengo intColumnSize Entonces
FieldsExists = True
Else
Si blnDisplayAlerts = True Then
MsgBox Ws.Name amp; Chr$(34) amp; vntHeader(1, I) amp; Nombre " & Chr$(34) & astrFieldNames(I) & Chr$(34) & " no coincide ", vbExclamation, gstrUSER_MSG_TITLE
End If
End If
En caso de error, Ir a 0
Salir de la función
ErrorHandler:
Si ExcelHomeErrorHandler("Private Function FieldsExists") = True, entonces continúe con el siguiente
Función final
Función pública FileExists(strFileName As String) como booleano
''''Función: determinar si el archivo o carpeta existe
''''Parámetro: strFileName:=La ruta completa del archivo o carpeta que se va a verificar
FileExists = (Len(Dir(strFileName, vbDirectory)) gt; 0)
Función final
Función pública ExcelHomeErrorHandler(strProcName As String) como booleano
''''Función: Controlador de errores
''''Parámetros :strProcName:= Nombre del proceso de error
Dim strErrMessage As String
strErrMessage = "El programa se está ejecutando en" amp Chr$(34) amp strProcName amp; Se produjo un error durante el proceso.
" amp; vbCrLf amp; _
"Hora de error: " amp; Ahora amp; vbCrLf amp; _
" Código de error: " amp; Err.Number amp; vbCrLf amp; _
"Razón del error:" amp; Err.Description
Err.Clear ''''Borrar error
Si MsgBox(strErrMessage amp; vbCrLf amp; "¿Continuar?", vbExclamation vbYesNo, gstrUSER_MSG_TITLE) = vbYes Entonces
ExcelHomeErrorHandler = True
Else
Con aplicación
.StatusBar = False ''''Borrar la barra de estado
.DisplayAlerts = True ''''Restaurar cuadro de diálogo de advertencia
.EnableEvents = True ''''Restaurar eventos
.ScreenUpdating = True ''''Reanudar actualización de pantalla
Finalizar con
ExcelHomeErrorHandler = False
Finalizar si
Finalizar función