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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2010, 17:06   #11
Dima DDM
Форумчанин
 
Аватар для Dima DDM
 
Регистрация: 09.11.2010
Сообщений: 134
По умолчанию

Вот только кто знает как можно найти Pid по заголовку окна??? А то в этом примере НЕ получается(
http://ddmsite.ucoz.ru Мой сайт.
Бесплатный Блокировщик рекламы
http://download.adguard.ru/d/1656/adguardInstaller.exe
Dima DDM вне форума Ответить с цитированием
Старый 20.12.2010, 17:06   #12
Dima DDM
Форумчанин
 
Аватар для Dima DDM
 
Регистрация: 09.11.2010
Сообщений: 134
По умолчанию

Вот только кто знает как можно найти Pid по заголовку окна??? А то в этом примере НЕ получается(
http://ddmsite.ucoz.ru Мой сайт.
Бесплатный Блокировщик рекламы
http://download.adguard.ru/d/1656/adguardInstaller.exe
Dima DDM вне форума Ответить с цитированием
Старый 22.12.2010, 17:58   #13
Dima DDM
Форумчанин
 
Аватар для Dima DDM
 
Регистрация: 09.11.2010
Сообщений: 134
По умолчанию

У меня все хорошо DLL успешно внедряется но есть проблема форма зависает при нажатии кнопки((( .... и еще иногда само приложение зависает ЧТО ДЕЛАТЬ???
http://ddmsite.ucoz.ru Мой сайт.
Бесплатный Блокировщик рекламы
http://download.adguard.ru/d/1656/adguardInstaller.exe
Dima DDM вне форума Ответить с цитированием
Старый 23.12.2010, 08:47   #14
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Сама недавно этим занимался...
Исправил: немного оптимизировал код.

Итак.
- По тыку на кнопке:
Код:
procedure TDLLInjectForm.Button1Click(Sender: TObject);
begin
  EnumWindows(@EnumWindowsProc, 0);
end;
-листинг каллбек-функции + поиск PID + внедрение:
Код:
function EnumWindowsProc(Window: hWnd; lParam: LongInt): Bool; stdcall;
var
  ProcessID : Cardinal;
  ProcessHandle : Cardinal;
  ModuleHandles : array[0..256] of DWORD;
  nBytes : Cardinal;
  ModuleName :array[0..259] of Char;
  ClassName: string;
begin
  Result := Window<>0;if not(Result) then exit;
  GetWindowThreadProcessId(Window, @ProcessID);
  ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID);
  EnumProcessModules(ProcessHandle, @ModuleHandles, 256 * 4, nBytes);
  GetModuleFileNameEx(ProcessHandle, ModuleHandles[0], ModuleName, 256);
  if string(ModuleName)=DestinationExeName then begin
    if InjectDll(ProcessHandle,PChar(ExtractFilePath(ParamStr(0))+LibraryName)) then begin
      DLLInjectForm.Memo1.Lines.Add('Библиотека успешно внедрена в процесс с PID='+IntToStr(ProcessId));
    end;
  end;
  CloseHandle(ProcessHandle);
end;

Функция InjectDll присутствует в модуле в аттаче. Из аттача обязательно добавить оба модуля в проект (advApiHook.pas и NativeAPI.pas)

Думаю, что помог... Если очень надо - могу весь проект показать...

ЗЗЫ: любой вменяемый антивирус назовет программу с этим кодом словом Invader и определит как вирус.
Вложения
Тип файла: rar NativeAPI.rar (16.5 Кб, 36 просмотров)
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Johnson; 23.12.2010 в 09:06.
Johnson вне форума Ответить с цитированием
Старый 24.12.2010, 20:39   #15
Dima DDM
Форумчанин
 
Аватар для Dima DDM
 
Регистрация: 09.11.2010
Сообщений: 134
По умолчанию

Блин( мне нужна нормальная программа чтоб антивирь на нее не ругался!!)))
http://ddmsite.ucoz.ru Мой сайт.
Бесплатный Блокировщик рекламы
http://download.adguard.ru/d/1656/adguardInstaller.exe
Dima DDM вне форума Ответить с цитированием
Старый 24.12.2010, 22:05   #16
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

на внедрение библиотеки в чужой процесс антивир в любом случае будет ругаться.
выход - ищите инфу по обходу (на уровне ring0 )
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 24.12.2010, 22:42   #17
Dima DDM
Форумчанин
 
Аватар для Dima DDM
 
Регистрация: 09.11.2010
Сообщений: 134
По умолчанию

помогите оформить мне вот это в потоке

[CODE]WinExec('MY.exe',SW_SHOW);
fmServerProperties.Close;
hwin:=FindWindow(nil, 'заголовок моего окна');
GetWindowThreadProcessid(hwin,@PID) ;
s:=PID;
LoadLibrary_Ex(s,('Plugin.dll')) ;


Вот сама функция LoadLibrary_EX

Код:
 {внедрение DLL проверка}
 function LoadLibrary_Ex(ProcessID:DWORD;LibName:PChar):boolean;
var
  pLL,pDLLPath:Pointer;
  hProcess,hThr:THandle;
  LibPathLen,_WR,ThrID:DWORD;
begin
  Result:=False;
  LibPathLen:=Length(string(LibName));
  hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,ProcessID);
  if hProcess=0 then exit;
  pDLLPath:=VirtualAllocEx(hProcess,0,LibPathLen+1,MEM_COMMIT,PAGE_READWRITE);
  if DWORD(pDLLPath)=0 then exit;
  pLL:=GetProcAddress(GetModuleHandle(kernel32),'LoadLibraryA');
  WriteProcessMemory(hProcess,pDLLPath,LibName,LibPathLen+1,_WR);
  hThr:=CreateRemoteThread(hProcess,0,0,pLL,pDLLPath,0,ThrID);
  if hThr=0 then exit;
  Result:=CloseHandle(hProcess);
end;
http://ddmsite.ucoz.ru Мой сайт.
Бесплатный Блокировщик рекламы
http://download.adguard.ru/d/1656/adguardInstaller.exe
Dima DDM вне форума Ответить с цитированием
Старый 25.12.2010, 08:04   #18
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

О, Боже... Зачем такие трудности, чтоб внедрить библиотеку в своё приложение??
И, если даже приложение не своё, то зачем это выводить в поток?
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 28.12.2010, 20:07   #19
Dima DDM
Форумчанин
 
Аватар для Dima DDM
 
Регистрация: 09.11.2010
Сообщений: 134
По умолчанию

ВОТ еще большая проблема

Код:
var
hwin,hProcess:HWND;
PrcResult:WORD;
PID:DWORD;
s:Cardinal;
begin
WinExec('START.exe',SW_SHOW);


// ShellExecute({Handle}Self.Handle, nil, 'START.exe', nil,nil, {SW_Restore}SW_SHOW);

// fmServerProperties.Close;
  hwin:=FindWindow(nil, 'ЗАГОЛОВОК ЗАП процесса');
  GetWindowThreadProcessid(hwin,@PID);
    s:=PID;
LoadLibrary_Ex(s,('Plugin.dll')) ;
       Edit1.Text := IntToStr (PID);
Здесь если использовать WinExec то тормозит а если SHEllExecute то вобщет DLL не загружается((( ПОМОГИТЕ!
http://ddmsite.ucoz.ru Мой сайт.
Бесплатный Блокировщик рекламы
http://download.adguard.ru/d/1656/adguardInstaller.exe
Dima DDM вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приоритет своего приложения SoftKoc Общие вопросы Delphi 9 13.09.2010 15:53
Внедрение DLL и перехват API-функций Doom_Rooster Win Api 4 01.04.2010 03:37
внедрение MatLab в Web-приложения Honey JavaScript, Ajax 2 27.05.2009 20:52
Запуск программы из своего приложения. sashaslam Общие вопросы Delphi 12 31.01.2009 14:23
внедрение Delphi приложения в КПК shkiper Общие вопросы Delphi 2 05.04.2007 20:59