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

Delphi Sources



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

 
 
Опции темы Поиск в этой теме Опции просмотра
  #9  
Старый 23.02.2012, 17:34
PRStudio PRStudio вне форума
Прохожий
 
Регистрация: 18.02.2012
Сообщения: 13
Репутация: 143
По умолчанию

Облазил Инет и в каком-то закаулке наткнулся на обсуждение некого Дж. Ритхера и его книженции. Его там очень хорошо расхваливали, и как я сам убедился - заслуженно. Скачал я его книгу и по рассмотренному примеру мне удалось сделать инжект. Теперь все прекрасно работает, осталось только помудрить с ANSI и UTF версиями вызовов

Вот результат:
Код:
Var libAddr:PChar;             // Путь к внедряемой DLL-ке (необходим полный путь)
    libSize:Integer;           // Размер нашей строки libAddr
	processId:Dword;           // Идентификатор процесса
	processHandle:THandle;     // Описатель (Хэндл) процесса
	stringMemoryBlock:Pointer; // Указатель на выделенную память
	aThreadAdress:Pointer;     // Адрес LoadLibraryA (ANSI)
	threadHandle:THandle;      // Хэндл созданного потока
	
	
	// Подгружаемая библиотека (прописаны мои пути)
    libAddr := 'D:\KURSOVAJA\WM\dlls\httpHook.dll';
    libSize := Length(libAddr)*SizeOf(Pchar);

    // Получаем идентификатор процесса (ломаем Оперу)
    processId := GetProcessId('opera.exe');

    // Получаем хэндл процесса
    processHandle := OpenProcess(PROCESS_ALL_ACCESS or PROCESS_VM_WRITE,True,processId);

    // Выделяем блок памяти в чужом адресном пространстве
    stringMemoryBlock := VirtualAllocEx(processHandle,nil,libSize,MEM_COMMIT,PAGE_READWRITE);
    if (stringMemoryBlock <> nil) then ShowMessage('Блок памяти выделен');

    // Копируем строку в адресное пространство процесса
    if (WriteProcessMemory(processHandle,stringMemoryBlock,libAddr,libSize,writtenProc) <> FALSE) then ShowMessage('Блок памяти записан');

    // Получаем адрес LoadLibraryA в kernel32
    aThreadAdress := GetProcAddress(GetModuleHandle('kernel32'),'LoadLibraryA');
    if (aThreadAdress <> nil) then ShowMessage('Адрес LoadLibraryA получен');

    // Создаем удаленный поток
    threadHandle := CreateRemoteThread(processHandle,nil,0,aThreadAdress,stringMemoryBlock,0,threadId);
    if (threadHandle <> 0) then ShowMessage('Поток создан');
Ответить с цитированием
 


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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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