Завантажити Chrono Mock
Дві збірки одного рушія: вікно для дослідження й командний рядок для CI. Будь-яку можна
розпакувати де завгодно й запустити - без інсталятора, без записів у реєстрі, без прав
адміністратора. Або встановіть підписаний .msi для всіх облікових записів на
комп'ютері: права адміністратора потрібні один раз, для встановлення, а для запуску ні.
| Файл | Що це | Розмір |
|---|---|---|
ChronoMock-app-win-x64.zip |
Настільний застосунок, самодостатній — установлювати .NET не потрібно | ~70 МБ |
ChronoMock-app-win-x64.msi |
Настільний застосунок і командний рядок, встановлені для всіх облікових записів на
комп'ютері: пункт меню «Пуск» і chrono у PATH |
~58 MB |
ChronoMock-cli-win.zip |
Лише інструмент командного рядка, для CI та скриптів | ~2,4 МБ |
Що вам потрібно
- Windows 10 або Windows 11. Збірок для macOS і Linux немає — на Linux із цим уже добре справляється libfaketime.
- Більше нічого. Настільна збірка несе власне середовище виконання, а збірка для командного рядка не несе нічого взагалі.
- Підтримуються і 32-розрядні, і 64-розрядні застосунки. Пакет містить обидві й вибирає ту, що відповідає застосунку, на який ви його спрямовуєте.
ARM64 поза межами до версії 1.0, а запаковані застосунки зі Store (UWP і MSIX) не підтримуються — їхня модель запуску цього не дозволяє.
Як запустити
Розпакуйте й запустіть ChronoMock.exe для вікна або
chrono.exe для командного рядка. Перша сесія — це три рішення:
який застосунок, який момент і як швидко мають іти годинники.
# Запустити застосунок так, наче це остання секунда 2027 року chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:59 # Те саме, але годинник іде добу за хвилину chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:59 --mode x1440
Два пункти, які потрібно прочитати першими
Зробіть резервну копію каталогу даних застосунку до першої сесії з датою в майбутньому.
Застосунок, що працює у 2028 році, записує дати 2028 року всюди, де зберігає дані: у базі даних, у конфігурації, у кеші, у файлі ліцензії. Ці значення залишаються там і після повернення до справжнього часу. Для програм із захистом ліцензії це може бути незворотним — «clock rollback detected, licence invalidated» — стандартний галузевий прийом, і він зробить саме те, для чого призначений.
Chrono Mock за собою прибирає. За застосунком, який ви тестували, він прибрати не може.
Ваш антивірус може на це спрацювати, і це очікувано.
Час зсувається шляхом упровадження невеликої бібліотеки в процес-ціль. Це законна, задокументована техніка Windows — і водночас така, якою користуються шкідливі програми, тож Microsoft Defender та інші можуть позначити бібліотеку, що впроваджується, або й узагалі заблокувати впровадження. Це хибне спрацювання, спричинене самою технікою.
Якщо сесія відмовляється запускатися й Defender повідомляє про загрозу, виключіть бібліотеку, а не
теку: виберіть File у «Безпеці Windows» і вкажіть повний шлях до
chrono_hook.dll. Виключення теки зупинило б сканування чого б то не було саме в тому
каталозі, звідки інструмент упроваджується. Або запустіть на машині, де вам це дозволено.
Бібліотека, що впроваджується, збирається з коду в цьому репозиторії під GPL-3.0 — ви можете
перезібрати її самі. Режим Chromium і Electron не впроваджується взагалі й не зачіпається.
Що лишається після нього
Нічого у вашій системі: жодних постійних хуків, жодних записів у реєстрі й нічого за межами
власної теки, окрім трьох речей, які він вам назве, — історія сесій і журнал діагностики,
що переїжджають до %LOCALAPPDATA%\ChronoMock\, якщо до власної теки інструмента
писати не можна, і, для цілі на Electron або Chromium, одноразовий профіль браузера в
%TEMP%, який видаляється наприкінці сесії, а якщо не вдалося — про це повідомляється
в підсумку сесії.
Це стосується zip-архівів. Інсталятор - виняток, і він називає, що додає: програму в
Program Files, пункт меню «Пуск», chrono у PATH комп'ютера, запис
у «Параметри», «Застосунки» та ключ HKLM\Software\DonislawDev\Chrono Mock.
Видалення прибирає все це й не чіпає %LOCALAPPDATA%\ChronoMock\. Ще одна опція,
типово вимкнена, записує значення в реєстр на час сесії й потім видаляє його:
--elevated-embedded.
Ніколи не звертається до інтернету, не веде облікових записів і не надсилає телеметрію.