Pytania i odpowiedzi
Krótkie odpowiedzi, razem z tymi o tym, czego to narzędzie nie zrobi.
Czy to zmienia zegar mojego komputera?
Nie i nigdy nie będzie - to jest cały sens tego narzędzia. Przesunięty czas widzi jeden proces i uruchomione przez niego procesy potomne. Logowanie do domeny, certyfikaty, Windows Update i wszystkie inne aplikacje przez cały czas widzą prawdziwą datę.
Czy potrzebuję uprawnień administratora?
Nie, żeby go uruchomić. Archiwa zip nie potrzebują instalatora, niczego nie zapisują w
rejestrze i działają z folderu, który możesz trzymać na pendrive. Opcjonalny plik
.msi wymaga uprawnień administratora raz, do instalacji, bo instaluje się dla
każdego konta na komputerze.
Czy zadziała z moją aplikacją?
Uczciwa odpowiedź brzmi: żadne narzędzie tego typu nie może tego obiecać z góry - więc zamiast obiecywać, mierzy. Każda sesja kończy się werdyktem (działa, działa częściowo, nie działa), listą kanałów czasu, które aplikacja naprawdę czytała, wraz z liczbą wywołań każdego, oraz listą kanałów, które nie zostały objęte.
Aplikacja może czytać zegar drogą, której nic nie przechwyciło - z serwera, z bazy danych, przez warstwę środowiska uruchomieniowego. Kiedy tak się dzieje, dowiadujesz się o tym, zamiast zakładać, że test przeszedł.
Czy działa z aplikacjami .NET, Javy i Pythona?
Częściowo i różnice mają znaczenie. Wszystkie trzy są oznaczone jako eksperymentalne: działają na naszych celach testowych, nie były testowane szeroko, a źródłem prawdy jest wbudowany audyt, nie ten akapit.
- .NET - zegar ścienny i strefa sesji są objęte.
Stopwatchzostaje na prawdziwym liczniku wysokiej rozdzielczości, chyba że włączysz jego skalowanie. - Java - zegar ścienny, czas trwania i strefa sesji są objęte.
Strefa przychodzi jako stały offset, nazwany np.
GMT+05:30. - Python -
time.timeidatetimesą objęte.perf_counter, a od Pythona 3.13 równieżmonotonic, siedzą na liczniku wysokiej rozdzielczości, chyba że włączysz skalowanie.
Czy działa z aplikacjami Electron i Chromium?
Tak, innym mechanizmem. Ich zegar żyje w piaskowanym rendererze, do którego wstrzyknięcie nie sięga, więc aplikacja jest uruchamiana z portem debugowania i czystym, jednorazowym profilem, a jej własne API czasu w JavaScripcie zostają przestawione na zegar sesji - również wewnątrz Web Workerów, gdzie często faktycznie mieszka odliczanie.
Jedno ograniczenie warto znać: proces główny aplikacji Electron uruchamia JavaScript w Node, do którego sesja nie sięga, więc zostaje na prawdziwym zegarze, a raport to mówi. Strony i ich workery czytają strefę czasową sesji.
Jak działa tryb Chromium i Electron - co obejmuje, czego nie, i dlaczego port debugowania jest tą częścią, o której trzeba wiedzieć.
Czy mogę sprawić, żeby czas płynął szybciej?
Tak. Wybierasz całkowity mnożnik i zegar aplikacji idzie w tym tempie -
x1440 zamienia dobę w minutę, więc 30-dniowa wersja próbna wygasa w jakieś
pół godziny. Zegar można też zamrozić albo skakać nim w przód i w tył w trakcie sesji.
Odliczania i timery leżą na osobnej osi, a ich przyspieszanie to osobny przełącznik, bo skalowanie ich zmienia zachowanie, na którym wiele aplikacji polega.
Czy mogę zmienić samą strefę czasową, bez zmiany daty?
Tak. Sesja niesie własny stały offset, widoczny dla tego procesu, podczas gdy strefa systemu zostaje dokładnie tam, gdzie była. To jest część, którą większość narzędzi pomija, a właśnie tak odtwarza się błąd pojawiający się wyłącznie u klienta pięć stref czasowych dalej.
A co z czasem letnim?
Strefa sesji to stały offset bez czasu letniego. Sesja ustawiona na Polskę zostaje przy wybranym offsecie niezależnie od tego, czy jej zegar pokazuje marzec, czy lipiec, więc przebieg przecinający prawdziwą zmianę czasu rozjedzie się o godzinę z tym, co ta strefa naprawdę by pokazała.
Przeprowadzenie aplikacji przez zmianę czasu nie jest więc czymś, co to narzędzie na razie robi, a kalkulator dat mówi o tym wprost, zamiast zgadywać.
Dlaczego mój antywirus to zgłasza?
Bo wstrzyknięcie biblioteki do cudzego procesu to legalna, udokumentowana technika
Windows, której używa również złośliwe oprogramowanie. To fałszywy alarm wywołany
techniką, a nie tym, co narzędzie robi z komputerem. Wstrzykiwana biblioteka to
chrono_hook.dll, zbudowana z publicznego kodu na licencji GPL-3.0 i możesz
ją zbudować sam. Tryb Chromium i Electron w ogóle nie wstrzykuje.
Strona pobierania mówi, co z tym zrobić.
Czy to sposób na przedłużenie wersji próbnej albo obejście licencji?
Nie i nie jest do tego zbudowane. Chrono Mock służy do testowania oprogramowania, za które odpowiadasz - własnego wygasania licencji, własnej logiki odnowień, własnego raportu na koniec miesiąca. Żaden przykład, preset ani strona tutaj nigdy nie pokaże przedłużania cudzej wersji próbnej.
Oprogramowanie z ochroną licencji jest zresztą przypadkiem, w którym to narzędzie najpewniej polegnie: kod zabezpieczający często czyta czas drogami dobranymi tak, żeby trudno je było przechwycić, a cofnięcie zegara to warunek, pod który taki kod jest wprost pisany. Planowana jest funkcja skierowana w drugą stronę - tryb, który przepuszcza twoją własną aplikację przez serię manipulacji czasem i raportuje, które z nich twoje zabezpieczenie wychwyciło.
Czy mogę użyć tego w ciągłej integracji?
Tak. Wersja konsolowa to osobna paczka o rozmiarze około 2,4 MB, bez żadnego
środowiska do instalowania. Każda komenda mówi --json i kończy się kodem
wyjścia, na którym potok może się rozgałęzić, a sesja potrafi zapisać swój dowód do
pliku.
Czym to się różni od RunAsDate?
RunAsDate przechwytuje pięć funkcji zegara ściennego i robi to dobrze. To narzędzie obserwuje 44 kanałów czasu, a 30 z nich przestawia na zegar sesji, potrafi przyspieszyć zegar, daje procesowi własną strefę czasową, podąża za procesami potomnymi i mówi potem, które kanały zostały naprawdę objęte. Jest też otwarte, podczas gdy RunAsDate to zamknięty freeware. RunAsDate z kolei potrafi dołączyć do aplikacji, która już działa, a to narzędzie nie.
Pełne porównanie mówi też, w czym RunAsDate jest lepszym wyborem.
Czy to libfaketime na Windows?
W zamyśle tak - ta sama idea przesuwania czasu dla jednego programu zamiast dla całej
maszyny. W praktyce to inna implementacja, bo
libfaketime opiera się na
LD_PRELOAD, którego na Windows nie ma. Jest o tym
osobna strona.
Czy jest darmowe i czy coś gdzieś wysyła?
Darmowe i otwartoźródłowe na licencji GPL-3.0. Bez konta, bez telemetrii i bez jakiegokolwiek kontaktu z siecią - całe narzędzie działa z wyciągniętym kablem.
W oknie są dwie kontrolki prowadzące na zewnątrz i lepiej je nazwać wprost, niż zostawić do odkrycia: przyciski Wesprzyj i GitHub na pasku tytułu. Naciśnięcie któregoś z nich przekazuje adres Twojej przeglądarce i to przeglądarka się łączy. Chrono Mock w żadnym wariancie nie otwiera połączenia, a nic z tego, co zmierzył o Twojej aplikacji, nigdzie nie trafia.