[C con Clase] Protección de datos

Yan gdotta en telefonica.net
Mar Dic 30 00:58:33 CET 2008


Hola Arkiant, te contesto:

A> se que en las clases esta el protected y el 
A> private, pero eso no quita que alguien con un editor hexadecimal o 
A> cualquier programa pueda modificar un exe o una dll, no?

Efectivamente: el protected y el private protegen durante la escritura de código fuente, no frente a un acceso al programa binario.

A> Sería una buena opción usar una base de datos con esos datos para todos 
A> los usuarios del programa?
No me parece que reunir los datos en una bbdd sirva como protección en si mismo, sin otras medidas de seguridad. Al contrario, si es una bbdd estándar resulta mucho más fácil encontrar los campos que puede interesar adulterar.

A> Usando campos private o protected ( son dos cosas diferentes pero tienen 
A> mucha mas proteccion que un campo public ) estarán esas formulas 
A> protegidas de curiosos?
Como he dicho antes, me parece que no.

Como idea general, cuando intentas proteger tu código de intrusos, lo primero sería ver de que tipo de objeto quieres salvaguardar: 
- variables que están cambiando durante la ejecución del programa. Éstas están en memoria RAM y para acceder a ellas el intruso seguramente tendrá que modificar tu código ejecutable, cosa algo difícil, pero posible.
- Datos almacenados en fichero en disco. Éste es un punto fácilmente atacable (la base de datos, por ejemplo).
- Constantes almacenadas en el propio código ejecutable. También son relativamente fáciles de localizar.

También has de estimar la habilidad y dedicación que podría tener el intruso. Es inútil esforzarse con protecciones complejas cuando el intruso tiene una capacidad muy limitada de ataque o motivación insuficiente (¿consigue dinero si lo logra?).

El primer paso para proteger tus variables o constantes, es encriptarlas ligeramente: hacer un XOR con una constante, o partir las variables en 2 trozos.
Un segundo paso sería hacerlas redundantes: p.ej. el valor de hp puede estar almacenado en un lugar y en otro debe estar el cuadrado de hp. Cada vez que escribes hp, también has de modificar su cuadrado. Cada vez que lo lees. compruebas que hp y su cuadrado se corresponden; si no corresponden entras en una rutina de alarma o destrucción o lo que te parezca, pero que no sea muy inmediato, para no dar pistas al atacante.
Jugando con estas ideas de base: encriptación y redundancia puedes conseguir niveles de protección adecuados frente a un intruso no profesional.

Si te vas a enfrentar a un tipo armado con un desensamblador, que sabe lo que hace y con mucho tiempo y ganas, todo lo que te he dicho no te va a servir. Deberías, entonces, recurrir a herramientas de encriptado y protección profesional, que yo apenas conozco.

Espero haberte sido algo útil,
Yan.


Más información sobre la lista de distribución Cconclase