Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como proteger mis archivos para que no se modifiquen con otro programa externo (https://www.clubdelphi.com/foros/showthread.php?t=58456)

JoAnCa 21-07-2008 15:05:03

Como proteger mis archivos para que no se modifiquen con otro programa externo
 
Hola a todos
Quisiera saber como puedo proteger los archivos que me sirven de complemento a mi programa, para que no sean modificados por una aplicacion externa, es decir, que solo puedan ser modificados por mi programa.

Los archivos de mi aplicacion son: un .mdb, un .zip, dos .csv y uno Tipo File of record

Lo que no quiero es que, por ejemplo, me abran el (.zip) con el winzip o winrar y lo modifiquen. Quiero hacerle algo para que estos programas no lo reconozcan como archivo .zip, y den un error si intentan abrirlo. (Yo hago el .zip con mi propio programa, con un componente de Delphi).

Y hacer lo mismo con los demas para que no sean reconocidos por sus respectivas aplicaciones (Access, Bloc de Notas, etc.), solo por mi programa.

Espero que esto sea posible hacerse, o si no, que metodo seria bueno para lo que quiero :confused:

Neftali [Germán.Estévez] 21-07-2008 16:25:20

Lo primero que puedes hacer es cambiarles la extensión y ver si te funcionan. Eso dependerá de cómo los estés accediendo.
Por ejemplo, ADO si no recuerdo mal, permite acceder a ficheros MDB, aunque les hayas cambiado la extensión. Así pues si a tu Base de Datos MDB le colocas extensión .DWG (pr decir una) y configuras el ADOConexion la abrirá sin problemas.

Dependiendo del sistema/componente que uses para los ZIP, podrás hacer algo similar.

Es un primer paso.
Lo siguiente es proteger los ficheros utilizando las herramientas de cada uno. En este caso puedes utilizar password para ambos casos (tanto MDB como ZIP).

En el caso de los MDB aun puedes probar la opción de encriptación de la Base de Datos. Aunque ahora no recuerdo si es propia de Access o la soporta también ADO.

A partir de ahí podrías añadir encriptación propia; Pueder ser fácil con algun tipo de ficheros, pero con otros puede ser muy engorrosa.

Todo depende del nivel de "seguridad" que necesites.

Por último si todo esto te queda corta, tal vez sea necesario que te plantees cambiar a tipos de ficheros que de por sí, te ofrezcan más seguridad. En el caso de la Base de Datos está claro que puedes "saltar" a un SGBD (FB embebded, por ejemplo), en el resto habría que evaluarlo para cada caso.

Un saludo.

coso 21-07-2008 16:32:52

Hola,

podrias, simplemente, usar otras extensiones desconocidas (.aln, .ut, ...). Si quieres mas proteccion, entonces deberias "desformatearlos" : poner datos inservibles en ellos de tal manera que sus aplicaciones no lo pudieran leer (por ejemplo, bloques aleatorio en ciertas posiciones fijas, los cuales tu sabes la posicion y longitud). Si haces eso, ten en cuenta que los componentes que se usan en delphi buscaran el formato original, por lo que deberias, al abrir tu aplicacion, eliminar estos bloques, y al salir, volverlos a escribir. Otra manera seria usando las propiedades de proteccion de estos tipos de archivo (menos el .csv) : usando login / password en la base de datos, que solo lo "conoceria" tu programa, y lo mismo con el .zip. Otros trucos pueden ser que tu aplicacion guarde la ultima fecha de modificacion y longitud de estos ficheros, y si se modifican externamente, cambiando estos requisitos, se dice que estan corrompidos y no se abren. Tambien por eso deben haber componentes de encriptacion, que supongo que encriptaran al salir del programa y desencriptaran al abrirlo.

coso 21-07-2008 16:35:05

vaya neftali...te volviste a adelantar XD

Neftali [Germán.Estévez] 21-07-2008 16:56:17

Cita:

Empezado por coso (Mensaje 301899)
vaya neftali...te volviste a adelantar XD

Bueno, lo importante es el contenido.

No debe ser mala la respuesta cuando los dos andábamos "dando tiros al mismo árbol..." :D:D:D

JoAnCa 21-07-2008 21:07:25

Ya habia pensado en lo de cambiar las extensiones, pero si al mdb le das abrir con... access, se abre sin problemas. Tambien hay formas de burlar las contraseñas de access.

El nivel de seguridad que deseo debe ser el mayor posible, pues la aplicación es para el control del inventario de las PC con todos sus componentes internos, para evitar fraudes. Y los usuarios finales son informaticos, y saben como violar la seguridad de access.

Se me ocurrio la idea de insertar un bloque de datos al principio para hacerlo ilegible al access, y despues quitarlo cuando mi aplicación lo vaya a usar,
Pero no se como hacerlo, ni si se puede hacer :confused:

seoane 21-07-2008 22:13:54

Cita:

Empezado por Jose Caceres (Mensaje 302032)
Se me ocurrio la idea de insertar un bloque de datos al principio para hacerlo ilegible al access, y despues quitarlo cuando mi aplicación lo vaya a usar

Si es cuestión de "disfrazarse" lo mejor es ponerse un sombrero :D :
http://www.clubdelphi.com/foros/show...9&postcount=88

Por otro lado lo mejor es la encriptación:
http://delphi.jmrds.com/?q=node/31

O incluso un hash (md5 o sha1):
http://delphi.jmrds.com/?q=node/36

coso 21-07-2008 22:59:18

Hola de nuevo, otra manera seria colocando tu base de datos en un servidor externo el cual solo permitiese acceso a tu programa.

Neftali [Germán.Estévez] 22-07-2008 10:28:12

Cita:

Empezado por Jose Caceres (Mensaje 302032)
(1) Utilizar ficheros MDB
(2) El nivel de seguridad que deseo debe ser el mayor posible
(3) Y los usuarios finales son informaticos

Con esas tres premisas lo que intentas hacer es un "suicidio" en toda regla :D:D:D.

En serio, deberías plantarte cambiar los MDB por otro SGBD. FB por ejemplo te brindará la seguridad que necesitas.

Cita:

Empezado por Jose Caceres (Mensaje 302032)
Se me ocurrio la idea de insertar un bloque de datos al principio para hacerlo ilegible al access, y despues quitarlo cuando mi aplicación lo vaya a usar,
Pero no se como hacerlo, ni si se puede hacer

El problema de todos estos inventos, es que para trabajar con tu aplicación y ese fichero debes "desencriptarlo" en algun momento; Si le añades "basura" al inicio y luego vas a accederlo con ADO, deberás eliminarsela. En ese momento tu fichero queda desprotegido y por tanto vulnerable.

JoAnCa 22-07-2008 18:35:27

Seoane
Muy original el truquito del disfraz del sombrero, de verdad que esta "elegante" esa forma de ''esconder'' un archivo

Probe el metodo de encriptacion que me propones y me funcionó perfectamente, lo voy a usar hasta que pueda cambiar de SGBD como me sugiere Neftali.

Con respecto a lo del hash, pudieras decirme que es el hash? (o será necesario abrir otro hilo para ese tema)


Coso

No puedo usar un servidor externo, pues no siempre se va a usar en una red

Neftali

Se que los mdb son bastantes inseguros, pero es el que, hasta ahora, me es mas facil trabajar (respecto a hacer relaciones y crear las consultas).

Nunca he trabajado FB, me haria falta aprenderlo (e instalarlo por supuesto, no lo tengo), sabes de algun manual o tutorial?

He probado con Paradox, pero cuando ejecuto mi programa en una PC sin Delphi, me da error del BDE (ya puse un hilo preguntando eso), si puedes dime que hacer con ese error

Con respecto a la encriptacion (mientras aprenda FB o solucione lo del error de Paradox y el BDE), lo que pienso hacer es: copiar mi BD desencriptada y "vulnerable" oculta en algun lugar del disco, y al cerrar la aplicacion la encripto y la devuelvo a su lugar

seoane 22-07-2008 20:45:10

Cita:

Empezado por Jose Caceres (Mensaje 302301)
Seoane
Con respecto a lo del hash, pudieras decirme que es el hash?

Claro que si ;) :
Cita:

Empezado por wikipedia
En informática, Hash se refiere a una función o método para generar claves o llaves que representen de manera casi unívoca a un documento, registro, archivo, etc., resumir o identificar un dato a través de la probabilidad, utilizando una función hash o algoritmo hash. Un hash es el resultado de dicha función o algoritmo.

En resumen un hash es una función que a partir de un puñado de bytes genera un identificador (32 caracteres en el caso del md5). Si se cambia aunque solo sea un byte y se vuelve a calcular el hash, este sera diferente.

La mejor forma de usar esto en tu caso es calcular el hash de los archivos que quieres proteger cada vez que los modifiques y guardarlo en lugar seguro (cifrandolo si es necesario), luego cada vez que vayas a usar la información solo tienes que volver a calcular el hash y comprobar que es igual que que tienes guardado.


La franja horaria es GMT +2. Ahora son las 13:07:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi