Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema para asegurar mi software (https://www.clubdelphi.com/foros/showthread.php?t=53013)

enecumene 07-02-2008 18:50:57

Problema para asegurar mi software
 
Hola compañeros del foro, estoy tratando de ponerle un pequeño codigo de seguridad, este es el codigo:

Código Delphi [-]
procedure TFMain.FormCreate(Sender: TObject);
var Fecha: TDate;
begin
ShortDateFormat := 'dd/MM/yyyy';
DateSeparator := '/';
Fecha := Now;
if ARegistro.Fields[0].AsDateTime = Fecha then
  begin
    ShowMessage('El Tiempo se ha vencido, por favor realice tu pago para rehabilitar el software. Gracias.');
    Application.Terminate;
  end else begin
FLogin:=TFLogin.Create(self);
  try
    FLogin.ShowModal;
  Finally
    FLogin.Free;
  end;
 end;
end;

como ven en el codigo en la base de datos tengo un campo con una fecha especifica, trato de calcular que si la fecha de hoy es igual al que esta en la base de datos y mandar un mensaje y cerrar el programa, sino es asi sale la ventana de login, pero no me esta funcionando, me sale este error:

Cita:

---------------------------
Debugger Exception Notification
---------------------------
Project SalonPlus.exe raised exception class EAccessViolation with message 'Access violation at address 004C244B in module 'SalonPlus.exe'. Read of address 00000000'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
se que es algo sencillo de veras mis neuronas no estan funcionando hoy. Estoy utilizando Delphi 7 con Access, si Access porque el cliente me lo pidio :D

Saludos.

Delphius 07-02-2008 18:56:44

Hola enecumene,
¿En que línea te da error? ¿Te aseguraste de que esté la conexión establecida, y/o abiertas las tablas que empleas?

Me llama la atención el hecho de que te un error... a simple vista no veo problema alguno... ¿seguro que el error proviene de allí?

Saludos,

enecumene 07-02-2008 19:02:38

Ahh Jodienda, la tabla estaba Cerrada :D, habia advertido que mis neuronas no estaban funcionando hoy, pero de igual manera no me esta haciendo la comparacion, en el campo tengo la fecha de hoy y me sale la ventana de login en vez del mensaje, que puede ser?

Delphius 07-02-2008 19:14:46

enecumene, la verdad es que no te sabría decir... ¿Estás seguro que en la tabla tenés guardada dicha información?
No veo problema en tu código, y como no tengo algo a mano con que practicar... no puedo simular la prueba.

Ahora, si me permites mi humilde opinión en cuanto a la seguridad que tu deseas hacer...
Sería recomendable que ese tipo de comparación y dicha información no se guarde en la base de datos... sobre todo si es access. Ya que resulta fácil con Access abrir el archivo, abrir la tabla y modificarlo a mano.
Lo ideal es que esa información para comparar es que la guardes en algún archivo oculto... en el registro de Windows o algo por el estilo.

Saludos,

jhonny 07-02-2008 19:16:02

Cita:

Empezado por enecumene (Mensaje 264049)
Ahh Jodienda, la tabla estaba Cerrada :D, habia advertido que mis neuronas no estaban funcionando hoy, pero de igual manera no me esta haciendo la comparacion, en el campo tengo la fecha de hoy y me sale la ventana de login en vez del mensaje, que puede ser?

Voy a ser sincero...

Si estas usando ese codigo para proteger tu software, facilmente cualquiera podria usar un editor de Ejecutables como el OllyDebuger o cualquiera de esos y violar dicha seguridad facilmente... Edito: Ademas de la razón que te ha dado Delphius...

Por otro lado, si decides que no necesitas tanta seguridad en tu aplicativo, el problema que acabas de comentar se da porque la fecha que tienes en dicho campo es igual pero la hora no, seguramente nunca sera igual, ya que en la BD debe ser 00:00:00 pero la estas comparando con un Now que te devuelve la Hora ademas de la fecha, por lo que esta linea...

Código Delphi [-]
if ARegistro.Fields[0].AsDateTime = Fecha then //Ademas si lo del Now fuese Date 
//y dejas esto asi, solo bloqueara el aplicativo para ese dia y al otro dia seguira funcionando normalmente

Debes cambiarla por esta...

Código Delphi [-]
if ARegistro.Fields[0].AsDateTime >= Fecha then

Espero te sirva ;).

Delphius 07-02-2008 19:25:57

Cita:

Empezado por jhonny (Mensaje 264053)
Voy a ser sincero...

Si estas usando ese codigo para proteger tu software, facilmente cualquiera podria usar un editor de Ejecutables como el OllyDebuger o cualquiera de esos y violar dicha seguridad facilmente... Edito: Ademas de la razón que te ha dado Delphius...

Por otro lado, si decides que no necesitas tanta seguridad en tu aplicativo, el problema que acabas de comentar se da porque la fecha que tienes en dicho campo es igual pero la hora no, seguramente nunca sera igual, ya que en la BD debe ser 00:00:00 pero la estas comparando con un Now que te devuelve la Hora ademas de la fecha, por lo que esta linea...

Código Delphi [-]if ARegistro.Fields[0].AsDateTime = Fecha then //Ademas si lo del Now fuese Date y dejas esto asi solo bloqueara el aplicativo, para ese dia y al otro dia seguira funcionando normalmente


Debes cambiarla por esta...

Código Delphi [-]if ARegistro.Fields[0].AsDateTime >= Fecha then


Espero te sirva ;).

Es cierto. Ese "mayor o igual" tiene que soluciona ese problema...

Si no es molestia amigo Jhonny, ¿a que te refieres cuando dices que se puede violar ese aspecto de seguridad con un Editor de Ejecutables? Escuché hablar de editores hexadecimales... pero ese bicho que tando daño puede hacer?

Saludos,

enecumene 07-02-2008 19:29:22

Vale, gracias por los consejos de Vos, johnny, aun asi no me funciono, la fecha en el campo no guarda horas solo la fecha, puede ser?

BlueSteel 07-02-2008 19:36:41

Cita:

Empezado por enecumene (Mensaje 264057)
Vale, gracias por los consejos de Vos, johnny, aun asi no me funciono, la fecha en el campo no guarda horas solo la fecha, puede ser?

Hola... solo queri decir que en este post deje información del componente TmxProtector

egostar 07-02-2008 19:40:24

Cita:

Empezado por enecumene (Mensaje 264057)
Vale, gracias por los consejos de Vos, johnny, aun asi no me funciono, la fecha en el campo no guarda horas solo la fecha, puede ser?

Amigo enecumene, solo te puedo comentar que si haces eso debes de pensar en que el usuario puede cambiar la fecha de la maquina y con eso seguirá usando el programa, además claro de lo que te dicen Delphius y jhonny.

Yo lo que alguna vez hice (ya no instalo DEMOS) era contar los dias usados metiendo un archivo en algun directorio de windows y no comparar fechas, pero, pues el que quiera piratear encontrará la forma de hacerlo.

Salud OS

jhonny 07-02-2008 19:44:01

Cita:

Empezado por Delphius (Mensaje 264056)
Es cierto. Ese "mayor o igual" tiene que soluciona ese problema...

Si no es molestia amigo Jhonny, ¿a que te refieres cuando dices que se puede violar ese aspecto de seguridad con un Editor de Ejecutables? Escuché hablar de editores hexadecimales... pero ese bicho que tando daño puede hacer?

Saludos,

Bueno, debo aclarar antes de abrir mi bocota que no soy un ducho manejando esos programas... pero he tenido la oportunidad de Crackear mis propios aplicativos gracias a ellos... Si, si, ya se que yo conocia la estructura de su seguridad y toda la cosa pero con ellos me pude dar cuenta de lo fragil que eran... ¿Como?

Mira, vos instalas ese programa, solo le dices que quieres abrir un ejecutable y él te muestra muchos 1 0 y caracteres extraños, entre todos esos caracteres extraños, podras ver pedazos de codigo, por ejemplo...

- Si tu tienes un TDataBase, y en él haz colocado el usuario y la contraseña de la BD, luego podras verlo por medio de estos programitas.

- Creo haber leido en alguna parte que si vas a modificar algo tendras que usar la misma cantidad de caracteres que tenia anteriormente, osea que si alguien abre el ejecutable de enecumene con un programa de estos y logra ver que en alguna parte dice algo como...

Código Delphi [-]
if ARegistro.Fields[0].AsDateTime >= Fecha then

Podra, cambiar el > por un < y violaria esta seguridad facilmente. Con esos programas tambien se logran modificar DCUs, BPLs y cosas por el estilo.

Si se decide que el programa debe llevar uno de estos sistemas de seguridad, es mejor pensar muy bien como desarrollar este asunto.

felipe88 07-02-2008 19:44:37

Hola enecumene, te aseguras de darle formato a Now para que coincida con la que tienes guardada en la BD ?? aaaa/mm/dd

Cita:

Empezado por Delphius
Lo ideal es que esa información para comparar es que la guardes en algún archivo oculto... en el registro de Windows o algo por el estilo.

Ten en cuenta eso...

Cita:

Empezado por Delphius
¿a que te refieres cuando dices que se puede violar ese aspecto de seguridad con un Editor de Ejecutables? Escuché hablar de editores hexadecimales... pero ese bicho que tando daño puede hacer?

No te imaginas cuanto...:rolleyes:

enecumene 07-02-2008 19:46:24

Cita:

Empezado por egostar (Mensaje 264065)
Amigo enecumene, solo te puedo comentar que si haces eso debes de pensar en que el usuario puede cambiar la fecha de la maquina y con eso seguirá usando el programa, además claro de lo que te dicen Delphius y jhonny.

Yo lo que alguna vez hice (ya no instalo DEMOS) era contar los dias usados metiendo un archivo en algun directorio de windows y no comparar fechas, pero, pues el que quiera piratear encontrará la forma de hacerlo.

Salud OS

Gracias Amigo Egostar, entiendo lo que me dices, estuve planeando desactivar la opcion de cambiar las fechas de windows, es legal eso?.

Saludos.

jhonny 07-02-2008 19:49:52

Cita:

Empezado por enecumene (Mensaje 264057)
Vale, gracias por los consejos de Vos, johnny, aun asi no me funciono, la fecha en el campo no guarda horas solo la fecha, puede ser?

Asi no se vale, mientras generaba una respuesta, aparecieron 3 nuevas :D.

Prueba cambiando el Now por el Date a ver si te funciona ;). Si no pues debe ser algo mas que realmente no se me ocurre ahora :(.

enecumene 07-02-2008 19:51:08

Cita:

Empezado por felipe88 (Mensaje 264070)
Hola enecumene, te aseguras de darle formato a Now para que coincida con la que tienes guardada en la BD ?? aaaa/mm/dd

No la estoy dando de esta manera?

Código Delphi [-]
procedure TFMain.FormCreate(Sender: TObject);
var Fecha: TDate;
begin
ShortDateFormat := 'dd/MM/yyyy';
DateSeparator := '/';
Fecha := Now;

enecumene 07-02-2008 19:57:44

Cita:

Empezado por jhonny (Mensaje 264077)
Asi no se vale, mientras generaba una respuesta, aparecieron 3 nuevas :D.

Prueba cambiando el Now por el Date a ver si te funciona ;). Si no pues debe ser algo mas que realmente no se me ocurre ahora :(.

Amigo hice el cambio me funciono, me salio mi mensaje, perfecto!!, voy a tener que dejar de programar un rato a ver si mis neuronas se activan de nuevo. :D:D

felipe88 07-02-2008 19:59:10

Si lo pruebas con el Breakpoint (F5 en la linea de codigo), puedes verificar que ambas partes de la condicion esten asi ??...

Ademas teniendo en cuenta lo que dijo egostar, yo me pregunto... tiene que con fecha, o podria ser con un numero determinado de dias. Bueno teniendo en cuenta que no se cual es tu idea y que la respeto claro esta :p

Edito: Bueno... pues si ya lo solucionaste, almenos tuviste buena audiencia :D

egostar 07-02-2008 20:00:05

Cita:

Empezado por enecumene (Mensaje 264082)
Amigo hice el cambio me funciono, me salio mi mensaje, perfecto!!, voy a tener que dejar de programar un rato a ver si mis neuronas se activan de nuevo. :D:D

Huy, que poco aguantas amigo enecumene, ya que se estaba animando esto :D:D:D

Una hora basto, para que tus neuronas se jodieran :D:D:D

Salud OS

enecumene 07-02-2008 20:02:36

Cita:

Empezado por egostar (Mensaje 264084)
Huy, que poco aguantas amigo enecumene, ya que se estaba animando esto :D:D:D

Una hora basto, para que tus neuronas se jodieran :D:D:D

Salud OS

que va hombre es un ratito, un pequeño descanso, voy a estar rondando en la taberna.:D

Delphius 07-02-2008 20:08:42

Cita:

Empezado por jhonny (Mensaje 264069)
Bueno, debo aclarar antes de abrir mi bocota que no soy un ducho manejando esos programas... pero he tenido la oportunidad de Crackear mis propios aplicativos gracias a ellos... Si, si, ya se que yo conocia la estructura de su seguridad y toda la cosa pero con ellos me pude dar cuenta de lo fragil que eran... ¿Como?

Mira, vos instalas ese programa, solo le dices que quieres abrir un ejecutable y él te muestra muchos 1 0 y caracteres extraños, entre todos esos caracteres extraños, podras ver pedazos de codigo, por ejemplo...

- Si tu tienes un TDataBase, y en él haz colocado el usuario y la contraseña de la BD, luego podras verlo por medio de estos programitas.

- Creo haber leido en alguna parte que si vas a modificar algo tendras que usar la misma cantidad de caracteres que tenia anteriormente, osea que si alguien abre el ejecutable de enecumene con un programa de estos y logra ver que en alguna parte dice algo como...

Código Delphi [-]if ARegistro.Fields[0].AsDateTime >= Fecha then


Podra, cambiar el > por un < y violaria esta seguridad facilmente. Con esos programas tambien se logran modificar DCUs, BPLs y cosas por el estilo.

Si se decide que el programa debe llevar uno de estos sistemas de seguridad, es mejor pensar muy bien como desarrollar este asunto.

Gracias Jhonny por aclarar un poco el asunto.
Yo admito que tengo un Editor Hexadecimal, para poner a prueba los programas que hice, e invadido por la curiosidad. Me sorprendió el hecho de que con eso se podía leer fácilmente los resourcestring, algunos Labels, mensajes a usuarios y otras cosas... pero código no se vé. No me animé a modificar nada, pero si estuve viendo un poco.

Cita:

Empezado por felipe88 (Mensaje 264070)
No te imaginas cuanto...:rolleyes:

Estuve haciendo una búsqueda y llegue a unos resultados... y me ha convencido. Hacen daño.

Recuerdo que un dia mientras estaba navegando llegué a unos hilos que hablaban de unos componentes que cifran los ejecutables... pero por seguridad y un poco de miedo no lo he probado.

Al igual que Jhonny, sugiero que Enecumene analize mejor el tema de la seguridad. Si es que está entre sus planes incorporar mejores medidas.

Saludos,

enecumene 07-02-2008 20:21:04

Cita:

Empezado por Delphius (Mensaje 264089)
Al igual que Jhonny, sugiero que Enecumene analize mejor el tema de la seguridad. Si es que está entre sus planes incorporar mejores medidas.

vale gracias por los consejos, entrare en el tema de seguridad cuando tenga un proyecto mas grande, pues el sistema al que le estoy implementando este codigo para forzar el pago mensualmente es un sistema para un salon de belleza, no creo que las empleadas o peluqueras sean duchas para ese tipo de cosas, digo, puede haber una en 1 millon, pero estoy seguro que las que utilizaran ese sistema no lo seran :D.


La franja horaria es GMT +2. Ahora son las 06:44:01.

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