elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Ofuscación de codigo en VB6
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ofuscación de codigo en VB6  (Leído 18,534 veces)
OfTheVara

Desconectado Desconectado

Mensajes: 46


Ver Perfil
Ofuscación de codigo en VB6
« en: 19 Enero 2023, 14:21 pm »

Hola,

He escrito un programa en VB6 que usa una clave de registro, y quiero ponerselo complicado al hacker, en la medida de lo posible. O al menos, no tan facil.

Leí que para ofuscar código conviene cambiar el nombre a las variables y las funciones. Pero he visto en los programas de Decompilación que lo que te aparece son nombres genéricos, como "var_510C91=57".

Osea, ¿cambiar el nombre de las variables y procedidimientos sería una tontada gorda?

Estoy usando VBDecompiler v7.9 (tiene ya 12 años) para entender como se vería el código nativo desde el punto de vista de un decompilador.

Mi segunda pregunta es si conoceís algun Packer para VB6. Creo que esos programas te pueden inflar el código (añadiendo código basura) para dificultar el entendimiento.  ¿habría que inflar el código o mejor comprimirlo?

Y ademas de todo eso, se me ocurren preguntas como, por ejemplo, la función crítica que quieres proteger, dividirla en varias funciones esparcidas por muchos modulos diferentes. ¿eso ayudaría? ¿o da igual que esté en un mismo modulo que en modulos diferentes?

Otra pregunta, ¿Si hago que se desborde una variable en mitad del codigo (por ejemplo Variable_Tipo_Byte=3450) para que salte a un "Goto Error", ¿ese tipo de saltos ayudarian a despistar?

muchas gracias









En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ofuscación de codigo en VB6
« Respuesta #1 en: 19 Enero 2023, 17:34 pm »

Hola!

Osea, ¿cambiar el nombre de las variables y procedidimientos sería una tontada gorda?

El de las variables no es necesario, pero de los procedimientos si, pues se ven en el desensamblado.

Mi segunda pregunta es si conoceís algun Packer para VB6. Creo que esos programas te pueden inflar el código (añadiendo código basura) para dificultar el entendimiento.  ¿habría que inflar el código o mejor comprimirlo?

En el pasado hubo varios packers para VB6. Como es un producto discontinuado hace años, es difícil saber si los packers siguen soportándolo.
En general, el packer agrega codigo, lo que hace que el ejecutable sea mas grande; pero dependiendo del packer, puede que no sea mayor problema.

Y ademas de todo eso, se me ocurren preguntas como, por ejemplo, la función crítica que quieres proteger, dividirla en varias funciones esparcidas por muchos modulos diferentes. ¿eso ayudaría? ¿o da igual que esté en un mismo modulo que en modulos diferentes?

Todo lo puedas hacer para que el metodo que estás implementado no sea algo "lineal", mejor.
No sólo dividir en varias partes, sinó que hacer chequeos random de cosas que no necesariamente hacen a todo el proceso. Por ej.si escribes algo en el registro, no verificas todo el contendio, sino partes y en distintos momentos.

Otra pregunta, ¿Si hago que se desborde una variable en mitad del codigo (por ejemplo Variable_Tipo_Byte=3450) para que salte a un "Goto Error", ¿ese tipo de saltos ayudarian a despistar?

Si, pueden servir. Para reversers inexpertos que no entienden completamente cómo funciona VB6 internamente, suele servir. Pero no pienses que eso solo va a ser
suficiente.

Una idea: Si lo que escribes en el registro es una clave de activacion del software, puedes hacer que el chequeo de la misma sea en diferentes estados. Por ej: El chequeo "principal" (el que haces despues de hacer click en "registrar") puede hacer un chequeo "de alto nivel": que el codigo tenga largo X, empiece/termine/contenga cierto char o secuencia, que uno o varios de los chars sea un checksum, etc.
Y luego, en forma random (por eventos, timers, etc) haces otros chequeos: que una parte del codigo cumpla con una funcion X, que partes del codigo sean igual a una cadena X (menos recomendable), que cierta operacion sobre ciertos chars de un valor numerico, etc.

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

OfTheVara

Desconectado Desconectado

Mensajes: 46


Ver Perfil
Re: Ofuscación de codigo en VB6
« Respuesta #2 en: 19 Enero 2023, 20:09 pm »

Hola!

El de las variables no es necesario, pero de los procedimientos si, pues se ven en el desensamblado.

En el pasado hubo varios packers para VB6. Como es un producto discontinuado hace años, es difícil saber si los packers siguen soportándolo.
En general, el packer agrega codigo, lo que hace que el ejecutable sea mas grande; pero dependiendo del packer, puede que no sea mayor problema.

Todo lo puedas hacer para que el metodo que estás implementado no sea algo "lineal", mejor.
No sólo dividir en varias partes, sinó que hacer chequeos random de cosas que no necesariamente hacen a todo el proceso. Por ej.si escribes algo en el registro, no verificas todo el contendio, sino partes y en distintos momentos.

Si, pueden servir. Para reversers inexpertos que no entienden completamente cómo funciona VB6 internamente, suele servir. Pero no pienses que eso solo va a ser
suficiente.

Una idea: Si lo que escribes en el registro es una clave de activacion del software, puedes hacer que el chequeo de la misma sea en diferentes estados. Por ej: El chequeo "principal" (el que haces despues de hacer click en "registrar") puede hacer un chequeo "de alto nivel": que el codigo tenga largo X, empiece/termine/contenga cierto char o secuencia, que uno o varios de los chars sea un checksum, etc.
Y luego, en forma random (por eventos, timers, etc) haces otros chequeos: que una parte del codigo cumpla con una funcion X, que partes del codigo sean igual a una cadena X (menos recomendable), que cierta operacion sobre ciertos chars de un valor numerico, etc.

Saludos!

Gracias MCKSys!

Entonces, le cambio el nombre a procedimientos, funciones y a los nombres de modulos y formularios.

Las variables y Constantes no hace falta. Por ejemplo:

PUBLIC Const Contraseña=345

¿la palabra Contraseña no va a aparecer en ningun decompilador?

Respecto al ultimo punto, yo lo que tengo es una key de 8 caracteres que mete el usario, por ejemplo:

KeyEntrada="jeb8l9aq"

El Hacker va encontrar ese string en el Decompiler. Eso es impepinable.

A partir de ese string yo tengo que realizar operaciones con el valor ascii de esos caracteres para comprobar si es correcta.

Es decir, al final tengo que componer un vector de 8 bytes:

VectorKey(0 to 7) as byte

Y sobre ese Vectorkey hacer las operaciones pertinentes.  ¿como hago para despistar y que no me siga la pista desde el string hasta la composicion de ese VectorKey?  por ejemplo, con un primer timer meto los 4 primeros caracteres en VectorKey. Con un segundo timer meto los ultimos 4. Con un tercer timer creo un VectorKey2 que a su vez copia los datos de VectorKey. Y, finalmente, con un cuarto timer hago las operaciones.

¿sería asi la idea?   :huh:

En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ofuscación de codigo en VB6
« Respuesta #3 en: 19 Enero 2023, 20:48 pm »

Hola!

Las variables y Constantes no hace falta. Por ejemplo:

PUBLIC Const Contraseña=345

¿la palabra Contraseña no va a aparecer en ningun decompilador?

No.

Y sobre ese Vectorkey hacer las operaciones pertinentes.  ¿como hago para despistar y que no me siga la pista desde el string hasta la composicion de ese VectorKey?  por ejemplo, con un primer timer meto los 4 primeros caracteres en VectorKey. Con un segundo timer meto los ultimos 4. Con un tercer timer creo un VectorKey2 que a su vez copia los datos de VectorKey. Y, finalmente, con un cuarto timer hago las operaciones.
¿sería asi la idea?   :huh:

Como te dije antes, una buena idea es pensar la operacion de registro de modo que la verificación se pueda hacer en partes, en distintos momentos. Los diferentes chequeos deben ser suficientes para determinar si el registro es correcto, sin tener que ser los mismos entre sí. Además, repartirlos en diferentes modulos/funciones, aumenta la complejidad del análisis.

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

OfTheVara

Desconectado Desconectado

Mensajes: 46


Ver Perfil
Re: Ofuscación de codigo en VB6
« Respuesta #4 en: 20 Enero 2023, 00:47 am »

Hola!

No.

Como te dije antes, una buena idea es pensar la operacion de registro de modo que la verificación se pueda hacer en partes, en distintos momentos. Los diferentes chequeos deben ser suficientes para determinar si el registro es correcto, sin tener que ser los mismos entre sí. Además, repartirlos en diferentes modulos/funciones, aumenta la complejidad del análisis.

Saludos!

Y si ofusco el código con Themida, ¿me puedo despreocupar de los strings, de cambiar nombres, de hacer la verificación por partes, etc...?  ¿o debo seguir haciendolo igualmente?
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ofuscación de codigo en VB6
« Respuesta #5 en: 20 Enero 2023, 03:01 am »

Hola!

Themida es un buen packer, pero VB6 tiene puntos débiles y alguien con experiencia lo puede evitar. No cometas el error de confiar sólo porque has usado un packer (el que sea).

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

karmany
Moderador
***
Desconectado Desconectado

Mensajes: 1.614


Sueñas que sueñas


Ver Perfil WWW
Re: Ofuscación de codigo en VB6
« Respuesta #6 en: 30 Enero 2023, 23:03 pm »

Efectivamente, como te dice MCKSys Argentina, Themida es un packer brutal pero VB6 tiene puntos débiles y uno de ellos es que todo programa llama a MSVBVM60.dll que está en system32 o sysWOW64, pero si tú creas un archivo modificado MSVBVM60.dll y lo dejas en el mismo directorio de tu programa, tu programa ya no buscará en system y lo hará en tu directorio. Esto es un punto muy débil y yo lo exploté en un VB6 con Themida.

Por otro lado, me ha llamado mucho la atención que uses VB6; estamos hablando de un lenguaje que se lanzó creo que hace un cuarto de siglo... Aunque es un lenguaje muy intuitivo y fácil, igual es mejor usar herramientas más actualizadas...
En línea

OfTheVara

Desconectado Desconectado

Mensajes: 46


Ver Perfil
Re: Ofuscación de codigo en VB6
« Respuesta #7 en: 1 Febrero 2023, 12:47 pm »

Efectivamente, como te dice MCKSys Argentina, Themida es un packer brutal pero VB6 tiene puntos débiles y uno de ellos es que todo programa llama a MSVBVM60.dll que está en system32 o sysWOW64, pero si tú creas un archivo modificado MSVBVM60.dll y lo dejas en el mismo directorio de tu programa, tu programa ya no buscará en system y lo hará en tu directorio. Esto es un punto muy débil y yo lo exploté en un VB6 con Themida.

Por otro lado, me ha llamado mucho la atención que uses VB6; estamos hablando de un lenguaje que se lanzó creo que hace un cuarto de siglo... Aunque es un lenguaje muy intuitivo y fácil, igual es mejor usar herramientas más actualizadas...

Karmany, un problema que tengo con Themida es que mi programa me tarda muchísimo en cargar, del orden de 20 segundos!!, y sin usar ninguna macro todavía. ¿conoces otras alternativas a Themida para probar? 
En línea

OfTheVara

Desconectado Desconectado

Mensajes: 46


Ver Perfil
Re: Ofuscación de codigo en VB6
« Respuesta #8 en: 3 Febrero 2023, 20:19 pm »

Hola!

Themida es un buen packer, pero VB6 tiene puntos débiles y alguien con experiencia lo puede evitar. No cometas el error de confiar sólo porque has usado un packer (el que sea).

Saludos!

En un packer como Themida que usa Macros con virtualización, ¿lo primero donde mira el Hacker son las funciones que estan protegidas con macros?

Es decir, posiblemente sea mejor no virtualizar el código que quieres proteger, y usar las macros para código de relleno que no va a ninguna parte. ¿tendría sentido o sería un riesgo?
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ofuscación de codigo en VB6
« Respuesta #9 en: 5 Febrero 2023, 01:46 am »

En un packer como Themida que usa Macros con virtualización, ¿lo primero donde mira el Hacker son las funciones que estan protegidas con macros?

Puede que sí como que no. Depende de quien mire el código.

Es decir, posiblemente sea mejor no virtualizar el código que quieres proteger, y usar las macros para código de relleno que no va a ninguna parte. ¿tendría sentido o sería un riesgo?

No conozco mucho sobre el uso de este packer en particular, pero ya te hemos dicho que VB6 tiene problemas con los packers. Incluso karmany te ha confirmado lo anterior con este mismo packer.

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Introduccion a la ofuscacion de codigo c#
.NET (C#, VB.NET, ASP)
aixeiger 3 4,333 Último mensaje 30 Agosto 2012, 15:34 pm
por Keyen Night
ofuscación
Scripting
CodeSource 2 2,851 Último mensaje 5 Marzo 2013, 20:58 pm
por CodeSource
Ofuscacion de codigo
Ingeniería Inversa
Hackkemate 6 5,456 Último mensaje 14 Mayo 2013, 00:18 am
por mr.blood
Ofuscación
Programación C/C++
Caster 6 3,310 Último mensaje 10 Noviembre 2013, 15:16 pm
por rir3760
Tecnicas de Ofuscación
Ingeniería Inversa
SteelHern 1 3,105 Último mensaje 19 Enero 2015, 16:04 pm
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines