Jump to content

Ofuscar codigo


bigpetroman

Recommended Posts

amigos, saludos a todos, quisiera preguntarles a ver si alguno conoce un método para OFUSCAR (encryptar) codigo de VBA (macros), hoy tengo rato buscando en internet y realmente no he conseguido nada en concreto para VBA, he leido un poco sobre como hacerlo para otros lenguajes pero no he visto nada para las macros de Excel.

aquí en el foro en visto un par de archivos con el codigo encryptado y quisiera experimentar a ver que tal, para aprender algo adicional, no se sabe cuando podemos necesitar algo así

gracias

Link to post
Share on other sites

saludos [uSER=9328]@Gerson Pineda[/uSER], realmente proteger el archivo es algo complicado y no es 100% seguro como ya se ha planteado en diversos temas.

pero con esto de la ofuscacion sería mas que todo para "espantar" a los pocos conocedores de programación ya que un experto en el tema de seguro igualmente podria lograr obtener el código sin problemas

por ejemplo

SumaTotal = Precio * Cantidad * Meses[/CODE]

es más fácil de entender que esto:

[CODE]124abh2568 = 45879sscb * 1236gbx * adfafds456[/CODE]

y eso es lo que se logra con la ofuscación; en esencia es sustituir variables y nombres de funciones por texto con algun tipo de codificación.

es simplemente para experimentar.

no has visto algo así?

Link to post
Share on other sites

Ah! ahora entiendo hacia que apuntas sobre lo de "engañar" a un usuario no muy experto, si lo he visto, incluso cuando elaboro mis proyectos y uno que otro privados, intento "ofuscarlos" por aquello de las dudas jeje

Unas de mis practicas (buenas o malas, no se) es que si no voy a usar una variable mas de una vez, para que crearla?, desde luego alguien me preguntara, pero no se supone que es buena practica declarar las variables? mi respuesta seria: no siempre, puesto que mi intensión es fastidiar aquellos que intentan trastocar mis códigos jeje

Otra buena practica es usar controles (en formularios) ocultos o no visibles, pero que tienen una funcion

Mis comentarios no te serán de mucha ayuda pero algo, es algo:D

Saludos estimado

Link to post
Share on other sites

Esta función es una forma fácil para encriptar un texto.

La misma función sirve para desencriptar.

Function Encriptar(Texto) As Variant
For x = 1 To Len(Texto): Encriptar = Encriptar & Chr(255 - Asc(Mid(Texto, x, 1))): Next
End Function
[/CODE]

Link to post
Share on other sites

gracias a ambos, toda sugerencia es buena, la idea es ir aprendiendo.

mi pregunta es por si alguien lo ha realizado?, si existe una forma de hacerlo "automático", la función de [uSER=46507]@Macro Antonio[/uSER] funciona, pero hay que busar una forma de indicarle a la función todo el codigo de un modulo o una función y que convierta solo lo que se puede, pues las palabras claves del VBA no se pueden modificar; por ejemplo [uSER=33269]@verzulsan[/uSER] compartio en este mesaje un archivo para encriptar, pero el propio código del archivo está encriptado (ofuscado)

Guía para un código legible, comprensible y mantenible.

la idea es hacer algo así, ofuscar por completo el codigo de un archivo

saludos

Link to post
Share on other sites

Hola [uSER=133908]@bigpetroman[/uSER]

Mi hermano [uSER=143023]@Riddle[/uSER] me recomendó en el aporte de https://www.ayudaexcel.com/foro/threads/cuentas-de-usuarios-permisos-para-uso-de-menu-formulario.33139/, cifrar o descifrar, el cual puedes ver en el siguiente link.

http://www.vbaexpress.com/kb/getarticle.php?kb_id=951

Quizás no sea lo que buscas pero algo te puede ser util.

P.D. Aun no lo he hecho o estudiado pero está en mis planes.

Mis respetos hermano.

Link to post
Share on other sites

muchas gracias estimado [uSER=98799]@Enigma25[/uSER], es mas o menos lo mismo indicado por [uSER=46507]@Macro Antonio[/uSER], aunque algo mas complejo claro jejejjee;

al final lo que se busca es eso, encriptar algo, pero la idea es hacerlo con todo el codigo de una vez y que solo cambie las variables y nombres de funciones y/o procedimientos y no tener que hacerlo "manualmente" ya que sería una locura en un codigo mas o menos complejo.

seguire buscando a ver si consigo algo (para otros codigos existe, php, javascript, c,... para VBA debería también existir creo)

gracias

Link to post
Share on other sites

Lamentablemente, un problema de última hora no me ha permitido irme de vacaciones, por lo que me ha sido posible dedicarme al tema.

El adjunto presenta un formulario que encripta/desencripta todo el proyecto VBA a la vez.

El proceso consta de 3 pasos:

1) Guardamos todo el código VBA en un listbox con indicación del módulo al que pertenece y su número de línea.

2) Eliminamos todas la líneas de código del proyecto VBA.

3) Encriptamos o desencriptamos, según sea el caso, y añadimos la línea de código VBA al módulo y línea correspondiente.

Para no tener problemas con el editor de VBA al encriptar, se le añade por delate a todas las líneas de código el string "Rem $$$", de esta manera toma la línea como comentario y nos evitamos los posibles errores de compilación. Al desencriptar este string se elimina.

Al encriptar cada caracter se convierte en 3 digitos que corresponden al complemento de 255 de su código Ascii.

Si funciona correctamente, se podría encriptar/desencriptar tantas veces como fuera necesario.

Ya comentarás que tal va.

Encriptador VBA.xls

Link to post
Share on other sites

Marcus Antonius, conocido también como Marco Antonio el Triunviro, militar político, ¿y tu que?

Dejasta las Guerras de las Galias y la Guerra Civil para dedicarte a la guerra de la programación, ¿entonces? no te queda otra. jejejjejejejje.

Pregunto a Macro Antonio si después de encriptar un libro con macros, si de alguna forma es posible desincriptarlo, sin tu ejemplo

Link to post
Share on other sites

[uSER=46507]@Macro Antonio[/uSER], de verdad que muchas gracias , excente el aporte para realizar la encriptación del código, de esta forma siempre necesitaras el programa para poder generar un archivo utilizable ya que el archivo encriptado no puede ser usado directamente.

sin embargo creo que no he sabido explicarme bien; mi idea sería entregarle a la persona un archivo completamente funcional pero con el código modificado para "complicar" el entendimiento del mismo, sería como encriptar solo parte del código (nombre de funciones y variables), sería algo como esto

Código original

Sub Ejemplo()
Dim nTotal As Long
Dim nSumando01 As Long
Dim nSumando02 As Long
Dim n As Long

For n = 1 To 30
nSumando01 = Range("A" & n).Value
nSumando02 = Range("B" & n).Value
nTotal = nTotal + nSumando01 + nSumando02
Range("C" & n).Value = nSumando01 + nSumando02
Next
Range("C" & n).Offset(1, 0).Value = nTotal

End Sub[/CODE]

Código Ofuscado, modificado, encriptado, etc.

[CODE]Sub i10100110()
Dim i11000110 As Long
Dim i10110110 As Long
Dim i10101110 As Long
Dim i10100100 As Long

For i10100100 = 1 To 30
i10110110 = Range("A" & i10100100).Value
i10101110 = Range("B" & i10100100).Value
i11000110 = i11000110 + i10110110 + i10101110
Range("C" & i10100100).Value = i10110110 + i10101110
Next
Range("C" & i10100100).Offset(1, 0).Value = i11000110

End Sub[/CODE]

como ven, es exactamente el mismo código pero el segundo mucho mas complicado de entender; claro en algo tan sencillo como esto y tan corto pues cualquiera en un par de minutos logra entenderlo; pero en un archivo con una programación mucho mas compleja pues si que sería más dificil entender el códgio.

en esencia eso es lo que estoy buscado, como ya lo dije anteriormente he visto algo parecido pero para otros lenguajes, para VB o VBA no he visto aún.

nuevamente muchas gracias [uSER=46507]@Macro Antonio[/uSER] por el tiempo invertido, igualmente es un gran trabajo que se puede usar por ejemplo para guardar las copias de los trabajos realizados; espero que logres solucionar los problemas con tu viaje y así puedas disfrutar de esas vacaciones

saludos

Link to post
Share on other sites

Aquí va una primera versión, bastante modesta, que "ofusca" los nombres de los procedimientos y de las funciones, pero solo he podido aplicarlo a los módulos normales.

¿ Porqué ? El problema viene derivado de los controles ActiveX en los formularios.

Los controles tienen procedimientos de evento, y si los "ofuscamos", deberíamos "ofuscar" también los nombres de los controles, y eso, en principio, creo que no se puede hacer.

Por otro lado si no los "ofuscamos" hay que identificarlos, ¿Como?, se me ocurre preguntar por todos los posibles eventos de un control ActiveX, cosa algo tediosa y hasta cierto punto insegura.

Otra opción consiste en crear nombres con los objetos ActiveX .

Esto se podría hacer con una macro al principio de cada formulario.

Lo mejor sería que se pudieran identificar de alguna forma.

He buscado por Internet pero no he conseguido encontrar nada.

Lo suyo sería poder acceder a los dos combos del panel de código del editor de VBA.

A ver si alguien ve la luz.

Ofuscador VBA.xls

Link to post
Share on other sites

Excelente [uSER=46507]@Macro Antonio[/uSER], va tomando forma, voy a trabajar sobre este tema de manejar el IDE de VBA a ver que aprendo.

solo he podido aplicarlo a los módulos normales.

¿ Porqué ? El problema viene derivado de los controles ActiveX en los formularios.

Los controles tienen procedimientos de evento, y si los "ofuscamos", deberíamos "ofuscar" también los nombres de los controles, y eso, en principio, creo que no se puede hacer.

Por otro lado si no los "ofuscamos" hay que identificarlos, ¿Como?, se me ocurre preguntar por todos los posibles eventos de un control ActiveX, cosa algo tediosa y hasta cierto punto insegura.

yo creo que no sería necesario ofuscar los eventos de los controles, de ser necesario se ofuscaria el código asociado a dicho evento.

ofuscando funciones y procedimientos (no solo el nombre) pues sería mas que suficiente para "fastidiar" a los intrusos jejjeje.

como ya dije, excelente trabajo, muchas gracias, voy a "experimentar" a ver que consigo

Link to post
Share on other sites

Disculpen el abuso [uSER=1101]@Fleming[/uSER], [uSER=133908]@bigpetroman[/uSER], [uSER=46507]@Macro Antonio[/uSER], pero si pueden continuar con dicho proceso, ya que me parece y a todos que se debe continuar hasta lo máximo que pueda llegar.

No se si sea posible, pero se podría ofuscar todo?

Link to post
Share on other sites

gracias [uSER=46507]@Macro Antonio[/uSER], acabo de realizar unas pruebas y NO hacer el trabajo, creo que se debe a como están declaradas las variables, en el código que reconstruye:

'Variables
W.Cells.Clear: Fila = 0
For x = 0 To C.ListCount - 1
i1 = 0
If Left(C.List(x, 3), 4) = "Dim " Then i1 = 4
If i1 = 0 And Left(C.List(x, 3), 18) = "Public WithEvents " Then i1 = 18
If i1 = 0 And Left(C.List(x, 3), 7) = "Public " Then i1 = 7
If i1 = 0 And Left(C.List(x, 3), 7) = "Static " Then i1 = 7
If i1 > 0 Then ExplotarVariable Mid(C.List(x, 3), i1)
Next[/CODE]

se asume que la declaración de la variable comienza en la primera posición de la línea

If Left(C.List(x, 3), 4) = "Dim " Then i1 = 4

y no siempre es así, es mi caso pudiera ser asi

[CODE]Sub Acomodar_Datos()
Dim nFilaFin As Double
Dim rCelda As Range
Dim n As Double

Application.ScreenUpdating = False[/CODE]

como se nota la declaración NO está justo en el primer caracter de la línea, yo coloque unos TRIM para eliminar los espacios y al parecer funciona

[CODE]For x = 0 To C.ListCount - 1
i1 = 0
If Left(Trim(C.List(x, 3)), 4) = "Dim " Then i1 = 4
If i1 = 0 And Left(Trim(C.List(x, 3)), 18) = "Public WithEvents " Then i1 = 18
If i1 = 0 And Left(Trim(C.List(x, 3)), 7) = "Public " Then i1 = 7
If i1 = 0 And Left(Trim(C.List(x, 3)), 7) = "Static " Then i1 = 7
If i1 > 0 Then ExplotarVariable Mid(Trim(C.List(x, 3)), i1)
Next[/CODE]

seguire revisando

de verdad que muchas gracias, va excelente, sería cuestion de seguir probando

[uSER=46507]@Macro Antonio[/uSER] nuevamente muchas gracias

saludos

Link to post
Share on other sites

Excelente [uSER=46507]@Macro Antonio[/uSER], muchas gracias por tu ayuda, yo creo que ahora si tenemos suficiente material para lograr ofuscar nuestro código.

intentare hacer una version conjunta (para las funciones y las variables) y mas "educativa" para nosotros los mortales jejeje, y la colocare como aporte, te parece?; o si lo prefieres, luego de regresar de las vacaciones, creas el aporte directamente?, al fin y al cabo el merito es todo tuyo.

yo por ahora me voy a dedicar a completar mi aporte para la COPA AMERICA de futbol, ya está cerca; luego si me dedico al ofuscador.

nuevamente, muchas gracias

Link to post
Share on other sites

Archived

This topic is now archived and is closed to further replies.

Guest
This topic is now closed to further replies.
  • Crear macros Excel

  • Posts

  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy