Estou implementando um algoritmo em C# que deve carregar um executável em um vetor de bytes, e depois executá-lo com a instrução EntryPoint.Invoke, mas todas as tentativas até então deram erro.
IMPORTANTE: Eu sei outras formas de carregar um executável e depois executá-lo, mas eu preciso de um método que carregue diretamente na memória, além disso, depois eu aprimorarei o algoritmo e também vou criar um método para encriptar e decriptar o executável, por isso mesmo preciso que seja feito de um jeito que carregue diretamente na memória, sem passar pelo HD, como um crypter. O código que eu implementei até o momento é esse:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Reflection; //Para poder usar tipo Assembly
namespace ConsoleApp1
{
class Program
{
[STAThread] //Não sei porque usar, mas me foi recomendado
static void Main(string[] args)
{
Console.WriteLine(“Escolha um arquivo: “);
string caminho = Console.ReadLine(); //Lê o nome e diretório do arquivo
caminho = caminho.Replace(””",""); //Apaga as aspas caso tiver
byte[] arquivo = File.ReadAllBytes(caminho); //Cria um vetor de bytes e carrega o executável
Assembly executável = Assembly.Load(arquivo); //Carrega em um tipo Assembly
object[] parâmetros = new object[1]; //Para invocar o EntryPoint.Invoke
executável.EntryPoint.Invoke(executável.EntryPoint,parâmetros); //Invocando o EntryPoint.Invoke
Console.WriteLine("");
Console.Read();
}
}
}
PS: Fiz isso no Console Application, e em segundo lugar, por favor, me deem dicas de como formatar o código da minha pergunta aqui na página, vi que ficou desajeitado, mas é a primeira vez que eu venho a esse site.