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!