Скачать 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.
Никогда не обращается к интернету, не ведёт учётных записей и не отправляет телеметрию.