تغيير تاريخ النظام لاختبار تطبيق
إنها أقدم حيلة على الإطلاق: اضبط ساعة Windows على التاريخ الذي تريد اختباره، وشغّل البرنامج، ثم أعدها كما كانت. وهي تنجح - لكنها ما دامت مُزاحة فإنها تزيح معها كل شيء آخر على الجهاز.
ما الذي يتحرك فعلًا مع الساعة
ساعة النظام ليست ملكًا للبرنامج الذي تختبره وحده. فكل عملية وخدمة ومحادثة شبكية على الجهاز تقرأ الساعة نفسها، ولذا فإن تغييرًا يُجرى من أجل اختبار واحد هو تغيير يُجرى للجميع.
| ما الذي يقرأ الساعة | ما الذي يحدث عند إزاحتها |
|---|---|
| تسجيل الدخول إلى النطاق والمجلدات المشتركة | يتسامح Kerberos افتراضيًا مع فارق خمس دقائق بين الساعات. وما زاد على ذلك تُرفض تذاكره، ويفشل تسجيل الدخول أو الوصول إلى المشاركة. |
| الشهادات وHTTPS | صلاحية الشهادة تُحدَّد بالساعة. اضبطها بعد تاريخ انتهاء شهادة ما فيُرفض كل اتصال يعتمد عليها بوصفها منتهية؛ وأرجعها بما يكفي فلا تكون الشهادة سارية بعد. |
| خدمة وقت Windows | الجهاز المنضم إلى نطاق يأخذ وقته من وحدة تحكم بالنطاق، والخدمة تصحّح الساعة افتراضيًا مهما كان حجم الفارق. وقد يُلغى التاريخ الذي ضبطته وأنت ما زلت تختبر. |
| كل ما يسجّل وقتًا | الملفات والسجلات وصفوف قواعد البيانات والرسائل المرسلة التي تُنشأ والساعة مُزاحة تحمل تاريخ الاختبار، وتظل تحمله بعد أن تعيد الساعة. |
| البرمجيات التي تتذكر آخر تاريخ رأته | بعض البرامج تقرأ الساعة التي تتراجع على أنها عبث - وهذا بالضبط ما يحدث حين تستعيد التاريخ الحقيقي. |
كلما بعُد التاريخ زاد ما تصادفه من هذا. فالجهاز المضبوط على 2038 يرى كل شهادة صدرت اليوم منتهية. اختبار 2038 دون ذلك ←
ويتطلب الأمر كذلك صلاحية لا تملكها معظم الحسابات: فتغيير وقت النظام امتياز للمسؤول، وفي الجهاز المُدار كثيرًا ما لا يكون لك.
متى يكون تغيير الساعة هو الجواب الصحيح
الجهاز الافتراضي الذي لا يستخدمه أحد غيرك، مع تعطيل مزامنة ساعته، منصة اختبار جيدة تمامًا. ترميه بعد ذلك، فلا يهم شيء مما سجّله. فإن كان عندك واحد وكان الاختبار لتاريخ واحد فهو أبسط ما ينجح.
تبدأ المشكلة حين يكون الجهاز هو الذي تعمل عليه، أو الذي في النطاق، أو الذي يشغّل في الوقت نفسه شيئًا يجب ألا يلاحظ شيئًا.
أزِح ساعة برنامج واحد بدلًا من ذلك
الوقت المُزاح تراه عملية واحدة والعمليات الفرعية التي تبدأها. أما تسجيل دخولك إلى النطاق وشهاداتك وWindows Update فلا ترى شيئًا منه، فلا يتحرك شيء مما في الجدول أعلاه - ولا شيء تعيده بعد ذلك.
# يرى التطبيق 31 ديسمبر 2027، 23:59:50. ويحتفظ كل شيء آخر بالتاريخ الحقيقي. chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:50 # ابدأ قبل منتصف الليل بعشر دقائق وشغّل بسرعة x60 - تنقضي السنة في عشر ثوانٍ chrono run "C:\apps\test.exe" --at 2027-12-31T23:50:00 --mode x60
أن يكون التاريخ المُزاح لبرنامج قد وصل إليه فعلًا ليس أمرًا يُفترض. فكل جلسة تنتهي بحكم وقائمة بقنوات الوقت التي قرأها البرنامج حقًا. كيف تعرف أنه نجح ←
ما لا يحلّ هذا محله
- برنامج يسأل خادمًا عن الوقت يقع خارج ما يبلغه الاستبدال المحلي. وتخبرك الجلسة بذلك حين ترى البرنامج يفتح اتصالًا شبكيًا، بدل أن تتركك تفترض أن الاختبار نجح.
- اختبار النظام نفسه - خدمة تتفاعل مع تغيّر الساعة الحقيقية، أو مهمة مجدولة، أو سلوك Windows حول تغيير الساعة - لا بديل له عن تغيير الساعة، على جهاز يمكنك تحمّل خسارته.