Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Codificar Archivos (C++)

Estas en el tema de Codificar Archivos (C++) en el foro de C/C++ en Foros del Web. Bueno, no se si se dice así... paso a contar: hice un programa en C++, tiene 4 archivos binarios y una imagen (tipo Logo), ya ...
  #1 (permalink)  
Antiguo 26/02/2011, 08:40
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años, 8 meses
Puntos: 20
Codificar Archivos (C++)

Bueno, no se si se dice así... paso a contar: hice un programa en C++, tiene 4 archivos binarios y una imagen (tipo Logo), ya hice el instalador y anda todo perfecto, lo único que no me gusta mucho es que si entro a la carpeta donde se instaló, se ven todos los archivos (el .exe, los 4 binarios y la imagen) y por ejemplo, si alguien quisiera, puede modificar la imagen, guardarla con el mismo nombre y aparece SU logo en mi programa, entonces...

¿me pueden decir como hacer para que la imagen se guarde en un archivo codificado/encriptado (o como se diga)?

O si saben como se llama esa acción, para saber como buscar información, porque lo que tampoco se es si eso lo hace el programa C++ en sí o el instalador... pero quiero que lo haga alguno de esos dos, no uno tercero porque estamos en la misma, es como que le diga al cliente: "ahora codifique la imagen con este programa así no la puede cambiar "

Gracias y saludos.

PD: la librería que uso es wxWidgets
  #2 (permalink)  
Antiguo 28/02/2011, 03:29
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 6 meses
Puntos: 73
Respuesta: Codificar Archivos (C++)

Lo más fácil sería hacerte un programilla que, de alguna manera, te cifre el archivo de imagen (por ejemplo, algún cambio de orden de los bytes del archivo, o cambiar los valores de la cabecera del archivo de imagen para hacerlo irreconocible como archivo de imagen). Añade a tu programa una función que se ejecute durante el proceso de inicialización al arrancar el programa y que deshaga los cambios que hiciste al archivo de la imagen. De esta forma, solamente se podrá ver una imagen que haya sido previamente codificada por tí.
  #3 (permalink)  
Antiguo 28/02/2011, 06:50
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años, 8 meses
Puntos: 20
Respuesta: Codificar Archivos (C++)

Entiendo. Lo voy a probar, gracias.
  #4 (permalink)  
Antiguo 01/03/2011, 18:24
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 14 años, 2 meses
Puntos: 9
Respuesta: Codificar Archivos (C++)

que no es mas facil comprobar la integridad de tu imagen con una funcion hash?, es decir, sacas el md5 de tu imagen lo cual te debe dar una cadena de n caracteres, entonces haces que tu programa antes de mostrar la imagen compare esa cadena que tu sacaste con el md5 de la imagen en tu directorio, si no es el mismo que muestre un error o algo asi.
  #5 (permalink)  
Antiguo 01/03/2011, 19:50
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: Codificar Archivos (C++)

Cita:
Iniciado por Trovaz Ver Mensaje
que no es mas facil comprobar la integridad de tu imagen con una funcion hash?, es decir, sacas el md5 de tu imagen lo cual te debe dar una cadena de n caracteres, entonces haces que tu programa antes de mostrar la imagen compare esa cadena que tu sacaste con el md5 de la imagen en tu directorio, si no es el mismo que muestre un error o algo asi.
Me parece mucho mejor esta idea. Ya que con la otra si uno cierra con fuerza bruta un programa los archivos van a quedar mal y vas a tener serios problemas.
  #6 (permalink)  
Antiguo 01/03/2011, 19:51
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años, 8 meses
Puntos: 20
Respuesta: Codificar Archivos (C++)

No conocía la función Hash, estuve leyendo un poco, pero por lo poco que leí, es para codificar cadenas, ¿como seria con el tema de archivos? porque si decís que codifique el nombre del archivo entonces estoy en la misma, porque el que cambie la imagen va a poner el mismo nombre... ¿que tan equivocado estoy?


Gracias.

PD: mientras tanto sigo leyendo
  #7 (permalink)  
Antiguo 01/03/2011, 20:01
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: Codificar Archivos (C++)

Tenes que buscar sobre MD5 aplicado a archivos. Hay muchos algoritmos en internet.
  #8 (permalink)  
Antiguo 01/03/2011, 20:14
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años, 8 meses
Puntos: 20
Respuesta: Codificar Archivos (C++)

Perfecto! Ya estoy mas cerca...

Cita:
P: ¿Qué son esos extraños archivos MD5 que acompañan las imágenes ISO de los CDs?

Los archivos con extensiones .md5 y .sha1 contienen los checksums para las imágenes ISO actuales del CD. Un checksum es algo parecido a las huellas dactilares de los archivos. Tal como una huella digital identifica a una persona en particular, un checksum identifica al archivo al cual pertenece. (...)
Más información sobre MD5 y programas para varios sistemas operativos puede ser encontrada en LinuxISO.org y en The MD5 Protocol Documentation.
Fuente

O sea que con un programa, por ejemplo el MD5Summer, "saco" el md5 de la imagen y en el código de mi programa lo comparo para ver si es igual.

Lo pruebo y les cuento.

Última edición por Payaso73; 01/03/2011 a las 20:15 Razón: Agrego fuente de cita
  #9 (permalink)  
Antiguo 01/03/2011, 21:08
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 10 meses
Puntos: 260
Sonrisa Respuesta: Codificar Archivos (C++)

Hola,

Cita:
Iniciado por Payaso73 Ver Mensaje
... O sea que con un programa, por ejemplo el MD5Summer, "saco" el md5 de la imagen y en el código de mi programa lo comparo para ver si es igual. ...
Si guardas el hash MD5 en el .exe, solamente es necesario cambiar el valor del hash por el valor del MD5 de la nueva imagen y cambiar la imagen para reemplazar tu logo.

Digo pues ... tanto MD5 y un editor hexadecimal o un poco de conocimiento de assembler te permite modificarlo; para eso guarda la imagen como un 'Resource' dentro del .exe y cárgala desde allí, el conocimiento necesario para reemplazar tu logo es el mismo. http://wiki.wxwidgets.org/Embedding_PNG_Images

Si realmente es tan necesario que no cambien tu logo por ningún otro, usa un método de criptografía asimética con llave pública y privada, dentro del .exe distribuye la llave pública, que permite desencriptar o validar la firma digital de la imágen pero no encriptar ningúna otra ni firmar; para eso necesitas la llave privada. Pero bueno ... eso es otra historia.

Saludos,
  #10 (permalink)  
Antiguo 02/03/2011, 06:27
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años, 8 meses
Puntos: 20
Respuesta: Codificar Archivos (C++)

Bueno gracias a todos, la verdad que en la universidad dimos muy básico y me las estoy rebuscando solo, así que gracias por responder...

La imagen en el programa está en la parte de "Acerca de..." y tiene la versión del programa y mi nombre (obviamente podría poner todo eso en un label, pero me gustó como quedaba en la imagen)

Ya me voy a poner a leer el wiki que dejaste, gracias HackmanC, una cosa que no entendí que quisiste decir es esto:

Cita:
Si guardas el hash MD5 en el .exe, solamente es necesario cambiar el valor del hash por el valor del MD5 de la nueva imagen y cambiar la imagen para reemplazar tu logo.
Yo decía, calcular el md5 de la imagen, guardar ese valor en una variable adentro del código, crear una función que calcule el md5 y cada vez que inicia el programa que se ejecute esa función y calcule el md5 de la imagen que esta en el directorio y compare el valor con el que tengo guardado en la variable... ¿vos me decís que así también se puede modificar?

Ojo! que yo no quiero competir con los piratas del C para ver si me pueden sacar la imagen o no, porque yo tampoco soy un experto en C++, solo quiero no dejársela tan fácil a usuarios básicos que cambien el nombre de la imagen y listo.

Gracias de nuevo!
  #11 (permalink)  
Antiguo 02/03/2011, 07:31
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: Codificar Archivos (C++)

Lo que el hablaba es de crackear el programa. Y como el dijo que lo integres como recurso tampoco es 100% util. He usado el programa resource hacker y ahi hasta podido cambiarle las imagenes al propio windows. Asi que yo no haria tanta incapie en este tema.
  #12 (permalink)  
Antiguo 02/03/2011, 20:04
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 10 meses
Puntos: 260
Sonrisa Respuesta: Codificar Archivos (C++)

Hola,

Cita:
Iniciado por Payaso73 Ver Mensaje
... Yo decía, calcular el md5 de la imagen, guardar ese valor en una variable adentro del código, crear una función que calcule el md5 y cada vez que inicia el programa que se ejecute esa función y calcule el md5 de la imagen que esta en el directorio y compare el valor con el que tengo guardado en la variable... ¿vos me decís que así también se puede modificar?

Ojo! que yo no quiero competir con los piratas del C para ver si me pueden sacar la imagen o no, porque yo tampoco soy un experto en C++, solo quiero no dejársela tan fácil a usuarios básicos que cambien el nombre de la imagen y listo. ...
Exactamente a eso me refería, para no dejársela tan fácil a los usuarios básicos y al mismo tiempo no complicarte demasiado ... simplemente mete la imágen como un 'resource' dentro del .exe y cárgala desde allí. Cualquier variable que grabes 'hard-coded' en el .exe se puede cambiar por otra (con el conocimiento relativo a eso).

Cita:
Iniciado por HackmanC Ver Mensaje
... para eso guarda la imagen como un 'Resource' dentro del .exe y cárgala desde allí, el conocimiento necesario para reemplazar tu logo es el mismo. http://wiki.wxwidgets.org/Embedding_PNG_Images
...

Cita:
Iniciado por sam90 Ver Mensaje
Lo que el hablaba es de crackear el programa. Y como el dijo que lo integres como recurso tampoco es 100% util. He usado el programa resource hacker y ahi hasta podido cambiarle las imagenes al propio windows. Asi que yo no haria tanta incapie en este tema.
Bueno, inclusive también me equivoqué al indicar que usara encriptación asimétrica ... si guardas la llave publica en el .exe, también existe la posibilidad de cambiar la llave publica por otra y modificar un par de instrucciones 'jmp' en el código ensamblado.

La idea era simplemente indicar que puedes meter la imagen dentro del .exe y así ya no es tan fácil modificarla, pero tampoco es imposible.

Saludos,

Última edición por HackmanC; 02/03/2011 a las 20:09 Razón: publica x privada

Etiquetas: codificar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:52.