Зміна системної дати, щоб протестувати застосунок
Це найстаріший трюк на світі: виставити годинник Windows на дату, яку хочете перевірити, запустити програму й повернути годинник назад. Він працює — і доки годинник зсунуто, він зсуває й усе інше на машині.
Що насправді зсувається разом із годинником
Системний годинник не належить лише програмі, яку ви тестуєте. Кожен процес, служба й мережевий обмін на машині читає той самий годинник, тож зміна, зроблена заради одного тесту, — це зміна для всіх.
| Що читає годинник | Що відбувається, коли ви його зсуваєте |
|---|---|
| Вхід до домену й спільні теки | Kerberos за замовчуванням допускає розбіжність годинників у п’ять хвилин. Понад це його квитки відхиляються, а вхід чи доступ до спільної теки завершується помилкою. |
| Сертифікати й HTTPS | Чи дійсний сертифікат, вирішує годинник. Виставте його за дату завершення сертифіката — і кожне з’єднання, що на нього спирається, відхиляється як прострочене; відведіть його досить далеко назад — і сертифікат ще не діє. |
| Служба часу Windows | Машина в домені бере час від контролера домену, і за замовчуванням служба виправляє годинник за будь-якої розбіжності. Виставлену вами дату можуть повернути, поки ви ще тестуєте. |
| Усе, що записує час | Файли, журнали, рядки баз даних і надіслані листи, створені за зсунутого годинника, несуть дату тесту й зберігають її після того, як ви повернули годинник. |
| ПЗ, що запам’ятовує найпізнішу бачену дату | Деякі програми сприймають годинник, що пішов назад, як підробку — а саме це й відбувається, коли ви відновлюєте справжню дату. |
Що далі дата, то більше з цього ви зустрінете. Машина, виставлена на 2038 рік, бачить простроченим кожен виданий сьогодні сертифікат. Як перевіряти 2038 рік без цього →
Потрібне й право, якого немає в більшості облікових записів: зміна системного часу — привілей адміністратора, а на керованій машині він часто вам не належить.
Коли зміна годинника — правильна відповідь
Віртуальна машина, якою більше ніхто не користується, з вимкненою власною синхронізацією годинника — цілком добрий випробувальний стенд. Потім ви її викидаєте, тож ніщо з записаного на ній не має значення. Якщо вона у вас є, а тест стосується однієї дати, це найпростіше, що працює.
Проблеми починаються, коли це машина, на якій ви працюєте, машина в домені або машина, на якій водночас працює те, що нічого не має помітити.
Зсуньте натомість годинник однієї програми
Зсунутий час бачить один процес і запущені ним дочірні. Ваш вхід до домену, ваші сертифікати й Windows Update його ніколи не бачать, тож нічого з таблиці вище не зсувається — і потім нічого повертати.
# Застосунок бачить 31 грудня 2027, 23:59:50. Усе інше зберігає справжню дату. chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:50 # Почати за десять хвилин до півночі й іти вшестеро швидше — зміна року настане за десять секунд chrono run "C:\apps\test.exe" --at 2027-12-31T23:50:00 --mode x60
Чи дійшла зсунута для однієї програми дата до неї насправді — це не те, що слід припускати. Кожна сесія завершується вердиктом і списком каналів часу, які програма справді читала. Як зрозуміти, що підміна спрацювала →
Чого це не замінює
- Програма, що питає час у сервера, лежить поза досяжністю локальної підміни. Сесія повідомляє про це, коли бачить, що програма відкриває мережеве з’єднання, замість того щоб лишити вас із припущенням, що тест пройшов.
- Тестування самої системи — служби, що реагує на зміну справжнього годинника, запланованого завдання, поведінки Windows під час зміни годинника — не має заміни зміні годинника, на машині, яку вам не шкода.