Chrono Mock
ЯзыкРусский

Вопросы и ответы

Короткие ответы, включая те, что о том, чего этот инструмент не делает.

Меняет ли он часы моего компьютера?

Нет, и никогда не будет — в этом весь смысл инструмента. Сдвинутое время видно одному процессу и дочерним процессам, которые он запускает. Ваш вход в домен, сертификаты, Windows Update и все остальные приложения всё это время видят настоящую дату.

Нужны ли права администратора?

Для запуска нет. Zip-архивам не нужен установщик, они ничего не пишут в реестр и работают из папки, которую можно носить на флешке. Необязательному .msi права администратора нужны один раз, для установки, потому что он ставится для всех учётных записей на компьютере.

Будет ли он работать с моим приложением?

Честный ответ: ни один инструмент такого рода не может пообещать этого заранее — поэтому этот измеряет. Каждая сессия заканчивается вердиктом (работает, работает частично, не работает), списком каналов времени, которые приложение действительно читало, со счётчиком вызовов по каждому, и списком каналов, которые покрыты не были.

Приложение может читать часы по пути, который ничто не перехватило, — с сервера, из базы данных, через слой среды выполнения. Когда так случается, вам об этом говорят, а не оставляют предполагать, что тест прошёл.

Работает ли он с приложениями на .NET, Java и Python?

Частично, и различия важны. Все три помечены как экспериментальные: они работают на тестовых целях, широко не проверялись, а встроенный аудит — ваш источник истины, а не этот абзац.

  • .NET — настенные часы и часовой пояс сессии покрыты. Stopwatch остаётся на настоящем высокоточном счётчике, если вы не включите его масштабирование.
  • Java — настенные часы, прошедшее время и часовой пояс сессии покрыты. Пояс приходит как фиксированное смещение с именем вроде GMT+05:30.
  • Python — time.time и datetime покрыты. perf_counter и, начиная с Python 3.13, monotonic опираются на высокоточный счётчик, если вы не включите масштабирование.

Работает ли он с приложениями на Electron и Chromium?

Да, другим механизмом. Их часы живут в изолированном рендерере, куда внедрение не достаёт, поэтому приложение запускается с портом отладки и чистым одноразовым профилем, а его собственные API времени JavaScript переводятся на часы сессии — в том числе внутри Web Worker, где таймер часто и живёт на самом деле.

Одно ограничение стоит знать: главный процесс приложения Electron работает в Node, куда сессия не доходит, поэтому он остаётся на реальных часах, и отчёт об этом говорит. Страницы и их воркеры читают часовой пояс сессии.

Как работает режим Chromium и Electron — до чего он достаёт, до чего нет и почему порт отладки — это то, на что стоит обратить внимание.

Можно ли заставить время идти быстрее настоящего?

Да. Выберите целочисленный множитель, и часы приложения пойдут с этой скоростью — x1440 превращает сутки в минуту, так что 30-дневный пробный период истекает примерно за полчаса. Можно также остановить часы или перескакивать вперёд и назад посреди сессии.

Обратные отсчёты и таймеры лежат на отдельной оси, и их ускорение — отдельный переключатель, потому что их масштабирование меняет поведение, от которого зависит множество приложений.

Можно ли изменить только часовой пояс, не меняя дату?

Да. Сессия несёт собственное фиксированное смещение, видимое этому процессу, пока системный пояс остаётся ровно там, где был. Это та часть, которую большинство инструментов пропускает, и именно так воспроизводится ошибка, возникающая только у клиента за пять часовых поясов от вас.

А как насчёт летнего времени?

Пояс сессии — это фиксированное смещение без летнего времени. Сессия, настроенная на Польшу, остаётся на выбранном вами смещении независимо от того, показывают её часы март или июль, так что запуск, пересекающий настоящий переход, расходится на час с тем, что этот пояс действительно показал бы.

Поэтому проведение приложения через переход на летнее время этот инструмент пока не делает, а калькулятор дат говорит об этом, а не гадает.

Почему мой антивирус на него срабатывает?

Потому что внедрение библиотеки в другой процесс — законная описанная в документации техника Windows, которую используют и вредоносные программы. Это ложное срабатывание, вызванное самой техникой, а не чем-либо, что инструмент делает с вашей машиной. Внедряемая библиотека — chrono_hook.dll, собранная из открытого исходного кода под GPL-3.0, и вы можете пересобрать её сами. Режим Chromium и Electron не внедряется вообще.

Страница загрузки говорит, что с этим делать.

Можно ли так продлить пробный период или обойти лицензию?

Нет, и он не для этого создан. Chrono Mock предназначен для тестирования программного обеспечения, за которое вы отвечаете, — вашего собственного истечения лицензии, вашей собственной логики продления, вашего собственного отчёта на конец месяца. Ни один пример, сценарий или страница здесь никогда не покажут, как продлить чужой пробный период.

Программы с защитой лицензии — на самом деле тот случай, который с наибольшей вероятностью победит этот инструмент: код защиты от вмешательства часто читает время путями, выбранными намеренно так, чтобы их было трудно перехватить, а откат часов назад — условие, которое такие программы пишут, чтобы обнаруживать. Планируется функция в обратную сторону — режим, который прогоняет серию манипуляций со временем против вашего собственного приложения и сообщает, какие из них поймала ваша защита.

Можно ли использовать его в непрерывной интеграции?

Да. Сборка для командной строки — это отдельная загрузка около 2,4 МБ без среды выполнения для установки. Каждая команда говорит на --json и завершается кодом, по которому конвейер может ветвиться, а сессия может записать свои доказательства в файл.

Чем он отличается от RunAsDate?

RunAsDate перехватывает пять функций настенных часов и делает это хорошо. Этот инструмент отслеживает 44 каналов времени и переводит 30 из них на часы сессии, умеет ускорять часы, даёт процессу собственный часовой пояс, следует за дочерними процессами и потом сообщает вам, какие каналы действительно были покрыты. Кроме того, у него открытый код, а RunAsDate - закрытый freeware. RunAsDate, со своей стороны, умеет подключаться к уже запущенному приложению, а этот инструмент нет.

Полное сравнение говорит и о том, где RunAsDate — лучший выбор.

Это libfaketime для Windows?

По духу — да: та же идея сдвигать время для одной программы, а не для машины. На практике это другая реализация, потому что libfaketime зависит от LD_PRELOAD, которого в Windows нет. Есть страница ровно об этом.

Бесплатно ли это и отправляет ли оно что-нибудь куда-нибудь?

Бесплатно и с открытым исходным кодом под GPL-3.0. Без учётной записи, без телеметрии, и оно вообще не обращается к интернету — весь инструмент работает с выдернутым сетевым кабелем.

У окна есть два элемента управления, которые ведут наружу, поэтому их стоит назвать, а не заставлять вас их находить: кнопки Donate и GitHub в строке заголовка. Нажатие любой из них передаёт адрес вашему браузеру, и соединяется именно ваш браузер. Chrono Mock не открывает соединений ни в том, ни в другом случае, и ничто из измеренного им о вашем приложении никуда не уходит.