Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Как внедрить длл в чужой процесс


Автор: max-@ 29.1.2005, 15:26
Как внедрить длл в чужой процесс, и отлавливать все его сообщения......

если возможно, то небольшой пример или ссылка рус. ресурс.........или объясните на пальцах

Автор: sergejzr 29.1.2005, 15:28
Сперва скажи для чего тебе это надо.

Цитата
2) Запрещается размещать материал, который является ложным, дискредитирующим, оскорбительным, вульгарным, ненавистным, непристойным, угрожающим, или нарушающем какой-либо закон. Также запрещается размещение любой рекламной информации, несогласованной с администрацией форума.

На всякий пожарный...

Автор: max-@ 29.1.2005, 19:08
Это будет точно не вирус...............
Хочу вставить свой листбокс в чужое окно и управлять им

Автор: LuckLess 2.2.2005, 13:05
max-@
VirtualallocEx();
WriteProcessMemmory();
CreateRemoteThread(...Loadlibrary,"mydll.dll",...);
Добавлено @ 13:06
где вместо "mydll.dll" --Б указатель на строку содержащую "mydll.dll" в чужом процессе.

Автор: azesmcar 2.2.2005, 14:21
Цитата
Это будет точно не вирус...............
Хочу вставить свой листбокс в чужое окно и управлять им


Ну раз все так прекрасно... ;)

Код

void InjectDLL( const char *pDLL, DWORD dwProcessID )
{
   LPVOID fpLoadLibrary = GetProcAddress( GetModuleHandle( "kernel32.dll" ), "LoadLibraryA" );
   if ( !fpLoadLibrary )
   {
       return;
   }
   DWORD dwThreadID = 0;
   DWORD dwSize = strlen( pDLL );
   unsigned long nWritten = 0;
   HANDLE hProcess = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, false, dwProcessID );
   if ( !hProcess )
   {
       return;
   }
   LPVOID pRemoteAddress = VirtualAllocEx( hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE );
   WriteProcessMemory( hProcess, pRemoteAddress, (LPVOID)pDLL, dwSize, &nWritten );
   CreateRemoteThread( hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)fpLoadLibrary, pRemoteAddress, NULL, &dwThreadID );
   VirtualFreeEx( hProcess, pRemoteAddress, dwSize, MEM_DECOMMIT );
}


Можно Рихтера почитать..Джефри Рихтер, Виндоуз для профессионалов...
Там есть несколько методов, это один из них, с помощью удаленных потоков...
Добавлено @ 14:23
А вот для перехвата сообщений придеться или поставить хук на сообщения сего процесса или отловить его GetMessage и PeekMessage API функции, это уже посложнее...но если внедришь DLL-ку проблем не будет..посмотри в интернете detours.lib

Тут у кого то он был по моему, кто о даже вопрос по этому поводу задавал, если не найдешь читай Рихтера, там есть пример...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)