Bir uygulamayı test etmek için sistem tarihini değiştirmek
Var olan en eski hile: Windows saatini test etmek istediğiniz tarihe ayarlarsınız, programı çalıştırırsınız, saati geri alırsınız. İşe yarar - ve saat kaydırılmış olduğu sürece makinedeki geri kalan her şeyi de kaydırır.
Saatle birlikte gerçekte neler kayar
Sistem saati, test ettiğiniz programa özel değildir. Makinedeki her süreç, hizmet ve ağ konuşması aynı saati okur; dolayısıyla tek bir test için yapılan değişiklik hepsi için yapılmış demektir.
| Saati okuyan şey | Kaydırdığınızda ne olur |
|---|---|
| Etki alanı oturumu ve paylaşılan klasörler | Kerberos varsayılan olarak beş dakikalık bir saat farkını tolere eder. Bunun ötesinde biletleri reddedilir; oturum açma ya da bir paylaşıma erişim başarısız olur. |
| Sertifikalar ve HTTPS | Bir sertifikanın geçerli olup olmadığına saat karar verir. Saati bir sertifikanın bitiş tarihinin ötesine alırsanız ona dayanan her bağlantı süresi dolmuş diye reddedilir; yeterince geriye alırsanız sertifika henüz geçerli değildir. |
| Windows Zaman hizmeti | Etki alanına katılmış bir makine saatini bir etki alanı denetleyicisinden alır ve hizmet varsayılan olarak farkın büyüklüğüne bakmadan saati düzeltir. Ayarladığınız tarih siz hâlâ test ederken geri alınabilir. |
| Zaman kaydeden her şey | Saat kaydırılmışken oluşan dosyalar, günlükler, veritabanı satırları ve gönderilen e-postalar test tarihini taşır ve saati geri aldıktan sonra da taşımaya devam eder. |
| Gördüğü en son tarihi hatırlayan yazılımlar | Bazı programlar geriye giden bir saati kurcalama olarak okur - gerçek tarihi geri yüklediğinizde olan tam da budur. |
Tarih ne kadar uzaksa bunların o kadarıyla karşılaşırsınız. 2038’e ayarlanmış bir makine bugün verilmiş her sertifikayı süresi dolmuş görür. Bunsuz 2038’i test etmek →
Ayrıca çoğu hesapta olmayan bir hak gerekir: sistem saatini değiştirmek bir yönetici ayrıcalığıdır ve yönetilen bir makinede çoğu zaman sizin kullanımınıza açık değildir.
Saati değiştirmenin doğru cevap olduğu durumlar
Başka kimsenin kullanmadığı, kendi saat eşitlemesi kapatılmış bir sanal makine gayet iyi bir test tezgâhıdır. Sonra onu atarsınız, yani kaydettiği hiçbir şey önemli olmaz. Elinizde böyle bir makine varsa ve test tek bir tarihle ilgiliyse, işe yarayan en basit şey budur.
Sorun, bu makinenin üzerinde çalıştığınız makine, etki alanındaki makine ya da aynı anda hiçbir şeyi fark etmemesi gereken bir şey çalıştıran makine olmasıyla başlar.
Bunun yerine tek bir programın saatini kaydırın
Kaydırılan zamanı tek bir süreç ve başlattığı alt süreçler görür. Etki alanı oturumunuz, sertifikalarınız ve Windows Update onu hiç görmez; dolayısıyla yukarıdaki tablodan hiçbir şey kaymaz - ve sonradan geri alınacak bir şey de kalmaz.
# Uygulama 31 Aralık 2027, 23:59:50’yi görür. Geri kalan her şey gerçek tarihi korur. chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:50 # Gece yarısından on dakika önce başlayıp x60 hızla çalıştırın - yıl on saniyede dönüyor chrono run "C:\apps\test.exe" --at 2027-12-31T23:50:00 --mode x60
Bir program için kaydırılan tarihin ona gerçekten ulaşıp ulaşmadığı varsayılacak bir şey değildir. Her oturum bir kararla ve programın gerçekten okuduğu zaman kanallarının listesiyle biter. İşe yaradığını nereden bileceksiniz →
Bunun yerine geçmeyen şeyler
- Zamanı bir sunucudan soran bir program, yerel bir yer değiştirmenin erişiminin dışındadır. Oturum, programın bir ağ bağlantısı açtığını görünce bunu söyler; testin geçtiğini varsaymanızı beklemez.
- Sistemin kendisini test etmek - gerçek saatin değişmesine tepki veren bir hizmet, zamanlanmış bir görev, Windows’un saat değişikliği çevresindeki davranışı - saati değiştirmenin yerini tutacak bir şeye sahip değildir; bunu göze alabileceğiniz bir makinede yapın.