Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2009, 22:24   #1
Landomeer
Подтвердите свой е-майл
 
Регистрация: 06.07.2009
Сообщений: 2
По умолчанию Dll инжектинг в Delphi

(может ни туда то извиняйте)
Нужна помощь в написании процедуры для инжекции Dll в инете нашел вот такой пример:

Код:
function InjectDll(Process:dword; DllPath:PChar):boolean;
var
 Memory:pointer;
 Code:dword;
 BytesWritten:dword;
 ThreadId:dword;
 hThread:dword;
 hKernel32:dword;
 Inject: packed record
          PushCommand:byte;
          PushArgument:DWORD;
          CallCommand:WORD;
          CallAddr:DWORD;
          PushExitThread:byte;
          ExitThreadArg:dword;
          CallExitThread:word;
          CallExitThreadAddr:DWord;
          AddrLoadLibrary:pointer;
          AddrExitThread:pointer;
          LibraryName:array[0..MAX_PATH] of char;
         end;
begin
 Result:=False;
 Memory:=VirtualAllocEx(Process, nil, sizeof(Inject), MEM_COMMIT,
                        PAGE_EXECUTE_READWRITE);
 if Memory = nil
  then
   Exit;
 Code:=dword(Memory);
 Inject.PushCommand        := $68;
 inject.PushArgument       := code + $1E;
 inject.CallCommand        := $15FF;
 inject.CallAddr           := code + $16;
 inject.PushExitThread     := $68;
 inject.ExitThreadArg      := 0;
 inject.CallExitThread     := $15FF;
 inject.CallExitThreadAddr := code + $1A;
 hKernel32:=GetModuleHandle('kernel32.dll');
 inject.AddrLoadLibrary:=GetProcAddress(hKernel32, 'LoadLibraryA');
 inject.AddrExitThread:=GetProcAddress(hKernel32, 'ExitThread');
 lstrcpy(@inject.LibraryName, DllPath);
 WriteProcessMemory(Process, Memory, @inject, sizeof(inject), BytesWritten);
 hThread:=CreateRemoteThread(Process, nil, 0, Memory, nil, 0, ThreadId);
 if hThread = 0
  then
   Exit;
 CloseHandle(hThread);
 Result:=True;
end;
Но она толком работает только когда запускаю процесс к которому нужно подсоединить дополнительную dll, с уже запущенными процессами она уменя очень плохо работает, может кто то знает как ее переделать или у кого то есть процедура для инжекции dll в запущенные процессы.

ps. Нужно для ловли багов. (за доморощеных которые будут использовать функцию для написания вредоносных программ ответственности не несу)
Landomeer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение из Delphi к DLL написанной на C++ smirnoff843 Общие вопросы Delphi 6 21.03.2017 11:13
DLL в DELPHI Шульц Общие вопросы Delphi 6 11.01.2009 08:28
Создать DLL на C# и вызвать её в Delphi (Delphi) RIO Общие вопросы Delphi 2 25.03.2008 15:33
Создать DLL на C# и вызвать её в Delphi RIO Общие вопросы .NET 2 22.03.2008 22:17