PDA

View Full Version : آموزش: چجوري ميشه يه Process رو حمايت كرد؟



rezamansori
سه شنبه 02 شهریور 1389, 21:31 عصر
سلام به برنامه نويسان.
يه سوال داشتم خدمتتون.
چطور ميشه يه Process رو حمايت كرد كه كاربر نتونه به هيچ وجه ببندتش؟
برا يه برنامه كافي نت نيازش دارم.
اگه كمكم كرديد اين برنامه رو تو اينترنت رايگام مي ذارم.
خدا نگهدار.

sinashahab
سه شنبه 02 شهریور 1389, 22:00 عصر
اوجوری که شما میگید نمیشه .(شدنی هست ولی خیلی سخته که اگه کارت راه نیفتاد میگم).
یه تایمر بزاری و هر بار چک کنه که برنامه باز هست یا نه و اگه بسته بود بازش کنه .

اگه خواستی بگو کدشو بزارم.

rezamansori
سه شنبه 02 شهریور 1389, 22:03 عصر
اين جوري كه شما ميگيد بايد دوتا برنامه باشن ، نه من مي گم هنگامي كه بخواد ببندتش (با هر برنامه اي) نتونه.

sinashahab
سه شنبه 02 شهریور 1389, 23:14 عصر
خوب مگه کافی نت نیست ؟؟

دوتاشونو با هم باز بزار و هر کدوم اون یکی رو نگه داره .

FastCode
سه شنبه 02 شهریور 1389, 23:36 عصر
همه اینجا نابغند.
اگر کسی بخواد ببنده اول Message Loop های شما رو خیلی قشنگ Unregister میکنه.
بعد برنامه ها رو Freeze میکنه.بعد خیلی قشنگ مثل آب خوردن میبندتشون.

شما میتونید با استفاده از Hook ها این کار رو بکنید.
به این شکل که یه hook روی KillProcess (من همیشه اسم این تابع رو اشتباه میگم نمیدون Kill بود یا KillProcess) میزارید و تست میکنید که برنامه هدف PIDش با برنامه شما که یه برنامست نه دوتا, مساوی هست یا نه.اگر مساوی بود Call رو Block میکنید.دقیقاْ همون کاری که Antivirus ها میکنند.
چند تا چیز نباید فراموش بشه.
اول اینکه ۳ تا Thread باید داشته باشید که همدیگه رو برای Freeze بودن یا نبودن تست کنن.
دوم اینکه Memory برنامه شما باید Protected باشه که اصلاْ کار C# نیست و معمولاْ با VirtualAlloc توی یه زبون Native مثل C++ انجام میشه.
و آخر اینکه من نمیفهمم چرا کافینتی ها علاقه ندارند از یه برنامه آماده استفاده کنند؟

reza_stb2002
چهارشنبه 03 شهریور 1389, 01:49 صبح
همه اینجا نابغند.
اگر کسی بخواد ببنده اول Message Loop های شما رو خیلی قشنگ Unregister میکنه.
بعد برنامه ها رو Freeze میکنه.بعد خیلی قشنگ مثل آب خوردن میبندتشون.

....

میشه یه نمونه بذارید یا لینک منبع بدید؟
ممنون

rezamansori
چهارشنبه 03 شهریور 1389, 12:00 عصر
در مورد فریز و بقیه چیزها اگه توضیح بدید ممنون می شم.

FastCode
چهارشنبه 03 شهریور 1389, 12:05 عصر
میشه یه نمونه بذارید یا لینک منبع بدید؟
ممنون

آخه freezeکردن یه برنامه که کاری نداره.
تازه اگر حوصله codeinjection برای stop کردن message loop رونداشته باشید میتونید برنامه رو با DDoS message کنید.
یه طوری که قاطی کنه.کار سختی نیست.
بعد در 1 ms تمام ترد ها رو pause میکنید.اول از اونی که message loop روشه شروع میکنید.



یه راه دیگه هم هست.
با یه کد ساده که فکر نمیکنم 20 خط بیشتر بشه تمام timer های process رو پیدا میکنید و unregister میکنید.اینطوری دیگه لازم نیست کاری با message loop بکنید.

البته همه ی اینها در حالتیه که برنامه شما کاملاً sealed باشه و timer مسخره ترین جاش باشه.
در غیر این سورت با یه مقدارwriteprocessmemory میتونید برنامه رو ببندید.

راه زیاده ولی مطمئن ترین راهی که من میشناسم که 100% ایراد هم داره و من نمیدونم همین hook کردنه.

rezamansori
چهارشنبه 03 شهریور 1389, 12:27 عصر
اگه میشه یه مثال عملی بیارید. (سورسی ، مقاله ای یا هر چیز دیگه)

FastCode
چهارشنبه 03 شهریور 1389, 12:37 عصر
اینها رو بخونید:

http://msdn.microsoft.com/en-us/library/ms681674(VS.85).aspx

http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/76abb1b0-11c5-4fb0-ace7-bcc25985cfa8

http://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow.aspx

http://www.pinvoke.net/default.aspx/kernel32.writeprocessmemory

http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/c7db78bf-4bc2-4717-a5bf-62f4cfe48f02

rezamansori
چهارشنبه 03 شهریور 1389, 13:14 عصر
هنوز نخوندمشون اما خیلی با محتوا بنظر می رسند.