Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.12.2009, 10:54
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию DLL Injection

Собвственно это и интересует

Нагугли тысячи примеров ... но они ни 1 не работают...

Проверялось просто )
вписывалась ДЛЛ в AppInit_DLLs в реестре, работает, через нагугленные примеры - НЕТ

П.с нужен только метод программного инжекта в определенный процесс..
Ответить с цитированием
  #2  
Старый 06.12.2009, 12:38
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

http://www.wasm.ru/article.php?article=apihook_1
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 07.12.2009, 06:35
Zorkov Igor Zorkov Igor вне форума
Новичок
 
Регистрация: 28.07.2009
Сообщения: 85
Репутация: 50
Сообщение

Код:
function InjectLib(process_id: DWORD; lib_name: PChar): Integer;
var
  pfnRemote, premote_mem: Pointer;
  hProcess, hThread: THandle;
  mem_size: Integer;
  ret: LongBool;
  BytesWritten: DWORD;
  ThreadId: DWORD;
begin
  pfnRemote:= GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryA');
  if (pfnRemote = nil) then
  begin
    Result:= -1;
    Exit;
  end;
  hProcess:= OpenProcess(MAXIMUM_ALLOWED, False, process_id);
  if hProcess = 0 then
  begin
    Result:= -1;
    Exit;
  end;
  mem_size:= strlen(lib_name) + 1;
  premote_mem:= VirtualAllocEx(hProcess, nil, mem_size, MEM_COMMIT, PAGE_READWRITE);
  if (premote_mem = nil) then
  begin
    CloseHandle(hProcess);
    Result:= -1;
    Exit;
  end;
  BytesWritten:= 0;
  ret:= WriteProcessMemory(hProcess, premote_mem, lib_name, mem_size, BytesWritten);
  if (ret = false) then
  begin
    VirtualFreeEx(hProcess, premote_mem, 0, MEM_RELEASE);
    CloseHandle(hProcess);
    Result:= -1;
    Exit;
  end;
  ThreadId:= 0;
  hThread:= CreateRemoteThread(hProcess, nil, 0, pfnRemote, premote_mem, 0, ThreadId);
  if (hThread = 0) then
  begin
    VirtualFreeEx(hProcess, premote_mem, 0, MEM_RELEASE);
    CloseHandle(hProcess);
    Result:= -1;
    Exit;
  end;
  WaitForSingleObject(hThread, INFINITE);
  VirtualFreeEx(hProcess, premote_mem, 0, MEM_RELEASE);
  CloseHandle(hProcess);
  CloseHandle(hThread);
  Result:= 0;
end;

В Windows XP и ниже работает и для пользовательских процессов и для системных, в Windows Vista и выше мелкософт ограничил CreateRemoteThread только для пользовательских процессов
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:01.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter