Форум программистов, компьютерный форум, киберфорум
.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/28: Рейтинг темы: голосов - 28, средняя оценка - 4.68
2 / 2 / 4
Регистрация: 27.06.2011
Сообщений: 113
1

Как использовать dll -injection ?

01.08.2011, 19:30. Показов 5812. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Подскажите пожалуйста как использовать dll-injection и каков принцип работы этого метода. Я знаю что dll-injection это способ добавления своих методов , путем добавления в область памяти выделяемой под программу своей dll со своими методами. И таким образом можно изменить функциональность программы.Просто мне таким образом необходимо получить некоторые данные от программы, которые изначально не было предусмотрено подавать на выход программы, но мне они необходимы. Т.е. мне нужно получить данные которые хранятся в некоторых структурах программы, но я даже не представляю что это за структуры и как к ним обратиться. Объясните пожалуйста как все это делать кто использовал этот метод . Мануалов то много но чето я туплю там
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2011, 19:30
Ответы с готовыми решениями:

Как подготовить программу для DLL Injection?
Есть программа, которая по нажатию на пробел рисует 10 красных квадратов на активном окне. При...

Dll Injection
Добрый вечер! Данный вопрос сто раз уже обсуждался, но не хочется поднимать темы ещё 2010-ых...

Как заставить программу использовать \system32\shell32.dll, а не \путь к проге\Interop.Shell32.dll
Это неудобно для Portable программы..

Как использовать dll библиотеку?
Добрый день! У меня есть приложение c# (winforms). Мне его нужно доработать, чтобы оно могло...

3
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
07.08.2011, 17:55 2
//kernel32 - моя библиотечка по импорту api функций, декларации можно посмотреть на www.pinvoke.net


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 public static void InjectDLL(string processName, String strDLLName)
        {
            int pid = Process.GetProcessesByName(processName)[0].Id; //Получаем ид. жертвы
            IntPtr hProcess = kernel32.OpenProcess(ProcessAccessFlags.All, false, pid); //получаем его хэндл
 
            uint bytesout;
            Int32 LenWrite = strDLLName.Length + 1;
            //Выделяем память в названия нашей dll
            IntPtr AllocMem = (IntPtr)kernel32.VirtualAllocEx(hProcess, (IntPtr)null, (uint)LenWrite, AllocationType.Commit, MemoryProtection.ExecuteReadWrite); 
            //Записываем название dll в память процесса
            kernel32.WriteProcessMemory(hProcess, AllocMem, strDLLName, (UIntPtr)LenWrite, out bytesout);
            //Получаем адрес процедуры загрузки dll
            IntPtr Injector = kernel32.GetProcAddress(kernel32.GetModuleHandle("kernel32.dll"), "LoadLibraryA");
            if (Injector == IntPtr.Zero) throw new Exception(" Injector Error!");
            //Создаем поток в удаленном процессе - запускаем LoadLIbrary которая грузит нашу DLL
            IntPtr hThread = kernel32.CreateRemoteThread(hProcess, IntPtr.Zero, 0, Injector, AllocMem, 0, out bytesout);
            if (hThread == IntPtr.Zero)
            {
                int error = kernel32.GetLastError();
                throw new System.ComponentModel.Win32Exception(error);
            }
            
            //Ждем пока поток отработает - т.е загрузит нашу dll...            
            uint Result = kernel32.WaitForSingleObject(hThread, 10 * 1000);
            if (Result == 0x00000080L || Result == 0x00000102L || Result == 0xFFFFFFFF)
            {
                if (hThread != null) kernel32.CloseHandle(hThread);
                throw new System.ComponentModel.Win32Exception(kernel32.GetLastError());
            }
 
            //Подчищаем за собой...
            kernel32.VirtualFreeEx(hProcess, AllocMem, 0,MemFreeType.Release);
            if (hThread != null) kernel32.CloseHandle(hThread);
        }
Добавлено через 10 минут
А вообще почитай Джефри Рихтора - у него там описано несколько способов иньекций...

Добавлено через 1 минуту
И выше описанный метод годится только для внедрения в unmanaged процессы
0
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
28.08.2011, 03:35 3
Жаль только что к .net это все не имеет отношения - инжектить можно только нативные дллки..
Даже если встать на уши и создавать среду CLR из самой загружаемой дллки и грузить туда сборку уже с управляемым кодом все равно ничего не получится т.к из DllMain нельзя вызвать управляемый код..
0
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
28.08.2011, 17:21 4
Ну можно упростить себе задачу, используя EasyHook -http://easyhook.codeplex.com/, в ней есть свой инжектор и нативная dll-ка которая делает всю грязную работу, мы же в результате работаем чисто на NET...
А вообще заинжектить dll не выйдет если прога защищается от записи в память на уровне ядра, тут еще нужно будет с обходом потрудиться...
т.к из DllMain нельзя вызвать управляемый код. - мм, деталей не знаю , но вроде как можно - как ты сказал создавая CLR или через COM - как делает EasyHook...
0
28.08.2011, 17:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2011, 17:21
Помогаю со студенческими работами здесь

Можно ли использовать DLL в ресурсах приложения
Доброго времени суток. Имеется программа, которая использует две dll библиотеки, в частности...

Можно ли использовать перекомпилированную dll не закрывая основное приложение
Добрый день! Подскажите, пожалуйста, возможно ли следующее, и, если возможно, натолкните на...

Как в случае с Dependency Injection внедрять отдельный экземпляр некоторого класса только лишь для одного другого класса
Здравствуйте, пытаюсь понять как же всё таки правильно использовать Dependency Injection в случае c...

Как при создании своей dll подключить туда сторонние dll
Здравствуйте, я работаю в связке C# - Oracle. Если коротко, то вопрос звучит так: "Как при создании...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru