Страница: 1 |
Вопрос: Dll Inject | Добавлено: 29.09.09 15:35 |
Автор вопроса: ![]() |
Хэлп, ми!
Вопрос к тем, кто когда-нибудь занимался внедрением dll в чужой процесс. Пытаюсь внедрить dll в приложение Project1 методом создания удаленного потока. Вот код внедрения dll на PB. #COMPILE DLL "potok.dll" #DIM ALL #INCLUDE "Win32API.inc" FUNCTION LIBMAIN (BYVAL hInstance AS LONG, BYVAL fwdReason AS LONG, BYVAL lpvReserved AS LONG) AS LONG SELECT CASE fwdReason CASE %DLL_PROCESS_ATTACH: hInstDLL = hInstance: LIBMAIN = 1 CASE %DLL_PROCESS_DETACH: LIBMAIN = 1 END SELECT END FUNCTION '======================================================= FUNCTION hPotok ALIAS "hPotok"() EXPORT AS STRING LOCAL si AS STARTUPINFO LOCAL pi AS PROCESS_INFORMATION LOCAL sa AS SECURITY_ATTRIBUTES LOCAL hProc AS LONG LOCAL hProcID AS LONG LOCAL lpAddres AS DWORD LOCAL sWrite AS LONG LOCAL nWritten AS LONG LOCAL hLoadLib AS LONG LOCAL hThread AS LONG LOCAL dllFile AS STRING LOCAL lenght AS LONG dllFile="drova.dll" lenght=LEN(dllFile) '-------Запускаем процесс------------------------ CreateProcess "Project1.exe","",sa,sa,0,%NORMAL_PRIORITY_CLASS,BYVAL 0,"",si,pi ------------------------------------------ '----Вытаскиваем из структуры уникальный эдентификатор процесса hProcID = pi.dwProcessId ---------------------------------------------- '----Открываем процесс с полными правами доступа hProc = OpenProcess (%PROCESS_ALL_ACCESS,%False,hProcID) '--------------------------------------------- '-----Выделение памяти в адр. пространстве чужого процесса lpAddres=VirtualAllocEx(hProc,BYVAL 0&,200, %MEM_COMMIT, %PAGE_READWRITE) ----------------------------------------------- '------Записываем в память уд-го процесса имя нашей ф-ции sWrite = WriteProcessMemory(hProc,lpAddres,BYVAL STRPTR(dllFile),lenght,nWritten) ----------------------------------------------- '-------Определяем адрес функции LoadLibrary hLoadLib = GetProcAddress(GetModuleHandle("Kernel32.dll"), "LoadLibraryA") ------------------------------------------------ 'Создает поток и внедряем "drova.dll" hThread=CreateRemoteThread (hProc,BYVAL 0&, 0, hLoadLib,lpAddres, 0, 0) В результате выполнения hThread возвращает не 0, но dll drova не запускается. Ошибок при этом ни каких не выводится. Что не так? Кстати, пробовал и привелегии процессу давать, бесполезно. |
Ответы | Всего ответов: 4 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 29.09.09 23:37 |
Посмотри под отладчиком, поставив бряк на точку входа. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #2 | Добавлено: 05.10.09 04:32 |
мсгбокс в точке входа сделай что-ли.. с чего ты взял что дрова.длл не грузятся, если hThread != 0 ? |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() Вопросов: 1 Ответов: 2 |
Профиль | Цитата | #3 | Добавлено: 05.10.09 12:13 |
Выяснил, благодаря отладке, что поток удаленный поток создается всегда, и иногда даже грузится dll... А иногда, потому что процесс который этот поток создает просто-напросто завершается и загрузка dll не всегда успевает произойти...
А вот как сделать так , чтобы процесс не завершался, пока не загрузится dll? Если кто-нибудь знает, подскажите, плиз. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() Вопросов: 1 Ответов: 2 |
Профиль | Цитата | #4 | Добавлено: 07.10.09 19:25 |
Разобрался, все работает... Всем спасибо! |
Страница: 1 |
|