Ir al contenido


Foto

Como hago esto?


  • Por favor identifícate para responder
63 respuestas en este tema

#1 fleming

fleming

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 08 septiembre 2010 - 10:21

Saludos quisiera una mano estoy desarrollando una dll donde me ayudaron a usar esta funcion:



cpp
  1. var
  2.   ts : TStrings;
  3.   h : word; //creo
  4.   i: integer;
  5. begin
  6.   ts := TStringList.Create;
  7.   try
  8.       ts.LoadFromFile('prueba.txt');
  9.       for i:=0 to ts.Count -1 do
  10.       begin
  11.         h := FindWindow(nil, PCHAR(ts[i]));
  12.         if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0);
  13.       end;
  14.   finally
  15.       ts.Free;
  16.   end;
  17. end;



El problema que tengo es que si me modifican el archivo prueba.txt entonces no me vale el codigo, lo que quisiera saber es como hago para poner una comprobacion de ese archivo mediante el md5, en cuanto lo modifiquen no ejecute el programa donde tengo adjuntada la dll pa que estaria alterado el md5 de prueba.txt y en caso que prueba.txt tenga el mismo md5 declarado en la dll entonces proceda a ejecutar todo normal sin errores.. hay manera de hacerlo? me dieron de referencia esto:


http://delphi.jmrds.com/?q=node/11

pero no tengo idea de como implementar ese codigo T.T
  • 0

#2 Master23

Master23

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 230 mensajes
  • LocationSanto Domingo

Escrito 08 septiembre 2010 - 10:44

Bueno no entiendo muy bien pero creo que te puedo ayudar , lo mejor que puedes hacer es hacer en vez de un .text usas un .ini para guardar la configuración y leerlo al iniciar el programa digamos que creas una sección en el ini ejemplo.

[Conf]
md5=7882n23234k2m32

insertar un edit invisible que no estorbe en el form que cuando ejecutes el programa lo lea y y lo muestre en el edit el texto o md5  es diferente al que tienes programado entonces que se cierre, si necesitas más especificaciones  me avisas.espero haberte ayudado.
  • 0

#3 fleming

fleming

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 08 septiembre 2010 - 11:16

Bueno no entiendo muy bien pero creo que te puedo ayudar , lo mejor que puedes hacer es hacer en vez de un .text usas un .ini para guardar la configuración y leerlo al iniciar el programa digamos que creas una sección en el ini ejemplo.

[Conf]
md5=7882n23234k2m32

insertar un edit invisible que no estorbe en el form que cuando ejecutes el programa lo lea y y lo muestre en el edit el texto o md5  es diferente al que tienes programado entonces que se cierre, si necesitas más especificaciones  me avisas.espero haberte ayudado.


Hola gracias por tu respuesta, a ver si entiendo, me dices que la lista la haga no en un .txt sino en un .ini? que diferencia tendria? y eso que me indicas


[Conf]
md5=7882n23234k2m32

iria dentro del mismo .ini? pero igual cualquiera puede modificarlo y poner el md5 que quede el archivo, yo queria hacer algo basandome en esto:

http://rapidshare.co...886665/demo.rar

ve que ese proyecto tiene para ver el crc en 32 o 16 normal no hexadecimal, no se si podria integrar eso para verificar el crc al proyecto...

o si md5 es mas facil..


PD: el foro tiene problemas con conexion a la base de datos ¿es normal?


  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 08 septiembre 2010 - 11:19

PD: el foro tiene problemas con conexion a la base de datos ¿es normal?


Pues no, ya verificaremos eso, gracias por el interés y bienvenido a Delphiaccess.

Saludos.
  • 0

#5 fleming

fleming

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 08 septiembre 2010 - 11:21


PD: el foro tiene problemas con conexion a la base de datos ¿es normal?


Pues no, ya verificaremos eso, gracias por el interés y bienvenido a Delphiaccess.

Saludos.


Gracias por la bienvenida, soy webmaster de páginas webs me parece que el error del foro esta en la configuracion del la base de datos, si quieres me das tu correo y te echo una mano!
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 08 septiembre 2010 - 11:31

PD: el foro tiene problemas con conexion a la base de datos ¿es normal?


He hablado con la compañia que hospeda el foro y me comentan que estan teniedo sobrecarga en sus servidores.

Salud OS
  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 08 septiembre 2010 - 11:53

Volviendo al tema:

Sobre el asunto de los INI

http://www.delphiacc...hp?topic=3793.0
http://www.delphiacc....php?topic=79.0
http://www.delphiacc....php?topic=75.0

Sobre MD5

http://www.delphiacc...ll=0;fs=105#120
http://www.delphiacc...hp?topic=1220.0

Y hay otras opciones también del maestro seoane.

Saludos.

  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 08 septiembre 2010 - 12:04

Hola fleming,

¿Cuál es el propósito del archivo prueba.txt?
Si lo que se busca es que siempre se lea el mismo contenido del archivo ¿porqué no evitarnos el uso de dicho archivo y tener la información ya almacenada en el ejecutable?

Se puede agregar contenido al TStrings (por cierto, tener cuidado cuando se trabaja con clases abstractas) por código:



delphi
  1. ts.Add('texto');
  2. ts.Add(Otro más');
  3. ...



El asunto es que si en realidad el contenido es fijo y nunca se verá alterado, a mi humilde modo de ver, es preferible evitarse ese archivo y disponer de los datos ya en código. Eso es más seguro que tenerlos en el archivo.

Ahora bien, si la información es dinámica y tu quieres preveer que el archivo sea modificado entonces valiéndose de un algoritmo tipo Hash como MD5 es posible determinar si la información ha sido alterada. Bastará con recalcular el MD5 del archivo cuando sea modificado por tu sistema, y recuperarlo cada vez que se inicie.

El sitio que te han recomendado ya tiene una solución implementada, sólo debes hacer uso de dicha unidad, o mejor dicho crear una unidad con dicho código y luego añadiendo en la sección uses la unidad en cuestión. Ahora si tienes problemas con ello deberías indicarnos.

Por otro lado, te agradecería que en el futuro titules los post con un nombre más descriptivo.

Luego al hacer uso de dicho archivo, en algún lado debe quedar guardado el MD5 recalculado.... ya sea que se guarde en otro archivo, en el registro... No interesa. El asunto es que ese dato pueda ser recuperado para realizar la comprobación con el calculado:



delphi
  1. if MD5Recuperado = MD5Calculado
  2.   then ...
  3.   else ShowMessage('El archivo ha sido adulterado');



Por favor describe concretamente en que tienes dudas y explícanos el motivo y uso de dicho archivo.

Saludos,
  • 0

#9 fleming

fleming

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 08 septiembre 2010 - 12:12

Hola, gracias por tu respuesta, el

Hola fleming,

¿Cuál es el propósito del archivo prueba.txt?
Si lo que se busca es que siempre se lea el mismo contenido del archivo ¿porqué no evitarnos el uso de dicho archivo y tener la información ya almacenada en el ejecutable?

Se puede agregar contenido al TStrings (por cierto, tener cuidado cuando se trabaja con clases abstractas) por código:



delphi
  1. ts.Add('texto');
  2. ts.Add(Otro más');
  3. ...



El asunto es que si en realidad el contenido es fijo y nunca se verá alterado, a mi humilde modo de ver, es preferible evitarse ese archivo y disponer de los datos ya en código. Eso es más seguro que tenerlos en el archivo.

Ahora bien, si la información es dinámica y tu quieres preveer que el archivo sea modificado entonces valiéndose de un algoritmo tipo Hash como MD5 es posible determinar si la información ha sido alterada. Bastará con recalcular el MD5 del archivo cuando sea modificado por tu sistema, y recuperarlo cada vez que se inicie.

El sitio que te han recomendado ya tiene una solución implementada, sólo debes hacer uso de dicha unidad, o mejor dicho crear una unidad con dicho código y luego añadiendo en la sección uses la unidad en cuestión. Ahora si tienes problemas con ello deberías indicarnos.

Por otro lado, te agradecería que en el futuro titules los post con un nombre más descriptivo.

Luego al hacer uso de dicho archivo, en algún lado debe quedar guardado el MD5 recalculado.... ya sea que se guarde en otro archivo, en el registro... No interesa. El asunto es que ese dato pueda ser recuperado para realizar la comprobación con el calculado:



delphi
  1. if MD5Recuperado = MD5Calculado
  2.   then ...
  3.   else ShowMessage('El archivo ha sido adulterado');



Por favor describe concretamente en que tienes dudas y explícanos el motivo y uso de dicho archivo.

Saludos,


Hola Gracias por responder, el  propòsito de prueba.txt es poner los nombres de las ventanas que voy a cerrar, y los nombres de las clases de los ejecutables que estoy impidiendo abrir, es como un sistema de proteccion para no alterar el proposito del ejecutable que en este caso es un juego, hay muchos programas que alteran el juego y la idea es prohibir esos programas mientras el juego este abierto.. por eso necesito verificar que no sea alterado ese archivo no pongo todo en la dll porque son demasiados, y tendria que repetir linea por linea la funcion de cerrar la linea, la idea es que yo no actualize la dll, solo el archivo de texto ya que la dll esta encrustada en el ejecutable lo cual lo hace mucho mas pesado y el objetivo es solo actualizar dicha lista para eso seria bueno, encriptar la informacion y crear otro .txt donde este el md5 de dicho prueba.txt o no se que idea me puedes dar para actualizar la lista sin la necesidad de tocar el dll claro esta que si no se puede se haria lo del md5 en la dll.. no hay de otra.
  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 08 septiembre 2010 - 12:33

Hola,

Entonces el contenido del archivo es dinámico. Hay algunas alternativas, relativamente seguras: en primer lugar, ocultar el archivo en algún directorio ajeno... o en algún lugar alejado de cualquier usuario típico que no tenga alcance. Si es posible garantizar de que el archivo esté lejos de manos mal intencionadas entonces se puede evitar los cálculos de MD5 y directamente abrir el archivo.

En segundo lugar se podría considerar cifrar el texto. Hay diferentes algoritmos de cifrado, con una búsqueda del tema se encuentra mucho material.

Respecto a la posibilidad del MD5, entonces como dije: en algún lado debe quedar almacenado el valor calculado a fin de poder recuperarlo. Ya sea que esté almacenado en un archivo (y aquí volveríamos de nuevo a cuestionarnos... ¡¿y si alguien lo edita?!) o en el registro... no interesa... mientras se pueda recuperar.

Sólo debes crear la unidad Hashes que amablemente Seoane elaboró, guardarla y añadirla en uses para utilizar las funciones que esta dispone.

Si deseas considerar el uso de registro tienes a disposición la clase TRegistry. Esta clase tiene los métodos para leer y guardar claves en el registro. Lee la ayuda sobre ésta; en los foros también se ha hablado anteriormente sobre esto.

Saludos,
  • 0

#11 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 08 septiembre 2010 - 12:45

Por mi parte, pienso que la mejor forma es esconderlo y encriptarlo o incluirlo en el registro. No es bueno que esté a la vista, aún protegido por un Hash MD5.

¿Que pasa si lo modifican o lo borran? ¿Que decisión va a tomar tu programa?


Saludos.
  • 0

#12 fleming

fleming

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 08 septiembre 2010 - 12:53

Por mi parte, pienso que la mejor forma es esconderlo y encriptarlo o incluirlo en el registro. No es bueno que esté a la vista, aún protegido por un Hash MD5.

¿Que pasa si lo modifican o lo borran? ¿Que decisión va a tomar tu programa?


Saludos.


WOW tu fuiste quien me ayudo con la primera funcion muchas gracias por eso eh, con respecto a lo de esconderlo e encriptarlo, tenia en mente usar este cifrado:

http://www.ajpdsoft....p=getit&lid=217

el cual cifra en base64 pero junto a una clave el cual lo hace que nadie pueda descrifrarlo por no tener la clave (en caso que sepan que se usa ese cifrado) con recpecto al Md5 iria en el dll, si lo modifican, da error de md5, si lo borran, tampoco ejecuta ya que dice que "no esta X archivo necesario para poder ejecutar la aplicacion.. pero como te dije antes, soy novato me gusta mucho el delphi pero estoy iniciando no se como "integrar" ese cifrado que es un ejecutable y alli esta el source y meter que descifre junto con la clave que haya pues el archivo prueba.txt ya con eso seria un paso de que cualquiera puede ver el archivo + no sabe el contenido y lo del md5 es la mejor manera de protegerlo para que no pueda ser editada ni removida el texto de dicho archivo


  • 0

#13 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 08 septiembre 2010 - 01:09

...cifra en base64 pero junto a una clave el cual lo hace que nadie pueda descrifrarlo por no tener la clave (en caso que sepan que se usa ese cifrado) con recpecto al Md5 iria en el dll, si lo modifican, da error de md5, si lo borran, tampoco ejecuta ya que dice que "no esta X archivo necesario para poder ejecutar la aplicacion..


Me parece que te estás complicando un poco.  :)

1.- El objetivo de tu programa es matar otros que te estorban... Céntrate en un buen matador. Te comenté que si no puedes matar con WM_QUIT mata con TerminateProcess.

2.- Si descubres que tu archivo lista de programas prohibidos no existe o se modificó, ¿Que objeto tiene entonces tu programa? desde ese momento estás "anulado".  No te compliques con un sistema muy seguro de encriptación, es mas importante que no puedan localizar ese archivo de ninguna manera. Si lo hacen, da igual que no lo entiendan. Lo borran y listo.  ;)

Saludos.
  • 0

#14 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 08 septiembre 2010 - 01:10

Si bien he mencionado la posibilidad de cifrar el archivo, creo que es una técnica que a menos que de más ventajas que complicaciones es una técnica que debe evitarse.

Acompaño lo dicho por escafandra: hacer que el archivo esté oculto en un directorio que el usuario no pueda meter el dedo (o le provoque miedo meter el dedo).
Tu simplementes lees el archivo como viniste haciendo en caso de existir y comprobar que no ha sido adulterado.

Por ejemplo:


delphi
  1. if FileExist(RutaCompletaArchivo)
  2.   then ... ts.LoadFromFile(RutaCompletaArchivo)


Luego, por el tema del MD5 para no estar siendo recursivo y dando manija al tema de la "vulnerabilidad" de los archivos entonces quizá sea más seguro y adecuado guardar esto en el Registro... Es más yo guardaría en el registro lo siguiente:
1. La ruta completa y el nombre del archivo a recuperar
2. El MD5 calculado del archivo

De este modo al iniciar el sistema, se recuperarían estos dos valores. Primero compruebo de que exista el archivo, y en caso afirmativo calculo su MD5, si es igual al guardado en registro entonces se procede a su lectura y pasar los datos al TStrings. En caso de fallar alguna de estos pasos se daría un aviso informando de ello y/o abortar el proceso. Como he dicho: lee la ayuda sobre el uso de TRegistry.

Como veo que eres nuevo en esto de Delphi, para que no te compliques la vida haz esto:
1. Copia el código de la unidad Hashes
2. Ve a delphi, abre tu proyecto. Crea una unidad: File -> New -> Unit
3. Borra todo el contenido de dicha unidad y pega el código.
4. Guarda la unidad con el nombre Hashes.
5. Ve a la unidad de tu form principal (o en donde quieras y debas hacer uso de las funciones de MD5). Ubícate en la sección uses y agrega la unidad creada:

Por ejemplo:



delphi
  1. Unit Unit1;
  2. ...
  3.  
  4. uses
  5. bla, bla, bla, .... ,[b]Hashes[/b];



¡Listo! Ahora queda hacer uso de las funciones CheckSum y StrCheckSum en donde quieras.

Guarda y compila.

Saludos,
  • 0

#15 fleming

fleming

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 08 septiembre 2010 - 01:17

Si bien he mencionado la posibilidad de cifrar el archivo, creo que es una técnica que a menos que de más ventajas que complicaciones es una técnica que debe evitarse.

Acompaño lo dicho por escafandra: hacer que el archivo esté oculto en un directorio que el usuario no pueda meter el dedo (o le provoque miedo meter el dedo).
Tu simplementes lees el archivo como viniste haciendo en caso de existir y comprobar que no ha sido adulterado.

Por ejemplo:


delphi
  1. if FileExist(RutaCompletaArchivo)
  2.   then ... ts.LoadFromFile(RutaCompletaArchivo)


Luego, por el tema del MD5 para no estar siendo recursivo y dando manija al tema de la "vulnerabilidad" de los archivos entonces quizá sea más seguro y adecuado guardar esto en el Registro... Es más yo guardaría en el registro lo siguiente:
1. La ruta completa y el nombre del archivo a recuperar
2. El MD5 calculado del archivo

De este modo al iniciar el sistema, se recuperarían estos dos valores. Primero compruebo de que exista el archivo, y en caso afirmativo calculo su MD5, si es igual al guardado en registro entonces se procede a su lectura y pasar los datos al TStrings. En caso de fallar alguna de estos pasos se daría un aviso informando de ello y/o abortar el proceso. Como he dicho: lee la ayuda sobre el uso de TRegistry.

Como veo que eres nuevo en esto de Delphi, para que no te compliques la vida haz esto:
1. Copia el código de la unidad Hashes
2. Ve a delphi, abre tu proyecto. Crea una unidad: File -> New -> Unit
3. Borra todo el contenido de dicha unidad.
4. Guarda la unidad con el nombre Hashes.
5. Ve a la unidad de tu form principal (o en donde quieras y debas hacer uso de las funciones de MD5). Ubícate en la sección uses y agrega la unidad creada:

Por ejemplo:



delphi
  1. Unit Unit1;
  2. ...
  3.  
  4. uses
  5. bla, bla, bla, .... ,[b]Hashes[/b];



¡Listo! Ahora queda hacer uso de las funciones CheckSum y StrCheckSum en donde quieras.

Guarda y compila.

Saludos,

Ok manos a la obra!. cualquier cosa avíso o adjunto el proyecto para no volverme loco!. muchisimas gracias por todas las respuestas!.
  • 0

#16 fleming

fleming

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 08 septiembre 2010 - 01:24

...cifra en base64 pero junto a una clave el cual lo hace que nadie pueda descrifrarlo por no tener la clave (en caso que sepan que se usa ese cifrado) con recpecto al Md5 iria en el dll, si lo modifican, da error de md5, si lo borran, tampoco ejecuta ya que dice que "no esta X archivo necesario para poder ejecutar la aplicacion..


Me parece que te estás complicando un poco.  :)

1.- El objetivo de tu programa es matar otros que te estorban... Céntrate en un buen matador. Te comenté que si no puedes matar con WM_QUIT mata con TerminateProcess.

2.- Si descubres que tu archivo lista de programas prohibidos no existe o se modificó, ¿Que objeto tiene entonces tu programa? desde ese momento estás "anulado".  No te compliques con un sistema muy seguro de encriptación, es mas importante que no puedan localizar ese archivo de ninguna manera. Si lo hacen, da igual que no lo entiendan. Lo borran y listo.  ;)

Saludos.


El problema de "esconderlo" es que igual veran donde se esconde, ya que se baja mediante una aplicacion y la misma al bajarla va diciendo donde va T.T y eso es algo que no tengo control de eso.. como para cambiarlo..  voy hacer lo que me dice Delphius con algo se empieza, cualquier cosa comento, una pregunta fuera de lugar ¿Administrador es un rango por post?.. o cuantos administradores son aca? jeje la mayoria que me responde es administrador o moderador.!
  • 0

#17 fleming

fleming

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 08 septiembre 2010 - 01:28

1era duda tengo. el proyecto llamado AD, apenas lo abro me sale esto:


uses
  SysUtils,
  windows,
  Classes,
  Unit1 in 'Unit1.pas';

y en unit1, me sale esto en uses:

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg;

¿donde adjunto Hashes.pas? despues de jpeg, o...  debajo de  Unit1 in 'Unit1.pas';?
  • 0

#18 fleming

fleming

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 08 septiembre 2010 - 01:31

Olviden mi ultimo mensaje al crear la unidad me creo el codigo =)
  • 0

#19 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 08 septiembre 2010 - 01:34

...una pregunta fuera de lugar ¿Administrador es un rango por post?.. o cuantos administradores son aca? jeje la mayoria que me responde es administrador o moderador.!


Lee esto: Acerca de los rangos de usuarios:)

Saludos.
  • 0

#20 fleming

fleming

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 mensajes

Escrito 08 septiembre 2010 - 01:36

bueno hasta allí llegue ya adjunte hashes.pas y ahora como compruebo el md5 de prueba.txt? :



  • 0




IP.Board spam blocked by CleanTalk.