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

Завантажити 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.

Ніколи не звертається до інтернету, не веде облікових записів і не надсилає телеметрію.