PDA

View Full Version : سوال: اجرای یک exe در Ram



peymanjon
سه شنبه 06 تیر 1396, 00:16 صبح
با عرض سلام و احترام خدمت دوستان گرامی.

من می خواهم یک luncher بنویسم که در بخشی از آن یک فایل exe را اجرا می کند که الان دو مشکل دارم:
1- اولا قایل exe را چجوری به پروژه add کنم که کاربر آن را نبیند و فقط از طریق لانچر آن را بتواند اجرا کند
2- می خواهم یجورایی exe اجرا شده توسط لانچر در رم سیستم اجرا شود و کاربر آن exe را نبیند، یعنی exe از دل برنامه لانچر اجرا شود و با بسته شدن لانچر exe هم بسته شودو کاربر به هیچ عنوان نتواند به exe من دسترسی داشته باشد یا آن را ببیند (امیدوارم منظورمو تونسته باشم برسونم)

لطفا راه هایی که به نظرتون می رسه را بفرمایید.

با تشکر از وقتتون

Reza-HNA
سه شنبه 06 تیر 1396, 13:31 عصر
اون exe ای که قراره در رم اجرا بشه به چه زبانی نوشته شده ؟ #C هست یا Native ؟ چون هرکدوم روش اجرای متفاوتی دارند . اگر C# هست که با Reflection میتونید از ریسورس به صورت آرایه بایت بخونید و اجراش کنید .
در ضمن این امکان هست که کاربر برنامه رو از روی رم دامپ کنه و به فایل قابل استفاده تبدیلش کنه .

peymanjon
سه شنبه 06 تیر 1396, 15:07 عصر
اون Exe برنامه که قراره اجرا شه فک کنم C++ باشه چون به کد اون دسترسی ندارم و فقط می خوام اجراش کنم.
به نظرتون چجوری به پروژه add کنم که جدا از exe برنامه نباشه؟

Reza-HNA
سه شنبه 06 تیر 1396, 15:57 عصر
چون فایل C++ هست ساده ترین راه اینه که از نرم افزار EnigmaVB (یا مشابهش مثل MoleBox , boxedapp و ... ) استفاده کنید .
کارش اینه که میاد dll ها و exe رو تحت یک فایل exe مجتمع میکنه .
موفق باشید ...

peymanjon
سه شنبه 06 تیر 1396, 16:10 عصر
دوست عزیز برنامه لانچر من باید این کار و بکنه که با سی شارپ می خوام اونو بنویسم پس ربطی به سی پلاس نداره، باید اون exe را از لانچر صدا بزنم پس لطفا یک راه حل در سی شارپ بفرمایید. در کل من حدس زدم که با سی پلاس پلاس باشه آخه مطمئن نیستم.

Reza-HNA
سه شنبه 06 تیر 1396, 16:54 عصر
دوست عزیز برنامه لانچر من باید این کار و بکنه که با سی شارپ می خوام اونو بنویسم پس ربطی به سی پلاس نداره، باید اون exe را از لانچر صدا بزنم پس لطفا یک راه حل در سی شارپ بفرمایید. در کل من حدس زدم که با سی پلاس پلاس باشه آخه مطمئن نیستم.

مشکلی نداره ، لانچرتون رو مینویسید و اون exe رو میزارید کنار برنامتون ازش استفاده میکنید بعد از تکمیل برنامه رو مجتمع میکنید .
با این نرم افزار (https://od.lk/f/91262070_ezoLu) اسکن کنید اون exe رو ببینید با چه زبانی نوشته شده .

به هر حال اگر اون exe با C# بود که میتونید دیکامپایل کنید و از سورسش استفاده کنید یا از reflection و Assembly.load و Invoke استفاده کنید ، اگر هم نبود توی اینترنت RunPE رو سرچ کنید که البته یک ایراد داره اونم اینه که از argument نمیتونید برای اجرای پروسس استفاده کنید .

shahryari
سه شنبه 06 تیر 1396, 17:13 عصر
فایل exe اصلی رو بریز نو ریسورس، با استفاده تابع writeAllByte در یجایی (مثلا temp) ایجادش کن و با process.Start اجراش کن بره پی کارش
البته یکم ظرافت باید به خرج بدی
1- مثلا با تابع WaitForExit منتظر بسته شدنش باشی و بعد فایل ایجاد شده رو دیلیت کنی
2- چون اجرای بدون وقفه بعد از ایجاد فایل ممکن استثنا رخ بده باید چند میلی ثانیه thred رو متوقف کنی بعد اجراش کنی و امثالهم

string exeFilePath = Environment. GetFolderPath(Environment .SpecialFolder.Templates) + @"\myFile.exe";
System.IO.File. WriteAllBytes(exeFilePath, Properties.Resources.myFile);
System.Threading.Thread.Sleep(200);
System.Diagnostics.Process p = System.Diagnostics .Process.Start(exeFilePath);
p.WaitForExit();
System.IO.File.Delete(exeFilePath);

336699
سه شنبه 06 تیر 1396, 18:59 عصر
سلام
از برنامه Enigma Virtual Box استفاده کن.

با این برنامه میشه فایل exe یا dll یا ... رو به فایل اصلی اضافه کنی :لبخند:

http://enigmaprotector.com/en/downloads.html

peymanjon
سه شنبه 06 تیر 1396, 21:09 عصر
فایل exe اصلی رو بریز نو ریسورس، با استفاده تابع writeAllByte در یجایی (مثلا temp) ایجادش کن و با process.Start اجراش کن بره پی کارش
البته یکم ظرافت باید به خرج بدی
1- مثلا با تابع WaitForExit منتظر بسته شدنش باشی و بعد فایل ایجاد شده رو دیلیت کنی
2- چون اجرای بدون وقفه بعد از ایجاد فایل ممکن استثنا رخ بده باید چند میلی ثانیه thred رو متوقف کنی بعد اجراش کنی و امثالهم

string exeFilePath = Environment. GetFolderPath(Environment .SpecialFolder.Templates) + @"\myFile.exe";
System.IO.File. WriteAllBytes(exeFilePath, Properties.Resources.myFile);
System.Threading.Thread.Sleep(200);
System.Diagnostics.Process p = System.Diagnostics .Process.Start(exeFilePath);
p.WaitForExit();
System.IO.File.Delete(exeFilePath);

مسئله همینجاست اگه کاربر لانچر و end task کنه می تونه به exe دسترسی داشته باشه ، اگه لطف کنید و در ادامه راهی معرفی کنید که بتونم exe را بدون کپی در هارد مستقیم در Ram اجرا کنم یا راه دیگه که بتونیم دسترسی به exe را به صفر برسونیم بسیار عالی می شه.

peymanjon
سه شنبه 06 تیر 1396, 22:10 عصر
سلام
از برنامه Enigma Virtual Box استفاده کن.

با این برنامه میشه فایل exe یا dll یا ... رو به فایل اصلی اضافه کنی :لبخند:

http://enigmaprotector.com/en/downloads.html

نقاط ضعف این برنامه چیه؟

shahryari
چهارشنبه 07 تیر 1396, 17:10 عصر
مسئله همینجاست اگه کاربر لانچر و end task کنه می تونه به exe دسترسی داشته باشه ، اگه لطف کنید و در ادامه راهی معرفی کنید که بتونم exe را بدون کپی در هارد مستقیم در Ram اجرا کنم یا راه دیگه که بتونیم دسترسی به exe را به صفر برسونیم بسیار عالی می شه.

در هر حال باید یه فکری به فکر تسک منیجر بکنی چون مسیر فایل رو میشه پیداش کرد که از کجا run شده
به نظرم راهی که داری میری اشتباهه..
اگه منظورتو واضح بگی من و دوستان راههای بهتری رو پیشنهاد میکنیم
حالا باز اینجا (https://www.codeproject.com/Articles/13897/Load-an-EXE-File-and-Run-It-from-Memory)رو هم ببین