Хэлп, ми!
Вопрос к тем, кто когда-нибудь занимался внедрением 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 не запускается. Ошибок при этом ни каких не выводится. Что не так? Кстати, пробовал и привелегии процессу давать, бесполезно.
Ответить
|