PDA

Ver la Versión Completa : Bloquear la Hora WinXP/2000


codigit
23-08-2004, 21:07:37
Saludos a todos, soy un novato en esto de programacion ero simpelmente quiero hacer una pequeña aplciacion que sea capaz de bloquear la fecha y la hora del sistema que no permita que la modifiquen. en windows xp/2000 Gracias.

Gydba
23-08-2004, 21:27:53
Hola!

Lo que podrías hacer es renombrar el archivo de applet (CPL para los amigos ::) e imposibilitar de esa manera los cambios de fecha/hora por parte del usuario. El applet es: Timedate.cpl

Un truco de win9x era editar el archivo Control.INI que estaba en C:\Windows\ y agregar las líneas:

[don't load]
TimeDate=no

(Claro que esto funcionaba en win9x... en winXP/2k ni idea)

Y si querés meterte por código yo miraría las funciones SetSystemTime y GetSystemTime de la unit Windows.

Eso es todo!

Amilius
23-08-2004, 23:22:58
Saludos a todos, soy un novato en esto de programacion ero simpelmente quiero hacer una pequeña aplciacion que sea capaz de bloquear la fecha y la hora del sistema que no permita que la modifiquen. en windows xp/2000 Gracias.
Traducido:

Quiere hacer un virus que desconfigure la hora y fecha y que el usuario no pueda corregir. O bien el tarado de su catedrático le dio este trabajo con el mismo propósito maquiavelico. :mad:

Hijo esas cosas no se hacen :mad: que vergüenza!! :mad:

Gydba
23-08-2004, 23:39:31
Amilius, yo también pensé en lo mismo pero después recordé a aquellos estudiantes del secundario que no tienen nada mejor que hacer que estar tocando todo para ver que pasa.

Puede ser que hoy estoy medio "buenazo" y no hize tu mismo comentario.

roman
23-08-2004, 23:42:01
Hijo esas cosas no se hacen :mad: que vergüenza!! :mad:

Amilius, creo que has exagerado un poco. Realmente no sabes cuál es el objetivo real de la pregunta. Aquí en estos foros se ha discutido por lo menos un uso perfectamente válido anteriormente: realizar un reloj checador de empleados. Posiblemente el bloqueo del reloj no sea la mejor forma de atacar el problema (si tal fuese el problema) pero este no es el punto. Si nos ponemos a priori a pensar que un pedazo de código puede per sé ser fuente de males caemos en el riesgo de una visión como esta (http://www.clubdelphi.com/foros/showthread.php?t=13126).

// Saludos

codigit
25-08-2004, 18:32:52
Amilius simeplemente te dire que necesito saber como bloquear el cambio de hora y fecha como medida de seguridad de un programa que no es mio, pero como yo administrador de una compañia, dicho programa cambiandole la fecha y la hora es posible lograr un fraude, datos que ya fueron notificados al programador pero el todavia no me ha dado la solucion, pero a mi si me interesa que se resuelva el problema urgente, por eso he decidido yo mismo tomar las medidas necesarias. Gracias.

roman
25-08-2004, 19:05:18
Se me ocurre algo aunque no sé qué tan viable sea o si es lo óptimo.

En el programa que tú hagas comienzas tomando la hora apenas inicie (y el programa habrá que iniciarlo al comenzar Windows). Lo más cómodo es con


StartTime := Time();
StartTicks := GetTickCount();


GetTickCount te dá el número de milisegundos desde que inicia Windows.

Con una componente Timer checas cada x segundos el tiempo transcurrido


procedure TForm1.Timer1OnTimer(Sender: TObject);
var
TicksElapsed: Cardinal;
TimeElapsed: Cardinal;

begin
TicksElapsed := GetTickCount() - StartTicks;
TimeElapsed := MiliSecondsBetween(Time() - StartTime);

if (Abs(TicksElapsed - TimeElapsed) > MinAllowed) then
ShowMessage('Usted ha alterado la hora del sistema');
end;


Lo estoy escribiendo como se me ocurre y sin probar así que quizá algo no esté correcto pero la idea es esta:

Tu programa mide cada x tiempo el número de milisegundos que han transcurrido desde que inicio la sesión de Windows. Este valor debe coincidir (o acercarse mucho) al número de milisegundos entre la hora de inicio y la hora actual, y dejará de ser así si se cambia la hora de la pc.

Aquí estoy suponiendo que el valor de GetTickCount no se afecta al cambiar la hora de la máquina, es decir, que no depende del reloj de ésta. Creo que así es pero si no podrías usar algo como QueryPerformanceCount que se basa en los ciclos del procesador y no en el reloj.

Así, aun cuando no estás bloqueando propiamente el cambio de hora, sí podrías detectar si alguien la cambia.

// Saludos

Amilius
25-08-2004, 20:10:10
Amilius simeplemente te dire que necesito saber como bloquear el cambio de hora y fecha como medida de seguridad de un programa que no es mio, pero como yo administrador de una compañia, dicho programa cambiandole la fecha y la hora es posible lograr un fraude, datos que ya fueron notificados al programador pero el todavia no me ha dado la solucion, pero a mi si me interesa que se resuelva el problema urgente, por eso he decidido yo mismo tomar las medidas necesarias. Gracias.
La fecha y hora de una computadora de usuario común y silvestre corriendo windows simplemente no es fiable. O se toma fecha y hora (encriptadas) de un servidor al cual no tiene acceso el usuario final (el que podría realizar el fraude) o será un agujero de seguridad gigantesco!!

Por eso NO TE METAS EN EL TRABAJO DEL PROGRAMADOR !!! :mad::mad::mad:

***

Para Román: Desgraciadamente esta es la forma con la que se han hecho las mayores desgracias del software, incluyendo windows y toda su nebulosa de bugs, debilidades, errores de diseño: "soluciones" de personas que no tienen conocimiento del tema: esos "aprendices de brujo" que terminan detrozando lo que cae en sus manos. Personalmente siempre me opondré a cualquier "solución" como esta: "Bloquear la hora y la fecha" que sólo terminará trayendo más problemas y al final será un remedio pasajero.

***

"realizar un reloj checador de empleados"

Eso es mucho peor !!! ¿Que clase de sádico salvaje sin sentimientos haria una cosa como esa? :D:D:D:D:D

roman
25-08-2004, 20:30:32
Amilius

Me parece que estás empecinado en "ver moros con tranchetes".

Yo no sé si codigit es programador o no pero su postura me parece totalmente natural.

Si yo encargo un programa a alguien y éste tiene un defecto del tipo descrito y no puedo esperar hasta que el programador termine las modificaciones entonces haré lo que esté a mi alcance para solventar la situación mientras la solución óptima se da.

Tu aseveración de "NO TE METAS EN EL TRABAJO DEL PROGRAMADOR " me parece fuera de lugar precisamente cuando el programador en cuestión, al menos por lo que nosotros sabemos, justamente no ha hecho bien su trabajo.

Además codigit en ningún momento ha dicho que tomará lo del bloqueo del reloj como una solución definitiva. A mi entender es simplemente algo que urge, y si el programador se toma su tiempo, yo en su lugar desde luego que me "metería en el trabajo del programador" y buscaría soluciones alternas, si bien pasajeras.

En cuanto a lo del reloj checador, no sé si lo dices en broma pero, al menos en México, nos guste o no, el uso del reloj checador es una práctica bastante común, como lo es la de tratar de alterarlo.

// Saludos

__cadetill
25-08-2004, 20:38:39
Ya que hablamos de XP/2k, porque no simplemente te limitas a crear un perfil de usuario en el que no tenga privilegios de cambio de hora?

roman
25-08-2004, 21:27:47
Ya que hablamos de XP/2k, porque no simplemente te limitas a crear un perfil de usuario en el que no tenga privilegios de cambio de hora?

¿Y esto sirve?

Es decir, no sé exactamente cuál política es la que habría que modificar pero muchas de estas políticas sólo impiden el acceso por los medios "normales" pero no impiden que se acceda por programas externos.

No digo que no, sólo tengo esta duda.

En todo caso, si lo del perfil no fuese viable, hay algo más sencillo de lo que expuse anteriormente. En los demos de las componentes Indy viene un ejemplo muy sencillo para obtener la hora de un servidor en Internet mediante la componente TIdTime. Sólo habría que checar periódicamente con un Timer la hora de Internet y compararla con la de la PC.

// Saludos

__cadetill
26-08-2004, 00:30:05
¿Y esto sirve?......

Hola Román

Pues la verdad es que no me he parado a probar si por medios "no normales" se puede cambiar la hora. Mañana lo pruebo y te comento.

__cadetill
26-08-2004, 10:16:06
Hola

S.O. Windows 2000 Prof.

Si por medios "no normales" nos referimos a nivel de programa..... he realizado una aplicación sencilla que cambia el día (copy-paste de Trucomanía)


procedure TForm1.Button1Click(Sender: TObject);

procedure FechaDelSistema(Fecha: TDateTime);
var
FecSys: TSystemTime;
nA, nM, nD: Word;
begin
DecodeDate(Fecha, nA,nM,nD);
GetLocalTime(FecSys);
FecSys.wYear := nA;
FecSys.wMonth := nM;
FecSys.wDay := nD;
SetLocalTime(FecSys);
end;

begin
FechaDelSistema( DateEdit1.Date );
end;


He creado un usuario con permisos de "usuario" que no tiene permisos para cambiar la fecha/hora del sistema (con doble clic en el relojito o por Panel de Control)

He ejecutado el programilla desde ese usuario y..... no ha cambiado la fecha.

Si hay otros mecanismos para cambiar la fecha.... pues ya no se, esto es lo que yo he probado

codigit
29-08-2004, 20:28:57
Saludos a todos, he estado un poco ocupado y no habia chekado la web, y por lo que he visto he creado una polemica con el tema, Amilius nose porque motivo me has dado malas soluciones, en realidad la hora y fecha del servidor es encriptada y el usuario final desde su pc no tiene acceso a la modificacion de la misma, el problema radica en que la hora del servidor si puede ser modificada por cualquier usuario, ahi es que esta el fallo.

"NO TE METAS EN EL TRABAJO DEL PROGRAMADOR"

Con respecto a ese comentario, necesito una solucion inmediata, un mientras tanto que mantenga a cualquier usuario restringido o bloqueado al cambio de la fecha y la hora, como dije anteriormente el programador me dijo que esta trabajando en eso, y todavia no me ha dado ninguna posible solucion, por eso he que he optado por mientras tanto buscar alguna solucion inmediata al problema...
Gracias.

Amilius
29-08-2004, 23:26:05
el problema radica en que la hora del servidor si puede ser modificada por cualquier usuario
JUAS !!!! :D:D:D:D:D

¿Y si les da la gana seguro que pueden desenchufarlo cuando quieran?

Seguridad: 0%
:D:D:D:D

antrax
01-09-2004, 16:56:27
Interesante la polemica despertada por la pregunta de nuestro forista Codigit...


Amilius, segun he visto tu plataforma de desarrollo no es Windows, estoy mal?, Hay que reconocer superioridad en muchos aspectos en S.O. com Linux, que en el manejo de todos sus recursos es incomparable con windows, pero tambien debemos entender y comprender que el S.O. "Comercial" por excelencia es el Windows, que no es el mejor pero si el mas comercial.
las Necesidades de Codigit, que atienden a la falta de respuesta de su programador lo obligan a pensar en soluciones que entre mas lógicas sean mas tontas nos llegan a parecer por la forma en que tal vez nos hemos acostumbrado a pensar, ya sea estructurada o con mucha abstracción, es parte del precio de ser Programador, poco a poco nos alejamos del Sentido Común, no todos ni al 100%, pero nos ha sucedido.

Codigit. En relación al tema, la aplicación de políticas podrá ser tar rigida o flexible como tu puedas, la sugerencia es que !con calma! revises los elementos a denegar para que despues no quedes tu también sin privilegios, inclusive si tu aplicación corre para multiples usuarios en diferentes equipos, podras diseñar politicas de seguridad a través del S.O. para todos los niveles de tus usuarios. Si optas por la aplicación de políticas, cualquier duda a la orden quedo.

madman
01-10-2004, 06:51:06
Pues coña, en Windows NT 5/XP puedes crear cuentas limitadas y asi impides que cambien la hora y fecha del sistema.