PDA

View Full Version : اجرا شدن مخفی یک برنامه



nasimsaba
شنبه 13 خرداد 1391, 12:33 عصر
با سلام

من می خواستم یک برنامه وقتی اجرا میشه بصورت مخفی اجرا بشه.البته منظورم این نیست که یک برنامه دیگه اونو بصورت مخفی اجرا کنه.یعنی به عبارتی دیگه خودشو مخفی کنه.:افسرده:

mohammad272005
شنبه 13 خرداد 1391, 14:47 عصر
شاید WinServie بتونه کارت رو راه بندازه. WinServiceها UI ندارن و در Processes در Tak Manager نمیان.
(ان شاء الله که واسه ویروس نویسی نیست)

nasimsaba
شنبه 13 خرداد 1391, 16:15 عصر
سلام.ممنون دوست عزیز
نه ویروس نویسی نیست.ویندوز سرویس ها رو میدونم.اخه ویندوز سرویس دردسرهای خودشه داره.این برنامه من گاهی اوقات UI هم داره.واسه همین Win App نوشتمش.الان با یک برنامه دیگه میتونم اونو بصورت مخفی اجرا کنم ولی می خوام مثلا وقتی توی Startup قرارش میدم بصورتی اجرا بشه که دیده نشه.

emad2012
شنبه 13 خرداد 1391, 16:39 عصر
داداش
1. سرویس های ویندوز میتونن برنامه های اجرایی مثل win app ها رو اجرا کنن.
2. برنامه های win app میتونن فرم نداشته باشن یا فرمشون سایز 0 و0 داشته باشه یا حتی موقعیتشون خارج از مختصات دستکتاپ باشه یا تو تسک بار نیان یا ....
برای انجام این کارها تنظیم مشخصات فرم اصلی کافیه هر چند در پروسس لیست همچنان قرار میگیرن

nasimsaba
شنبه 13 خرداد 1391, 17:06 عصر
ممنون از پاسخ شما دوست عزیز

در مورد گزینه ی دومی که فرمودین حرفاتون کاملا درسته.و اینا رو میدونستم ولی راه اصولی نیست.این سوال رو هم پرسیدم چون میدونستم توی دلفی همچین امکانی بود.

ام در مورد گزینه اولی که فرمودین فکر نمی کنم که سرویس ها بتونن برنامه های Winapp رو اجرا کنن.چون امتحان کردم و برنامه اجرا نمی شد و سرویس هم stop میشد.البته شاید من راهشو نمی دونم.ممنون میشم اگه بفرمایین چطور امکان داره این کارو بکنم

emad2012
شنبه 13 خرداد 1391, 17:25 عصر
allow service to interact with desktop
اگه سرویس ویندوزی که ایجاد میکنید در تنظیماتش گزینه بالا رو فعال کرده باشید
در حقیقت امکان به کارگیری win app های دیگر را هم خواهید داشت با جستجوی عبارت فوق به همراه craete win service مثالهای زیادی مییابید
از جمله :
http://stackoverflow.com/questions/4237225/windows-service-allow-service-to-interact-with-desktop
موفق باشید.
-----------------
دوستان جاوا کار اگه لطف کنید این تاپیکها رو جواب بدید ممنون میشم
http://barnamenevis.org/showthread.php?344183-%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8-ide-%D9%85%D9%86%D8%A7%D8%B3%D8%A8-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AC%D8%A7%D9%88%D8%A7&p=1517914#post1517914
http://barnamenevis.org/showthread.php?344317-%DA%86%D8%B1%D8%A7-%D8%A8%D8%B1%D8%AE%DB%8C-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%D9%87%D8%A7%DB%8C-%D8%AE%D9%88%D8%A8-%D9%82%D8%A8%D9%84%DB%8C-%D8%AF%D8%B1-%D9%86%D8%AA-%D8%A8%DB%8C%D9%86%D8%B2-7-%DA%A9%D8%A7%D8%B1-%D9%86%D9%85%DB%8C%DA%A9%D9%86%D8%AF%D8%9F&p=1518171#post1518171

hojati
شنبه 13 خرداد 1391, 17:34 عصر
منم یه مشکلی دارم که فکر کنم به سوال دوستمون مربوط بشه چند جاهام مطرح کردم ولی کسی جوابی به من نداد من میخواستم برنامه بنویسیم که وقتی کاربر فایلی رو پاک میکند از ان فایل یک کپی گرفته شود اصلا قصد نوشتن برنامه مخرب ندارم .یه سری مطالعه هم در رابطه با win serv و رجیستری انجام دادم
ممنون میشم کسی منو راهنمایی کنه

emad2012
شنبه 13 خرداد 1391, 18:27 عصر
کافیه یه پشتیبان از اون فایل در جای دیگه داشته باشید و یه وین سرور بنویسید که با یه تایمر در دوره های زمانی خاص وجود یا عدم وجود فایل اصلی رو چک کنه در صورت نبودن فایل اصلی فایل پشتیبان رو بجاش کپی کنه ضمنا این وین سریس هم نیاز به فعال بودن گزینه allow service to interact with desktop داره که با کمی جستجو همانطور که در جواب دوستمون گفتم میتونید انجامش بدید.
موفق باشید

nasimsaba
یک شنبه 14 خرداد 1391, 17:41 عصر
سلام
واسه مخفی نشون دادن یک برنامه وقتی size و location اونو تغییر میدیم.بعد از اجرا درسته که توی صفحه نشون داده نمیشه ولی توی لیست application های taskmanager ویندوز نشون داده میشه. ولی وقتی یک برنامه رو بصورت زیر مخفی می کنیم اونجا نشون نمیده
Process p = new Process();
ProcessStartInfo pinfo = new ProcessStartInfo(path);
pinfo.WindowStyle = ProcessWindowStyle.Hidden;

p.StartInfo = pinfo;
p.Start();
فقط مشکل اینجاست که این برنامه توسط برنامه دیگه ای اجرا نمیشه بلکه خودش باید خودشو مخفی کنه.

emad2012
دوشنبه 15 خرداد 1391, 08:47 صبح
درسته با کد بالا توی لیست application های taskmanager ویندوز نشون داده نمیشه هرچند همچنان در لیست process ها وجود داره.
و همینطور که متوجه شدی این کد برای ایجاد یک پروسس جدید و اجرای اون بصورت مخفیه. یعنی یک پروسس دیگه این کد رو اجرا میکنه به هر حال دو راه دارید(به نظر من):
البته در سی شارپ
1. میتونید این کد رو در onstart یک win service که خودتون درست میکنید قرار بدید . اینطوری همه چی درست میشه یعنی سرویسی که auto starte و با بالا آمدن ویندوز اجرا میشه و برنامه شما رو بصورت مخفی اجرا میکنه.

2. یه پروژه ایجاد کنید و همه کد های تابع main برنامه رو پاک کرده و همین کدها رو قرار بدید
Process p = new Process();
ProcessStartInfo pinfo = new ProcessStartInfo(path);
pinfo.WindowStyle = ProcessWindowStyle.Hidden;

p.StartInfo = pinfo;
p.Start();


با مسیر برنامه ای که میخواید مخفی بشه یعنی این برنامه کارش فقط اجرای برنامه شماست و دیگر هیچ . یعنی نه فرمی نه پیغامی و نه هیچی. برنامه شم رو اجرا میکنه و تموم میشه و هیچی هم ازش دیده نمیشه.
فکر کنم اینجوری مشکلتون حل بشه

راستی یه وقت این کد رو داخل بر نامه خودتون تو تابع main قرار ندید در حالیکه مسیر خودش (پروژه) را دادید که مثلا بخواید خودش خودش رو اجرا کنه که دیگه هیچی !!! میوفته تو لوپ اجرا و همینطور خودش رو اجرا میکنه تا ....

nasimsaba
دوشنبه 15 خرداد 1391, 15:24 عصر
دوستان سلام
با راهنمایی دوستمون اقا عماد راهشو پیدا کردم.میذارم اینجا تا اگه کسی خواست ازش استفاده کنه.فقط کافیه توی متد main توی قسمت program برنامه این کد رو بذارین

static void Main(params string[] args)
{
if (args.Length > 0 && args[0] == "hide")
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form1());
}
else
{
Process p = new Process();
ProcessStartInfo pinfo = new ProcessStartInfo(Application.StartupPath + "\\myhidden.exe");
pinfo.WindowStyle = ProcessWindowStyle.Hidden;
pinfo.Arguments = "hide";

p.StartInfo = pinfo;
p.Start();

Process.GetCurrentProcess().Kill();
}
}



موفق باشید.

emad2012
دوشنبه 15 خرداد 1391, 19:04 عصر
آفرین بر شما
ضمتا خط 20
Process.GetCurrentProcess().Kill();
هم نیاز نیست. application خودش exit میشه!
موفق باشید

hojati
سه شنبه 16 خرداد 1391, 12:04 عصر
دوست عزیز من ولی متوجه جوابی که به من دادید نشدم؟ منی میخام کلربر هر فایل یا عکسی رو که پاک میکنه همون لحظه یک کپی از اون گرفته بشه ؟
من باید در مورد winserv مطالعه کنم یا رجیستری ؟
ممنون میشم کمکم کنید

emad2012
سه شنبه 16 خرداد 1391, 22:20 عصر
سلام جواب قبلی که بهتون دادم در صورت حذف فایل بلافاصله جایگزینش رو میذاشت ولی راه دیگه اینه که فایل مورد تظر رو در مقابل حذف شدن توسط کاربر محافظت کرد اگه نخوایم وارد برنامه نویسی سیستمی و ممانعت از حذف فایل توسط فایل درایور بشیم یک روش ساده بصورت زیره :
همون ایجاد سرویس یا برنامه ای که یعنوان محافظ در حال اجرا بمونه که اگه نخواید سرویس بنویسید کدهای بالا خیلی راهگشاست و در نهایت عمل محافظت از حذف فایل مرد نظر مثلا test.txt بصورت زیر :

FileStream f =
new FileStream("test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

در اینصورت شما فایل مورد نظر رو باز نگه میدارید و آن را برای خواندن و نوشتن برای دیگران در حالت share قرار میدهید یعنی کاربر امکان ایجاد تغییرات در فایل را دارد ولی امکان حذف نخواهد داشت بنابر این تا زمانی که برنامه شما در حال اجراست یا file.close();h را انجام نداده اید فایل محافظت شده است.
پس این کد را باید در یک سرویس قرار دهید تا همیشه اجرا بماند و عمل محافظت را انجام دهد یا یک برنامه مثل مثال بالا که در حالت مخفی اجرا شده است یا هر برنامه دیگری که ....