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 應用程式嗎?

可以,透過另一種機制。它們的時鐘位於注入搆不到的沙盒轉譯處理序中,所以應用程式會帶著一個偵錯連接埠與一個乾淨的一次性設定檔啟動,它自己的 JavaScript 時間 API 被放到工作階段時鐘上——包括 Web Worker 內部,計時器往往實際就在那裡。

有一個限制值得了解:Electron 應用程式的主處理程序在 Node 中執行,工作階段無法觸及,所以它保持真實時鐘,報告也會這樣說明。頁面及其 worker 讀取的是工作階段時區。

Chromium 與 Electron 模式是如何運作的——它能到達什麼、到達不了什麼,以及為什麼偵錯連接埠是需要留意的部分。

能讓時間比真實時間走得更快嗎?

可以。選擇一個整數倍率,應用程式的時鐘就會依這個速度執行——x1440 讓一天只需一分鐘,於是 30 天的試用期大約半小時就會到期。你也可以凍結時鐘,或在工作階段中途往前、往後跳轉。

倒數與計時器位於另一條軸上,加速它們需要另一個開關,因為縮放它們會改變很多應用程式所依賴的行為。

能只改時區、不改日期嗎?

可以。工作階段帶有自己的固定偏移量,只對該處理序可見,系統時區則原封不動。這是大多數工具跳過的部分,也是你重現「只在五個時區之外的客戶那裡才會出現」的錯誤的辦法。

日光節約時間怎麼辦?

工作階段時區是沒有日光節約時間的固定偏移量。設為波蘭的工作階段,無論它的時鐘讀到的是三月還是七月,都停留在你選定的偏移量上,所以跨越真實切換的執行,會與該時區實際顯示的時間相差一小時。

因此,讓應用程式經歷日光節約時間的切換,目前還不是這個工具能做的事,日期計算機會如實說明這一點,而不是猜測。

為什麼我的防毒軟體會示警?

因為向另一個處理序注入程式庫,是一種合法的、有文件記載的 Windows 技術,惡意程式也在使用它。這是由該技術觸發的誤報,而不是由工具對你的電腦所做的任何事觸發的。被注入的程式庫是 chrono_hook.dll,由公開的原始碼在 GPL-3.0 下建置,你可以自己重新建置。Chromium 與 Electron 模式完全不注入。

下載頁面說明了該怎麼處理。

這是延長試用期或繞過授權的辦法嗎?

不是,它也不是為此而做的。Chrono Mock 是用來測試你自己負責的軟體的——你自己的授權到期、你自己的續約邏輯、你自己的月底報表。這裡沒有任何範例、預設或頁面會示範如何延長別人的試用期。

帶有授權保護的軟體,恰恰是最有可能讓這個工具失效的情形:防竄改程式碼經常透過刻意選擇的、難以攔截的途徑讀取時間,而時鐘往後撥動正是這類軟體被撰寫來偵測的情況。一個方向相反的功能正在規劃中——一種針對你自己的應用程式執行一系列時間操作,並回報你的保護措施攔住了其中哪些的模式。

能在持續整合中使用嗎?

可以。命令列版是一個單獨的下載,大約 2.4 MB,無需安裝執行階段。每個命令都支援 --json,並以管線可以據以分支的結束代碼結束,工作階段還可以把它的證據寫入檔案。

它和 RunAsDate 有什麼不同?

RunAsDate 攔截五個牆上時鐘函式,而且做得很好。本工具監看 44 個時間通道,並把其中 30 個換到工作階段時鐘上,可以加快時鐘,給處理序獨立的時區,跟隨子處理序,並在事後告訴你哪些通道真正被涵蓋了。它還是開放原始碼,而 RunAsDate 是封閉的免費軟體。反過來,RunAsDate 可以附加到已在執行的應用程式,本工具做不到。

完整比較還會說明 RunAsDate 在哪些情況下是更好的選擇。

這是 Windows 版的 libfaketime 嗎?

就精神而言,是的——同樣是只為一個程式而不是為整台電腦撥動時間的想法。實際上它是另一種實作,因為 libfaketime 依賴 LD_PRELOAD,而 Windows 上並不存在它。有專門講這件事的一頁。

它免費嗎?會往任何地方傳送東西嗎?

免費,並在 GPL-3.0 下開放原始碼。無需帳號,無遙測,它根本不連上網際網路——拔掉網路線,整個工具照樣能用。

視窗裡確實有兩個通向外部的控制項,所以值得點明,而不是讓你自己去發現:標題列中的 Donate 按鈕和 GitHub 按鈕。按下其中任何一個都會把一個網址交給你的瀏覽器,而真正去連線的是你的瀏覽器。無論哪種情況,Chrono Mock 自己都不會開啟任何連線,它對你的應用程式所量測的任何內容也不會被傳送到任何地方。