Как я могу запустить исполняемый файл из оперативной памяти, используя C ++? - PullRequest
7 голосов
/ 27 августа 2009

Как запустить исполняемый файл из ОЗУ с использованием C ++?

Исполняемый файл находится в оперативной памяти, и я знаю адрес, как мне вызвать программу из моего?

Ответы [ 5 ]

10 голосов
/ 27 августа 2009

Подобные вещи обычно происходят из темных уголков мира. ; -)

В сочетании с такими инструментами, как metasploit, было бы замечательно создать процесс только из памяти, и поэтому пара парней попыталась переопределить все, что происходит в CreateProcess (). Через некоторое время они просто обнаружили, что это слишком сложно (см. этот PDF сайт 12f), чтобы заставить это работать, и они попытались найти другое решение, и вот оно: Они вызывают обычный CreateProcess () с обычной программой (например, notepad.exe), но запускают его с ThreadSuspended. Затем они внедрили новый поток в этот процесс, который будет заполнен из памяти. После этого они приказали запустить этот поток и заполнили новый процесс из памяти.

Так что это просто общая картина, и это целый беспорядок (и, как правило, неправильный способ) делать такие вещи. Если вы действительно заинтересованы в этой части, то у вас есть идея для поиска.

И, кстати, не думайте, что вы можете сделать это в C #. Обычно это делается на C / C ++ или даже на Ассемблере ...

6 голосов
/ 27 августа 2009

Вы имеете в виду, что вы загрузили содержимое EXE-файла в оперативную память и теперь хотите запустить этот исполняемый файл?

Поскольку вы говорите об EXE, я предполагаю, что вы работаете под Windows. Насколько мне известно, Windows не может этого сделать - ваш единственный вариант - сохранить исполняемый файл обратно в файл и запустить его (например, с помощью CreateProcess).

Редактировать Вот как вы могли бы запустить процесс.

В C ++:

STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));

if(!CreateProcess("myfilename.exe", NULL, NULL, NULL, FALSE, 0, NULL, 
    NULL, &si, &pi ))
{
    // An error occurred
}

В C #:

using System;
using System.Diagnostics;

Process.Start("myfilename.exe");
1 голос
/ 03 февраля 2013

Мэйби, это может помочь тебе: http://www.codeproject.com/Articles/13897/Load-an-EXE-File-and-Run-It-from-Memory

PS: написание вредоносного ПО не является незаконным (в большинстве стран;)) с использованием is!

1 голос
/ 27 августа 2009

Точно так же, как вы запускаете его с диска. Ваша программа не знает, загружена ли она (то есть в ОЗУ) или на диск. Это абстрагируется операционной системой.

1 голос
/ 27 августа 2009

Вы имеете в виду связь с другим приложением, которое работает одновременно с вашим? Это зависит от того, какую операционную систему вы используете. В любом случае, в Википедии есть статья Межпроцессное взаимодействие , в которой показаны некоторые основные приемы.

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