سلام به برنامه نويسان.
يه سوال داشتم خدمتتون.
چطور ميشه يه Process رو حمايت كرد كه كاربر نتونه به هيچ وجه ببندتش؟
برا يه برنامه كافي نت نيازش دارم.
اگه كمكم كرديد اين برنامه رو تو اينترنت رايگام مي ذارم.
خدا نگهدار.
سلام به برنامه نويسان.
يه سوال داشتم خدمتتون.
چطور ميشه يه Process رو حمايت كرد كه كاربر نتونه به هيچ وجه ببندتش؟
برا يه برنامه كافي نت نيازش دارم.
اگه كمكم كرديد اين برنامه رو تو اينترنت رايگام مي ذارم.
خدا نگهدار.
اوجوری که شما میگید نمیشه .(شدنی هست ولی خیلی سخته که اگه کارت راه نیفتاد میگم).
یه تایمر بزاری و هر بار چک کنه که برنامه باز هست یا نه و اگه بسته بود بازش کنه .
اگه خواستی بگو کدشو بزارم.
اين جوري كه شما ميگيد بايد دوتا برنامه باشن ، نه من مي گم هنگامي كه بخواد ببندتش (با هر برنامه اي) نتونه.
خوب مگه کافی نت نیست ؟؟
دوتاشونو با هم باز بزار و هر کدوم اون یکی رو نگه داره .
همه اینجا نابغند.
اگر کسی بخواد ببنده اول Message Loop های شما رو خیلی قشنگ Unregister میکنه.
بعد برنامه ها رو Freeze میکنه.بعد خیلی قشنگ مثل آب خوردن میبندتشون.
شما میتونید با استفاده از Hook ها این کار رو بکنید.
به این شکل که یه hook روی KillProcess (من همیشه اسم این تابع رو اشتباه میگم نمیدون Kill بود یا KillProcess) میزارید و تست میکنید که برنامه هدف PIDش با برنامه شما که یه برنامست نه دوتا, مساوی هست یا نه.اگر مساوی بود Call رو Block میکنید.دقیقاْ همون کاری که Antivirus ها میکنند.
چند تا چیز نباید فراموش بشه.
اول اینکه ۳ تا Thread باید داشته باشید که همدیگه رو برای Freeze بودن یا نبودن تست کنن.
دوم اینکه Memory برنامه شما باید Protected باشه که اصلاْ کار C# نیست و معمولاْ با VirtualAlloc توی یه زبون Native مثل C++ انجام میشه.
و آخر اینکه من نمیفهمم چرا کافینتی ها علاقه ندارند از یه برنامه آماده استفاده کنند؟
در مورد فریز و بقیه چیزها اگه توضیح بدید ممنون می شم.
آخه freezeکردن یه برنامه که کاری نداره.
تازه اگر حوصله codeinjection برای stop کردن message loop رونداشته باشید میتونید برنامه رو با DDoS message کنید.
یه طوری که قاطی کنه.کار سختی نیست.
بعد در 1 ms تمام ترد ها رو pause میکنید.اول از اونی که message loop روشه شروع میکنید.
یه راه دیگه هم هست.
با یه کد ساده که فکر نمیکنم 20 خط بیشتر بشه تمام timer های process رو پیدا میکنید و unregister میکنید.اینطوری دیگه لازم نیست کاری با message loop بکنید.
البته همه ی اینها در حالتیه که برنامه شما کاملاً sealed باشه و timer مسخره ترین جاش باشه.
در غیر این سورت با یه مقدارwriteprocessmemory میتونید برنامه رو ببندید.
راه زیاده ولی مطمئن ترین راهی که من میشناسم که 100% ایراد هم داره و من نمیدونم همین hook کردنه.
اگه میشه یه مثال عملی بیارید. (سورسی ، مقاله ای یا هر چیز دیگه)
هنوز نخوندمشون اما خیلی با محتوا بنظر می رسند.