Запуск исполняемого файла из памяти - PullRequest
5 голосов
/ 19 июля 2010

Я пытаюсь запустить исполняемый файл непосредственно из представления этого исполняемого файла в виде байта [] как ресурса в C #.

Так что в основном я хочу запустить байт [] PE напрямую, не касаясьharddisk.

Код, который я использую для этого, работал, но больше не работает.

Код создает процесс с замороженным основным потоком, изменяет данные всего процесса и, наконец,возобновляет его, чтобы он запускал байт [] PE.Но кажется, что процесс умирает, если поток возобновляется, я действительно не знаю, в чем дело.

Итак, вот код в pastebin, потому что он слишком длинный для этого, я думаю ...

http://pastebin.com/18hfFvHm

РЕДАКТИРОВАТЬ:

Я хочу запустить неуправляемый код! Любой файл PE ...

Ответы [ 8 ]

1 голос
/ 27 июля 2010

Вот код для выполнения собственного кода (внутри байтового массива).Обратите внимание, что это не совсем то, что вы просите (это не байты PE-файла, а собственные байты процедуры, т.е. на языке ассемблера)

1 голос
/ 27 июля 2010

Этот код может помочь: Динамический процесс создания портативного исполняемого файла Vrillon / Venus: http://forum.gamedeception.net/threads/16557-Process-Forking-Running-Process-From-Memory

0 голосов
/ 08 ноября 2012

Репост Загрузите файл EXE и запустите его из памяти

Не проверено, но похоже, что это единственный способ сделать это (2-й ответ)

0 голосов
/ 27 июля 2010

Теоретически, если вы работаете с полным доверием, ничто не мешает вам выполнить CreateProcess на rundll32.exe, отменить отображение rundll32.exe и выполнить первоначальную загрузку EXE самостоятельно.

Способ, которым я быпойти на это - добавить поток в целевой процесс, который выполняет работу неуправляемым образом.Да, это означает кучу перемещаемой сборки.

Общая идея состоит в том, чтобы вызвать LdrUnloadModule, чтобы избавиться от rundll32.exe, вызвать LdrLoadModule, чтобы загрузить EXE, исправить цепочку загрузки, чтобы указать, что она была загружена первой, а затем перезапуститьглавная нить.

Удачи тебе.

0 голосов
/ 27 июля 2010

Я считаю, что ваша проблема в том, что вы просите дыру в безопасности.

Для запуска любого PE вы спрашиваете: «Пусть мое защищенное / управляемое приложение .NET запускает небезопасное / неуправляемое приложение - способом, обходящим обычную безопасность».

Допустим, я запускаю ваше приложение (которое, я полагаю, защищено). Я не дал ему разрешение на запись в чувствительную папку; он не может переполнить буферы; он не может коснуться моего кода режима win32. Затем вы создаете побайтовое вредоносное приложение в байтах [] и запускаете его. Куда Windows входит, чтобы спросить меня, хочу ли я позволить этому случиться? И что говорит это предупреждение? «Это массив байтов из доверенного источника?»

0 голосов
/ 27 июля 2010

Я не уверен, поможет ли это, но здесь - это место, где я отвечаю на запуск прямых кодов сборки x86 / x64 из программы на C #.

0 голосов
/ 26 июля 2010

Я не пробовал это, так что это чисто умозрительно, но я думаю, что вы хотите загрузить в домен приложений:

byte[] myAssm = ...
AppDomain.CurrentDomain.Load(myAssm);
AppDomain.CurrentDomain.ExecuteAssemblyByName(nameOfMyAssm);
0 голосов
/ 20 июля 2010

Я нашел этот образец, надеюсь, он будет вам полезен. http://www.cyberhackers.mybbnew.com/showthread.php?tid=178

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...