Инжектор Dll(C# + C++)

  • Для просмотра чата и остального функционала вам нужно авторизоваться или пройти регистрацию!

Крайслер-2-

Universal Engine
Original poster
Июл 28, 2012
6
5
19
Знаю что тем по Инжекторы куча, но они в своем роде однотипные. Предлагаю вариант совместного использования C#(оболочка) и С++(модуль dll)....

C#(оболочка программы)

Проект WInForm:

Добавляем:

Код:
using System.Runtime.InteropServices;
using System.Management;
using System.IO;
Так же нужно включить ссылку System.Management: ПКМ по проекту - Добавить ссылку - NET и ищем в списке System.Management - OK.

Понадобится:
- listView
- contextMenuStrip
- openFileDialog

Размещаем на форме listView и настраиваем:
- FullRowSelect = true (выделятся будет вся строка, а не одна ячейка)
- GridLines = true (разделение линиями)
- View = Details
- заходим в коллекцию Сolumns и добавляем два зоголовка: "Имя процесса" и "pID".

Далее переходим в Свойства -> События и подписываемя на событие MouseUp(двойной клик на строчке)
В обработчике MouseUp привязываем наш contextMenuStrip:

Код:
ListView listView = sender as ListView;
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
ListViewItem item = listView.GetItemAt(e.X, e.Y);
if (item != null)
{
item.Selected = true;
contextMenuStrip1.Show(listView, e.Location);
}
}
Теперь при клике ПКМ, в поле listView, выскочит контекстное меню.

Заполним listView списком процессов. Для этого напишем такую "функцию":

Код:
//Получаем имена процессов и их pID
void refResh()
{
listView1.Items.Clear();
ManagementObjectSearcher FindprocessEum = new ManagementObjectSearcher("SELECT * FROM Win32_Process");
ListViewItem add_item;
foreach (ManagementObject process in FindprocessEum.Get())
{
add_item = new ListViewItem(process["Name"].ToString());
add_item.SubItems.AddRange(new string[] { process["ProcessId"].ToString() });
listView1.Items.Add(add_item);
}
}
Отработаем ее при запуске программы.Для этого допишем под иницализацией refResh();

Код:
.......................
public Form1()
{
InitializeComponent();
refResh();

}
.....................

Теперь "подключим" наш модуль.
Указываем импорт:

Код:
[DllImport("InjectModule.dll", CharSet = CharSet.Auto)]
public static extern void StartInject([In][MarshalAs(UnmanagedType.LPStr)]string PROC_NAME, [In][MarshalAs(UnmanagedType.LPStr)]string PatchDll);

Добавляем к контекстному меню пункты: "Обновить", "DllInject","Выход".

Двойной клик по "Обновить", пишем:
Код:
refResh();
Теперь по нажатию на этот пункт список процессов обновится.


Двойной клик по "Выход", пишем:
Код:
Application.Exit();


Двойной клик по "DllInject", пишем:
Код:
if (File.Exists("InjectModule.dll"))//проверяем есть ли файл
{
openFileDialog1.Title = "Выберете DLL";
openFileDialog1.FileName = "";
openFileDialog1.Filter = "DLL (*.dll)|*.dll";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
StartInject(listView1.SelectedItems[0].SubItems[0].Text, openFileDialog1.FileName);
}
}
else
{
MessageBox.Show("InjectModule.dll не найден!", "Error");
}



Исходный код основного класса модуля
Исходный код проекта
ВТ сделать не могу, так как ГГГ-модем "посылает"....
 
Погоди как ты создал тему если у тебя бан?
 
Сверху Снизу