Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2012, 16:38   #1
Dzib
Пользователь
 
Регистрация: 24.10.2008
Сообщений: 21
По умолчанию Зашить стороннее приложение в ресурсы и запускать только в определенном случае

Привет всем. Незнаю как это правильно называется, но я хочу сделать какбы оболочку для исполняемого .exe файла, не имея при том его исходников, например для калькулятора виндоуса calc.exe. Мне интересно можно ли написать код(оболочку) на С# который поглотит в себя calc.exe, что б ограничить возможность запуска калькулятора и запустить в таком случае его можно будет только с помощю другого приложения CalcLauncher. Я знаю что процессы можно запускать с входными параметрами
Код:
System.Diagnostics.Process.Start("calc.exe", "параметр");
Это можно использовать и только конкретный параметр запустит калькулятор.
Но я не знаю как сделать так что б исполняемый .exe файл поглотить другим кодом или зашифровать его в такой формат что б можно было прочитать только с помощю другой написаной мной программы лаунчера. Высказывайте свои мысли по этому поводу, каждый совет очень важен, так как я не знаю как такие вещи называются, незнаю что искать. Спасибо всем за будущие ответы.
Dzib вне форума Ответить с цитированием
Старый 03.09.2012, 23:54   #2
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Если верно понял, что нужно, то в ресурсы добавляем необходимый исполняемый файл, а далее:
Код:
using System.Resources;
using System.IO;
using System.Diagnostics;

// ...

        private void button1_Click_1(object sender, EventArgs e)
        {
            byte[] buffer = Properties.Resources.calc;
            File.WriteAllBytes(@"D:\\test_calc.exe", buffer);
            Process.Start(@"D:\\test_calc.exe");
        }
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 04.09.2012, 00:36   #3
Dzib
Пользователь
 
Регистрация: 24.10.2008
Сообщений: 21
По умолчанию

Я написал код программы которая запускает файл из ресурсов.
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Diagnostics;

namespace ConsoleApplication8
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] b = Resource.SuperCalc;
            FileStream fs = new FileStream("SuperCalc.exe", FileMode.Create);
            fs.Write(b, 0, b.Length);
            fs.Close();
            Process.Start("SuperCalc.exe");
            Console.ReadLine();

            
        }
    }
}
Но даний вариант не подходит, потому что создается SuperCalc.exe в таком виде что его можно скопировать кудато и потом запустить без моей программы, а мне нужно что б этот файл был бесполезный если его запускать без моего приложения. Но вариант, что б файл создавался в другой папке тоже не подойдет, так как он должен быть в той же папке что и моя программа. Подскажите мне как это реализировать, может его можно совсем не создавать, а сразу запускать както?

Последний раз редактировалось Dzib; 04.09.2012 в 00:38.
Dzib вне форума Ответить с цитированием
Старый 04.09.2012, 10:45   #4
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

приложение дотнетное или нет?
Код:
            Assembly exeAssembly = Assembly.Load(b);

            exeAssembly.EntryPoint.Invoke(null, null);
для не дотнетного http://forums.mydigitallife.info/thr...xe-from-memory
Reskov вне форума Ответить с цитированием
Старый 04.09.2012, 12:57   #5
Dzib
Пользователь
 
Регистрация: 24.10.2008
Сообщений: 21
По умолчанию

Нет приложения не дотнетное, спасибо за ссылку).

Последний раз редактировалось Dzib; 05.09.2012 в 01:14.
Dzib вне форума Ответить с цитированием
Старый 05.09.2012, 01:16   #6
Dzib
Пользователь
 
Регистрация: 24.10.2008
Сообщений: 21
По умолчанию

Пробовал запускать их метод Run, он мне приложения не запустил, может он и чтото и сделал(ошибок небыло) но приложения которое я хотел запустить с помощю него не запустилось.
Dzib вне форума Ответить с цитированием
Старый 05.09.2012, 10:36   #7
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

у меня все работает... я проверил как там описано
Цитата:
%WINDIR%\Microsoft.NET\Framework\v2 .0.50727\vbc.exe. It seems to be the only process that works with this code or "RunPE" variants. It must be a 32 bit exe you are injecting, and you must compile the .NET app that uses this as x86, not x64 or AnyCPU.
Поставьте Framework 2.0 x86 unsafe и путь в функцию run "%WINDIR%\Microsoft.NET\Framework\v 2.0.50727\vbc.exe"

Да и ваше приложение должно быть 32 бит
Reskov вне форума Ответить с цитированием
Старый 05.09.2012, 10:53   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Проще через темр папку.
Вариант из ссылки с такой кучей ограничений, что ну его ...
eval вне форума Ответить с цитированием
Старый 05.09.2012, 15:15   #9
Dzib
Пользователь
 
Регистрация: 24.10.2008
Сообщений: 21
По умолчанию

Цитата:
Проще через темр папку.
Вариант из ссылки с такой кучей ограничений, что ну его ...
Нет не проще, это исполняемый файл клиента игры, он берёт ресурсы из файлов клиента.
Dzib вне форума Ответить с цитированием
Старый 05.09.2012, 15:50   #10
Dzib
Пользователь
 
Регистрация: 24.10.2008
Сообщений: 21
По умолчанию

Цитата:
Поставьте Framework 2.0 x86 unsafe и путь в функцию run "%WINDIR%\Microsoft.NET\Framewo rk\v 2.0.50727\vbc.exe"
Код:
CMemoryExecute.Run(b, @"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\vbc.exe", "");
Вот так написал но всеровно не запускает.
Я залил свой проэкт http://rghost.ru/40201623
Посмотрите пожалуйста.

Последний раз редактировалось Dzib; 05.09.2012 в 17:17.
Dzib вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как привильно запускать консольное приложение используя CreateProcess? Человек_Борща Общие вопросы Delphi 2 25.02.2011 16:53
Расшареные ресурсы и не только doniyor Работа с сетью в Delphi 5 17.03.2010 23:32
Ресурсы. Как запихать .bmp в приложение .exe? КСВ Мультимедиа в Delphi 6 24.10.2009 06:25
Скажите функцию которая будет запускать приложение при каждой загрузке винды pentiumForever Общие вопросы Delphi 9 08.09.2007 01:54
Автоматически запускать приложение лисенок БД в Delphi 3 17.04.2007 23:39