پایداری بدون نوشتن مستقیم در رجیستری
اگه فکر میکنی ماندگاری فقط یعنی Run و RunOnce و تسک اسکجولر و سرویس وقتشه با PhantomPersist آشنا شی
ایده ساده ولی هوشمندانهست استفاده از API قانونی RegisterApplicationRestart و بازی با مکانیزم خاموشی ویندوز جوری که خود سیستم عامل بیاد اجرای مجدد برنامه رو ثبت کنه اونم توسط csrss.exe و دقیقا در لحظه پایانی خاموشی جایی که خیلی از ابزارهای مانیتورینگ دیگه فعال نیستن
🧠 داستان از این قراره
RegisterApplicationRestart یه API رسمی ویندوزه برای اینکه بگی اگه برنامه کرش کرد یا بعد از آپدیت دوباره اجراش کن
اما اجرای مجدد فقط وقتی اتفاق میفته که خاموشی با فلگ RESTARTAPPS انجام شده باشه
ترفند PhantomPersist اینه که رویداد پایان سشن رو میگیره خاموشی عادی رو کنسل میکنه و خودش سیستم رو با ExitWindowsEx و فلگ EWX_RESTARTAPPS ریست میکنه
برای این کار یه پنجره مخفی میسازه که پیام WM_QUERYENDSESSION رو دریافت کنه و منطق لازم رو اجرا کنه
⚙️ زیر کاپوت چه خبره
برنامه خودش رو با RegisterApplicationRestart ثبت میکنه
یه پنجره مخفی میسازه و منتظر پیام پایان سشن میمونه
موقع خاموشی این زنجیره اجرا میشه
ShutdownBlockReasonCreate
بعد AbortSystemShutdown
بعد فعال کردن SeShutdownPrivilege
و در نهایت ExitWindowsEx با فلگ EWX_RESTARTAPPS
نتیجه این میشه که داخل مسیر
HKCU Software Microsoft Windows CurrentVersion RunOnce Application Restart شماره N
یه مقدار جدید ساخته میشه
نکته جالب اینجاست که اینو خود برنامه نمینویسه csrss.exe مینویسه اونم در انتهای خاموشی
و مهمتر اینکه نیاز به دسترسی ادمین هم نداره چون SeShutdownPrivilege معمولا برای پردازشهای کاربری در دسترسه
👍 چرا جذابه
چیزی مستقیم داخل شاخههای مشکوک رجیستری نوشته نمیشه
همه چی با API قانونی انجام میشه
نه سرویس میخواد نه تسک
ثبت هم در لحظه خاموشی انجام میشه نه زمان اجرای عادی
👎 محدودیتها
در قطع برق یا BSOD کار نمیکنه
حداقل حدود ۶۰ ثانیه باید برنامه قبل از خاموشی فعال بوده باشه
وابسته به اینه که بتونه پیام WM_QUERYENDSESSION رو بگیره
🛡 برای تیم آبی
اگه دیدی در پایان خاموشی یه کلید RunOnce با نام Application Restart ساخته شده و نویسنده csrss.exe بوده باید حساس شی
اگه قبل از ریست این توالی API دیده شد
ShutdownBlockReasonCreate
AbortSystemShutdown
ExitWindowsEx با RESTARTAPPS
بازم نشونه مشکوکه
پنجرههای مخفی در پردازشهای غیرعادی هم میتونه سیگنال باشه



