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.

Никогда не обращается к интернету, не ведёт учётных записей и не отправляет телеметрию.