Mengubah tanggal sistem untuk menguji sebuah aplikasi
Ini trik paling tua yang ada: setel jam Windows ke tanggal yang ingin Anda uji, jalankan program, lalu kembalikan jamnya. Caranya berhasil - dan selama jam digeser, ia ikut menggeser semua hal lain di mesin itu.
Apa yang sebenarnya ikut bergeser bersama jam
Jam sistem bukan milik program yang sedang Anda uji saja. Setiap proses, layanan, dan percakapan jaringan di mesin membaca jam yang sama, sehingga perubahan untuk satu pengujian adalah perubahan untuk semuanya.
| Yang membaca jam | Yang terjadi saat Anda menggesernya |
|---|---|
| Masuk ke domain dan folder bersama | Kerberos secara bawaan menoleransi selisih jam lima menit. Lebih dari itu, tiketnya ditolak, dan proses masuk atau akses ke folder bersama gagal. |
| Sertifikat dan HTTPS | Valid atau tidaknya sebuah sertifikat ditentukan dengan jam. Setel jam melewati tanggal berakhir sebuah sertifikat dan setiap koneksi yang bergantung padanya ditolak karena kedaluwarsa; mundurkan cukup jauh dan sertifikat itu belum berlaku. |
| Layanan Waktu Windows | Mesin yang bergabung ke domain mengambil waktu dari pengendali domain, dan secara bawaan layanan itu mengoreksi jam berapa pun besarnya selisih. Tanggal yang Anda setel bisa dibatalkan saat Anda masih menguji. |
| Semua yang mencatat waktu | Berkas, log, baris basis data, dan surel terkirim yang dibuat saat jam digeser membawa tanggal pengujian, dan tetap membawanya setelah Anda mengembalikan jam. |
| Perangkat lunak yang mengingat tanggal terbaru yang pernah dilihat | Beberapa program membaca jam yang mundur sebagai tanda pemalsuan - dan itulah yang terjadi saat Anda memulihkan tanggal yang sebenarnya. |
Semakin jauh tanggalnya, semakin banyak hal ini yang Anda temui. Mesin yang disetel ke 2038 melihat setiap sertifikat yang diterbitkan hari ini sebagai kedaluwarsa. Menguji 2038 tanpa itu →
Selain itu diperlukan hak yang tidak dimiliki kebanyakan akun: mengubah waktu sistem adalah hak istimewa administrator, dan di mesin yang dikelola sering kali bukan hak Anda.
Kapan menggeser jam adalah jawaban yang tepat
Mesin virtual yang tidak dipakai orang lain, dengan sinkronisasi jamnya sendiri dimatikan, adalah bangku uji yang sangat baik. Anda membuangnya setelahnya, jadi apa pun yang dicatatnya tidak berarti. Jika Anda punya satu dan pengujiannya hanya satu tanggal, itulah hal paling sederhana yang berhasil.
Masalah dimulai ketika itu mesin tempat Anda bekerja, mesin di dalam domain, atau mesin yang pada saat yang sama menjalankan sesuatu yang tidak boleh menyadari apa pun.
Geser jam satu program saja
Waktu yang digeser terlihat oleh satu proses dan anak-anak yang dijalankannya. Masuk domain Anda, sertifikat Anda, dan Windows Update tidak pernah melihatnya, sehingga tidak ada yang bergeser dari tabel di atas - dan tidak ada yang perlu dikembalikan sesudahnya.
# Aplikasi melihat 31 Desember 2027, 23:59:50. Semua yang lain tetap memakai tanggal asli. chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:50 # Mulai sepuluh menit sebelum tengah malam dan jalankan dengan kecepatan x60 - pergantian tahun tiba dalam sepuluh detik chrono run "C:\apps\test.exe" --at 2027-12-31T23:50:00 --mode x60
Apakah tanggal yang digeser untuk satu program benar-benar sampai kepadanya bukan sesuatu yang boleh diasumsikan. Setiap sesi berakhir dengan sebuah putusan dan daftar kanal waktu yang benar-benar dibaca program. Bagaimana Anda tahu itu berhasil →
Yang tidak digantikan oleh ini
- Program yang menanyakan waktu ke server berada di luar jangkauan penggantian lokal. Sesi memberi tahu hal itu ketika melihat program membuka koneksi jaringan, alih-alih membiarkan Anda mengira pengujiannya lolos.
- Menguji sistem itu sendiri - layanan yang bereaksi saat jam asli berubah, tugas terjadwal, perilaku Windows di sekitar perubahan jam - tidak punya pengganti selain mengubah jam, di mesin yang boleh Anda korbankan.