Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-09-2004
ElCherchu ElCherchu is offline
Miembro
 
Registrado: may 2003
Posts: 76
Poder: 21
ElCherchu Va por buen camino
Evitar que cambien la hora del sistema

Hola foristas!!!

Tengo un programa de venta de ticket y no puedo permitir que el usuario pueda cambiar la hora del sistema ya que los ticket que se venden despues de una hora especifica no son validos..

Ahora, como puedo evitar que el usuario me cambie la hora de la computadora?

Cuento con sus ayudas..

El programa esta hecho en Delphi 7 e instalado en Windows 98..

ElCherchu..
Responder Con Cita
  #2  
Antiguo 17-09-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Una solución aunque un poco chapucera, es:
Busca en el Directorio Windows\System
Un archivo llamado TimeDate.Cpl

Renombralo, por ejemplo AtimeDate.Cpl.

Hasta que se le devuelve su nombre correcto estará inhabilitado el poder cambiar la fecha y hora del sistema.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 20-09-2004
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
Hola.

Busca una alternativa, por ejemplo, que la fecha y la hora la tome del servidor.
__________________
Rafita.
Responder Con Cita
  #4  
Antiguo 20-09-2004
ElCherchu ElCherchu is offline
Miembro
 
Registrado: may 2003
Posts: 76
Poder: 21
ElCherchu Va por buen camino
Gracias!!

Gracias por responder ya estoy probando cambiar el nombre el archivo TimeDate.cpl y ver que pasa..

ElCherchu...
Responder Con Cita
  #5  
Antiguo 20-09-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Si solamente lo necesitas mientras funcione tu aplicación, puedes cambiar el nombre al arrancar y al salir restablecerlo.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 20-09-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Otra solución es decirle al personal que como tengan cojjjjines de cambiar la pppreciosa fecha les das dos yoyas y los mandas de patitas a su casa....



(broma)
__________________
:)
Responder Con Cita
  #7  
Antiguo 20-09-2004
jmeng2 jmeng2 is offline
Miembro
 
Registrado: abr 2004
Posts: 15
Poder: 0
jmeng2 Va por buen camino
que tal,

mira eso de renombrar el archivo datetime.cpl funciona, pero solo en windows, es decir que desde msdos se podria cambiar mediante el comando time.
ademas con respecto a la respuesta de rafita, creo que seria la mas acertada pero si no dispones de una conexion (de cualquier tipo) a un servidor pues no podras hacerlo.

Yo lo que te aconsejaria en caso de no contar con un servidor, seria que tu mismo sistema este validando la hora, es decir en una variable cada cierto tiempo registras la hora y si la ultima es menor a la anterior pues es que han atrasado el reloj o si la diferencia es mayor al tiempo que te tardas en revisar la hora pues te haz adelantado y en cualquier caso tomar medidas, ya sea que la reestablezcas o envies algun mensaje para informar lo ocurrido.


Espero haberte servido de ayuda
Responder Con Cita
  #8  
Antiguo 20-09-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Yo dudo bastante que un usuario de Windows sea capaz de salir al DOS y teclear una fecha u hora, pero suponiendo que dicho supuesto usuario fuera avanzado y conociera que puede modificar la hora desde el DOS, también se puede editar (con mucho cuidado, abstenerse manazas), el COMMAND.COM, intérprte de comando y cambiar por ejemplo TIME por SIME y DATE pos SATE y este supuesto usuario no podría hacer nada.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #9  
Antiguo 21-09-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Creo que se escapa una opción posible que suelen hacer los usuarios:

Salir del programa, cambiar la fecha, y despues entrar de nuevo.

Con esto ya se ha cargado todo el planteamiento. Lo de verificar la hora puede llegar a ser bastante engorroso, sin mencionar que tendrías que controlar el cambio de hora autómatico de windows.

La solución más correcta, a mi entender, es la que propone DarkByte, que el usuario no cambie la fecha, y si lo hace, es problema suyo, no tuyo.

Si te lo ponen como requerimiento, entonces requiere tú una conexion permanente a internet para mantener la hora sincronizada.

Saludos
Responder Con Cita
  #10  
Antiguo 21-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Lepe
La solución más correcta, a mi entender, es la que propone DarkByte, que el usuario no cambie la fecha, y si lo hace, es problema suyo, no tuyo.
Desde luego que es problema del usuario pero sigue siendo problema del programador evitar que pueda hacerlo o al menos detectar que lo ha hecho ¿no crees?

Es como si las autoridades dijeran, ¿para qué pongo policía?, si alguien roba un auto es su problema no nuestro.

// Saludos
Responder Con Cita
  #11  
Antiguo 22-09-2004
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 21
acertij022 Va por buen camino
La soloción ha este problema ya lo habia dado en un hilo hace tiempo la idea es la siguiente:
Al entrar a la aplicacion toma la hora , fecha de la pc y tiempo trascurrido desde que inicio windows lo guardas en un login y en variables en este momento ya no te fijas la hora de la pc, lo que haces te fijas el tiempo trascurrido desde que arranco windows lo resta contra el tiempo que guardaste en la variable y lo suma a los datos de hora y fecha que tenia al iniciar la aplicacion, en caso que un cliente malicioso salga de la aplicacion, cambie la hora y entre de nuevo realiza validaciones con los datos guardados en el log y daras un cartel de alerta ante una incoherencia entre los datos nuevos y los que tenias registrados

Última edición por acertij022 fecha: 22-09-2004 a las 14:59:37.
Responder Con Cita
  #12  
Antiguo 22-09-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
La idea es muy buena, pero que pasa si el usuario cambia la hora antes de entrar en la aplicación?

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #13  
Antiguo 22-09-2004
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 21
acertij022 Va por buen camino
Haber si te sirbe esto (por lo menos ami me sirvio):

Si el cliente modifica la hora o la fecha antes de entrar al programa, lo comparas de la siguiente manera:
.................................................................................................... .......
Si sale del programa , cambia la hora o la fecha y entra lo validas con la hora , fecha y tiempo trascuirrido desde que arranco windows que tenias al cerrar el programa. Si encontras poca diferencia entre el tiempo trascurrido desde que arranco windows y el equivalente que guardaste al salir y notas que la hora es menor o que la fecha vario, guarda la advertencia en un log que pudo haber fraude.
.................................................................................................... .......
Si el cliente reinica la pc y antes de entrar al programa modifica la hora o la fecha lo unico que podes validar es que la fecha tiene que ser igual o mayor a la ultima grabada y si la fecha es igual que la hora tiene que ser mayor a la guardada si no es asi ,guarda la advertencia en un log que pudo haber fraude.
.................................................................................................... .......

No podras evitar el fraude pero si tenes el historico podras comprobar dicho fraude y tomar alguna represaria legal con el cliente (de ser posible colocale un login de entrada al programa para saber quien fue quien realizo el fraude).


Otra posibilidad es mezclar esta idea de proteccion con la idea que te mensionaron anteriomente de tomar la fecha y hora de algun lugar externo por medio de una conexion a internet o por modem.
Responder Con Cita
  #14  
Antiguo 23-09-2004
Phacko Phacko is offline
Miembro
 
Registrado: jul 2004
Posts: 157
Poder: 20
Phacko Va por buen camino
Se me ocurre

Considero que las propuestas de todos son buenisimas (concideren que inicio en esto), lo que sugiere ACERTIJ022 promete solución, si partimos del hecho de que el sistema lo arranca el propietario y que se puede evitar (hasta cierto punto) que el usuario apague el sistema y que aparte podemos ejecutar una aplicacion al iniciar la maquina, parece optimo lo que sugiere Acertij002. Aunque claro que aquel que quiera hacer fraude lo hara de una u otra forma, pero no es lo mismo partir de nada a por lo menos tener una referencia de en que momento fue.
Gracias. Saludos
Responder Con Cita
  #15  
Antiguo 11-08-2006
zfer zfer is offline
Registrado
 
Registrado: ago 2006
Posts: 5
Poder: 0
zfer Va por buen camino
Cita:
Empezado por marcoszorrilla
Yo dudo bastante que un usuario de Windows sea capaz de salir al DOS y teclear una fecha u hora, pero suponiendo que dicho supuesto usuario fuera avanzado y conociera que puede modificar la hora desde el DOS, también se puede editar (con mucho cuidado, abstenerse manazas), el COMMAND.COM, intérprte de comando y cambiar por ejemplo TIME por SIME y DATE pos SATE y este supuesto usuario no podría hacer nada.

Un Saludo.
Muy bueno muchas gracias
Responder Con Cita
  #16  
Antiguo 11-08-2006
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo, me parece, que un usuario 'normal' en windows no puede cambiar la hora del sistema.

La otra opción de coger la hora del servidor es la que se usa siempre en un entorno cliente/servidor, que sin importar la hora que tenga cada uno de los terminales/equipos/tpvs/pcs... conectados, lo que se hace es coger la fecha y hora del servidor de bases de datos, que se supone que es una máquina no accesible a ningún usuario.
Responder Con Cita
  #17  
Antiguo 12-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Otra Opción sería crear un servicio / programa oculto que le notifiquen cuando el usuario cambie la hora del sistema. Muestras un mensaje en pantalla y si tu programa está funcionando, puedes sacar un mensaje en pantalla poniendo verde al usuario .

Código Delphi [-]
// Lepes Comments:
// - tested and It Works !! ;-)

//Knowing when the system date or time has changed
//Author: The Baker    Date Entered: 2002-04-09  ID: 19   Sections: [ Delphi ]
//
//If you need to know if the system date or time has changed you can simply
// intercept the WM_TIMECHANGE Window message. This message will be called when
// the time is set.
//
//The following is the code for a component that will trap the WM_TIMECHANGE
//window message and then fire a OnTimeChange notify event, similar to TTimer.


//Extra note: If you double click on the time in the task bar the "Date/Time
//Properties" dialogue will be displayed. If you click the OK button without
//making any alterations to the date or time, the WM_TIMECHANGE message will
//still fire. Not really what you would expect.


Unit UTimeChange;

interface

Uses
   Classes, Windows, Messages, Forms;

Type
   TTimeChange = class(TComponent)
   private
     FWindowHandle: HWND;
     FOnTimeChange: TNotifyEvent;
     FEnabled: Boolean;

     procedure WndProc(var Msg: TMessage);
   protected
     procedure TimeChange; dynamic;
   public
     constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;
   published
     property Enabled: Boolean read FEnabled write FEnabled default True;
     property OnTimeChange: TNotifyEvent read FOnTimeChange write FOnTimeChange;
   end;

//procedure Register;

implementation

{ TTimeChange }

constructor TTimeChange.Create(AOwner: TComponent);
begin
   inherited Create(AOwner);

   FEnabled := True;
   FWindowHandle := Classes.AllocateHWnd(WndProc);
end;

destructor TTimeChange.Destroy;
begin
   FEnabled := False;
   Classes.DeallocateHWnd(FWindowHandle);

   inherited Destroy;
end;

procedure TTimeChange.WndProc(var Msg: TMessage);
begin
   with Msg do Begin
     if FEnabled and (Msg = WM_TIMECHANGE) then
       try
         TimeChange;
       except
         Application.HandleException(Self);
       end
     else
       Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
   End; {end With}
end;

procedure TTimeChange.TimeChange;
begin
   if Assigned(FOnTimeChange) then FOnTimeChange(Self);
end;

//procedure Register;
//begin
//   RegisterComponents('CodeBake', [TTimeChange]);
//end;

end.

No he mirado si tambien lo detecta en el DOS, además podría reiniciar la máquina entrar en modo DOS y cambiar la fecha, pero bueno, esos temas se han tratado anteriormente.

Edito: He puesto con comentarios el procedure Register, ya que no me gusta tenerlo en la paleta de componentes de Delphi, sino tenerlo en el Library Path y crearlo por código como si fuera un objeto más. Si quieres tenerlo en la paleta, pues quita los comentarios de dicho procedure.

Aunque el código es antiguo, no disponía de él cuando se originó este hilo.

Saludos y suerte.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 12-08-2006 a las 09:41:36.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:37:51.


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
Copyright 1996-2007 Club Delphi