как запустить ексешник из моей проги и как его туда засунуть. Ресурсы
1. Как засунуть прогу в другую прогу(файликом)
2. Как её от туда запустить
3. Как её в моей проге редактировать.
C#
1. Как засунуть прогу в другую прогу(файликом)
2. Как её от туда запустить
3. Как её в моей проге редактировать.
C#
1) Зачем?
2) Вопрос неоднократно освещался.
3) А еще можно в рантайме сгенерировать код - это несложно.
3) А еще можно в рантайме сгенерировать код - это несложно.
хм. А где можно поподробнее, я знаю только вариант - таскать с собой компилятор, а pe создавать программно - это жесть...
ну это, конечно, не самый лучший вариант и он мало чего общего имеет с си#, но все же: можно позаимствовать методику поведения вирусов. дописать ексзешник в конец файла и изменить точку входа в PE-хидере приложения так, чтобы запускался первым екзешник, а потом возвращал управление приложению.
Вот собсна тут много интересного на эту тему:
http://www.viruslist.com/ru/viruses/encyclopedia?chapter=156769328
з.ы. кстати почему тема не в C#, а в дотнете?
В .NET компиляторы всегда под рукой: для C# и для VB.NET ну и особые эстеты могут заюзать CIL напрямую; использовать их можно, но для этого нужно быть быть в зоне ФулТраст (кажется так) - т.е. приложение нужно запускать с локальной машины.
Есть два варианта, оба неплохо рассмотрены у Троелсена (пример там примитивный, но для начала сгодится).
1) Пространство имен System.Reflection.Emit. Классы позволяют сгенирировать динамические сборки (да и статические тоже) используя чистый CIL, классы ориентированы на компиляторы.
2) Пространство имен System.CodeDom. Классы позволяют строить программы из готовых блоков - наиболее общих конструкций языков, типа if, while, формировать методы и прочее.
Особенно эффективно использовать кодогенерацию совместно с отражением и атрибутами, подобным образом можно построить достаточно сложную логику.
Не так. Мне надо чтобы мою прогу можно было запустить только из другой моей проги. Дык я придумал спрятать её в свою и зашифровать. А как дешифровать и запустить не знаю. Можно собрать прогу в лвый ексе из исходного кода, но это мне не подходит.
А можно и просто динамически собрать прогу из другой, о чём и сказал hardcase. Причём можно сначала сгенерировать для неё исходный код, потом собрать, а если это особо секретно, то первый экзешник обработать дотфускатором.
Есть более простой способ в .NET.
У тебя есть некоторый набор классов, реализующий твой функционал. В статическом конструкторе этих классов проверяем публичный токен (PublicKeyToken) сборки, которая является исполнимым файлом твоего приложения. Если токен отличается от эталона - кричим об ошибке и резко падаем.
Для реализации этого подхода конечно придется подписывать сборки (это уже шифрование!). И никаких костылей с распаковкой бинарника и прочей "неуправляемой" чепухи.
У тебя есть некоторый набор классов, реализующий твой функционал. В статическом конструкторе этих классов проверяем публичный токен (PublicKeyToken) сборки, которая является исполнимым файлом твоего приложения. Если токен отличается от эталона - кричим об ошибке и резко падаем.
Для реализации этого подхода конечно придется подписывать сборки (это уже шифрование!). И никаких костылей с распаковкой бинарника и прочей "неуправляемой" чепухи.
То есть, вместо приложения сделать библиотеку?
Нуда. Но такую библиотеку, которая будет работать только с подписанными нужным ключем исполняемыми сборками (.exe).
А для пущей вящности можно эту библиотеку через обфускатор пропустить.
Вирус на .NET это что то новенькое! :)
Типа установите пожалуйсто ДОТНЕТ, что бы вирус мог работать=))))