Chrono Mock
МоваУкраїнська

Запускайте застосунок Windows з будь-якою датою — не чіпаючи системний годинник

Переведіть годинник одного застосунку на наступний рік, зупиніть його або прискоріть так, щоб 30-денний пробний період закінчився, поки ви заварюєте каву. Решта машини зберігає справжній час — вхід у домен, ваші сертифікати й усі інші програми працюють як зазвичай.

А потім програма скаже, чи підміна справді спрацювала.

Безкоштовно й з відкритим кодом, GPL-3.0 Без встановлення або зі встановленням Для запуску права адміністратора не потрібні Ніколи не звертається до інтернету

Як виглядає сесія

Застосунок бачить
2027-12-31
23:59:50
пояс сесії -05:00
Машина досі бачить
2026-09-04
18:12:33
пояс хоста +02:00
Працює — підміна часу дійшла до цього процесу
Відстежувані канали часу до 44 · кожен із лічильником викликів
Панель сесії Chrono Mock. Годинник застосунку показує 2038-01-19 03:14:14, а справжній годинник поруч — 2026-09-22 15:50:30, у кожного свій минулий час. Нижче розташовані швидкості від x1 до x1440 з кнопкою Freeze, далі відносні стрибки й стрибок на введену дату, а внизу зелена галочка зі словом Works поруч із червоною кнопкою Stop session.
Сесія, що працює. Застосунок живе в 2038 році, а машина — ні, і вердикт каже, що підміна часу до застосунку дійшла.

Навіщо це потрібно

Щоб протестувати все, що залежить від дати, потрібно зсунути час. Обидва звичайні способи погані.

Строк дії ліцензії, пробні періоди, поновлення підписок, чинність сертифікатів, час життя токенів, звіти на кінець місяця й року, нарахування відсотків, нагадування.

Спосіб 1 — змінити системний годинник

Це ламає вхід у домен і Kerberos, анулює сертифікати TLS, через що перестає працювати браузер, збиває з пантелику Windows Update і змушує всі інші застосунки на машині записувати хибні мітки часу. На машині в домені групова політика зазвичай блокує зміну або скасовує її за кілька хвилин, тож тест навіть не відтворюється.

Спосіб 2 — чекати

Тобто не тестувати. Випадки, що залежать від дати, пропускаються, а «ліцензія ніколи не спливає» потрапляє до клієнта.

Що вміє

Один процес мандрує в часі. Більше нічого на машині.

Будь-який момент

Конкретні дата й час або відносні — +30 days, -1 year.

Тече, стоїть або прискорений

Звичайна швидкість, зупинений годинник або цілочисельний множник. x1440 перетворює добу на хвилину.

Власний часовий пояс

Фіксоване зміщення лише для цього процесу, а системний пояс лишається рівно там, де був.

Дочірні процеси йдуть слідом

Інсталятори й лаунчери породжують дочірні процеси. Без цього тест покриває лише половину того, що запускалося.

Стрибок посеред сесії

Уперед або назад — зокрема стрибок назад, який робить ноутбук після повторної синхронізації із сервером часу.

І Electron, і Chromium

Іншим механізмом, бо їхній годинник живе в ізольованому рендерері, куди впровадження не сягає.

Те, чого не робить ніхто інший

Як зрозуміти, що підміна спрацювала?

З будь-яким іншим інструментом — ніяк. Застосунок запускається, показує якусь дату, і ви припускаєте. Але він може читати годинник через канал, який інструмент так і не перехопив, — із сервера, з бази даних, через шар середовища виконання, — і тоді «тест пройдено» не означає взагалі нічого.

  • →Вердикт до початку справжнього тесту: працює / працює частково / не працює
  • →Які з 44 каналів часу були покриті й скільки разів застосунок звертався до кожного
  • →Які канали покриті не були — сказано прямо, ніколи не замовчується
  • →Попередження з наслідками: «цей застосунок читає час із мережі — локальної підміни може бути недостатньо»

Як працює аудит джерел часу →

Дві хвилини з програмою

Вікно для вивчення, командний рядок для CI. Той самий рушій за обома.

# Запустити застосунок так, наче це остання секунда 2027 року
chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:59

# Спостерігати, як за чашку кави спливає 30-денний пробний період: x1440 — доба за хвилину
chrono run "C:\apps\test.exe" --mode x1440

# Використати іменований сценарій замість дати й записати докази у файл
chrono run "C:\apps\test.exe" --preset year-rollover --report session.txt

Калькулятор відповідає на другу половину тестування дат — яку дату брати:

$ chrono calc --preset year-2038 --zone +00:00
Chrono Mock - date calculator
  preset:   year-2038 - 2038 boundary
  explains: Does the app survive the 32-bit Unix time boundary (2038-01-19T03:14:07Z)?
  base:    2038-01-19T03:14:07
  result:  2038-01-19T03:14:07
  formats:
    ISO date      2038-01-19
    ISO datetime  2038-01-19T03:14:07+00:00
    US            01/19/2038
    PL            19.01.2038
    epoch (s)     2147483647
    epoch (ms)    2147483647000
    FILETIME      137919572470000000
    RFC 1123      Tue, 19 Jan 2038 03:14:07 GMT
  ...
  what this date lands on:
    at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)

У порівнянні з тим, чим ви, імовірно, користуєтеся

Як RunAsDate, але з тим, чого бракувало

RunAsDate перехоплює п’ять функцій настінного годинника й робить це добре. Ось у чому вони відрізняються — а на повній сторінці сказано й про те, де RunAsDate досі кращий.

 RunAsDateChrono Mock
Запускає застосунок із підробленою датоютактак
Канали часу, що перехоплюються544 (30 зсуваються, 14 лише рахуються)
Прискорення годинниканітак
Незалежний часовий поясне задокументованотак
Іде за дочірніми процесамине задокументованотак
Каже, чи спрацювалонітак, по каналах
Відкритий вихідний кодфрівар, закритийGPL-3.0

Повне порівняння, зокрема де виграє RunAsDate →

Отримайте програму

Розпакуйте де завгодно й запускайте, або встановіть підписаний .msi для всіх облікових записів на комп'ютері. Для запуску права адміністратора не потрібні, а zip-архіви нічого не пишуть у реєстр.