Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Power Basic

Страница: 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
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 29.09.09 23:37
Посмотри под отладчиком, поставив бряк на точку входа.

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик 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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам