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?