Как сделать инжектор

Тема в разделе "Гайды для CrossFire", создана пользователем Stas_Men, 22 мар 2013.

  1. Оффлайн

    Stas_Men М. Лейтенант

    На форуме с:
    13 авг 2012
    Сообщения:
    228
    Симпатии:
    166
    Баллы:
    60
    Пол:
    Мужской
    skype:
    stas_men506
    Здравствуйте пользователиrango-hack.ru, сегодня я расскажу как создать Injector dll на C#.
    Поехали.

    1. Создаём проэкт, версия .net framework не важна, кидаем на форму:
    2 лабела, 1 текст бокс с ReadOnly = true, 2 баттона, 1 комбо бокс, 1 OpenFileDialog.

    2. На кнопку \"...\", для выбора dll, ставим код:
    Код:

    Код: Выделить всё
    openFileDialog1.Filter = \"DLL (*.dll)|*.dll\" +
    \"|All files (*.*)|*.*\";
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
    textBox1.Text = openFileDialog1.FileName; //Придаём значение ТекстБокс1 значение пути нашего пути к dll
    }



    3. Теперь заменяем все используемые Referenc-ы на эти:

    Код:

    Код: Выделить всё
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Threading;



    4. После

    Код:

    Код: Выделить всё
    public ИмяВашейФормы()
    {
    InitializeComponent();
    }



    Ставим код:
    Код:

    Код: Выделить всё
    [DllImport(\"kernel32\")]
    public static extern IntPtr CreateRemoteThread(
    IntPtr hProcess,
    IntPtr lpThreadAttributes,
    uint dwStackSize,
    UIntPtr lpStartAddress,
    IntPtr lpParameter,
    uint dwCreationFlags,
    out IntPtr lpThreadId
    );

    [DllImport(\"kernel32.dll\")]
    public static extern IntPtr OpenProcess(
    UInt32 dwDesiredAccess,
    Int32 bInheritHandle,
    Int32 dwProcessId
    );

    [DllImport(\"kernel32.dll\")]
    public static extern Int32 CloseHandle(
    IntPtr hObject
    );

    [DllImport(\"kernel32.dll\", SetLastError = true, ExactSpelling = true)]
    static extern bool VirtualFreeEx(
    IntPtr hProcess,
    IntPtr lpAddress,
    UIntPtr dwSize,
    uint dwFreeType
    );

    [DllImport(\"kernel32.dll\", CharSet = CharSet.Ansi, ExactSpelling = true)]
    public static extern UIntPtr GetProcAddress(
    IntPtr hModule,
    string procName
    );

    [DllImport(\"kernel32.dll\", SetLastError = true, ExactSpelling = true)]
    static extern IntPtr VirtualAllocEx(
    IntPtr hProcess,
    IntPtr lpAddress,
    uint dwSize,
    uint flAllocationType,
    uint flProtect
    );

    [DllImport(\"kernel32.dll\")]
    static extern bool WriteProcessMemory(
    IntPtr hProcess,
    IntPtr lpBaseAddress,
    string lpBuffer,
    UIntPtr nSize,
    out IntPtr lpNumberOfBytesWritten
    );

    [DllImport(\"kernel32.dll\", CharSet = CharSet.Auto)]
    public static extern IntPtr GetModuleHandle(
    string lpModuleName
    );

    [DllImport(\"kernel32\", SetLastError = true, ExactSpelling = true)]
    internal static extern Int32 WaitForSingleObject(
    IntPtr handle,
    Int32 milliseconds
    );

    public Int32 GetProcessId(String proc)
    {
    Process[] ProcList;
    ProcList = Process.GetProcessesByName(proc);
    return ProcList[0].Id;
    }



    Сразу после этого кода ставим этот:
    Код:

    Код: Выделить всё
    public void InjectDLL(IntPtr hProcess, String strDLLName)
    {
    IntPtr bytesout;
    Int32 LenWrite = strDLLName.Length + 1;
    IntPtr AllocMem = (IntPtr)VirtualAllocEx(hProcess, (IntPtr)null, (uint)LenWrite, 0x1000, 0x40);
    WriteProcessMemory(hProcess, AllocMem, strDLLName, (UIntPtr)LenWrite, out bytesout);
    UIntPtr Injector = (UIntPtr)GetProcAddress( GetModuleHandle(\"kernel32.dll\"), \"LoadLibraryA\");

    if (Injector == null)
    {
    MessageBox.Show(\" Injecto Error! \\n \");
    return;
    }
    IntPtr hThread = (IntPtr)CreateRemoteThread(hProcess, (IntPtr)null, 0, Injector, AllocMem, 0, out bytesout);
    if ( hThread == null )
    {
    MessageBox.Show(\"Thread injection Failed\");
    return;
    }
    int Result = WaitForSingleObject(hThread, 10 * 1000);
    if (Result == 0x00000080L || Result == 0x00000102L || Result == 0xFFFFFFFF)
    {
    MessageBox.Show(\"Thread 2 inject failed\");
    if (hThread != null)
    {
    CloseHandle(hThread);
    }
    return;
    }
    Thread.Sleep(1000);
    VirtualFreeEx(hProcess, AllocMem, (UIntPtr)0, 0x8000);
    if (hThread != null)
    {
    CloseHandle(hThread);
    }
    return;
    }



    4. Теперь на эвент \"Click\" comboBox1
    Поставим код:


    Код: Выделить всё
    comboBox1.Items.Clear();
    foreach (Process clsProcess in Process.GetProcesses())
    {
    comboBox1.Items.Add(clsProcess.ProcessName);
    }



    5. На буттон \"Inject\", ставим код:
    Код:

    Код: Выделить всё
    String strDLLName = textBox1.Text;
    String strProcessName = comboBox1.SelectedItem.ToString();

    Int32 ProcID = GetProcessId(strProcessName);
    if (ProcID >= 0)
    {
    IntPtr hProcess = (IntPtr)OpenProcess(0x1F0FFF, 1,ProcID);
    if (hProcess == null)
    {
    MessageBox.Show(\"FAIL\");
    return;
    }
    else
    {
    InjectDLL(hProcess, strDLLName);
    MessageBox.Show(\"TRUE\");
    }
    }


    Код для Автора:

    Код: Выделить всё
    MessageBox.Show(null, \"Автор Odysseus, Инжэктор только для x64 Ситем\", \"Автор\", MessageBoxButtons.OK, MessageBoxIcon.Information);

    Спасибо кто все это прочитал!
     
  2.  
  3. Оффлайн

    Аноним Анонимный 2 рядовой

    На форуме с:
    17 ноя 2013
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    СЛИТО ПОЛНОСТЬЮ
     

Поделиться этой страницей

Уважаемый пользователь!

Мы обнаружили, что вы блокируете показ рекламы на нашем сайте.

Просим внести его в список исключения или отключить AdBlock.

Наши материалы предоставляются БЕСПЛАТНО и единственным доходом является реклама.

Спасибо за понимание!