Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых)

 eXeL@B —› Программирование —› Функция для перехвата
Посл.ответ Сообщение

Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 01 апреля 2007 11:05
· Личное сообщение · #1

Помогоите доработать функцию, а то я в программировании не очень еще. На делфи.
Перехватываю LoadLibraryW

function new_LoadLibraryW(LibName:PWideChar):Thandle;stdcall;
var
base:dword;
begin
base:=true_LoadLibraryW(LibName);
... {здесь идет патчинг Dll}
result:=base;
end;


Проблема в том, что загружаемая Dll еще сама загружает Dll, и в итоге не все dll обрабатываются (а только последняя).
Наверно вызов true_LoadLibraryW и патч ее надо реализовывать в отдельном потоке - как это реализовать?
и как затем вернуть значение base в эту функцию (result:=base;) и корректно вернуться в основную прогу?



Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 01 апреля 2007 11:33
· Личное сообщение · #2

Дополню - основная задача даного перехвата - отловить загрузку всех Dll, поск в них интересующей сигнатуры, если есть - патч, и выход.
Правильный ли у меня подход для решения даной задачи?



Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 01 апреля 2007 11:55
· Личное сообщение · #3

ну делай проверку на то какая длл грузится...

-----
Shalom ebanats!




Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 01 апреля 2007 12:06
· Личное сообщение · #4

в даном случае даже если проверю имя и затем вызову true_LoadLibrary а там еще вызовится LoadLibrary...
в итоге base будет последней вызванной dll.
А Dll все равно все надо грузить.

да, true_LoadLibraryW - начало настоящей функции скопировано в буфер с подальшим переходом на оригинальную.
Может стоить восстанавливать оригинальную апи с последующим вызовом, тогда подгружаемые дополнительные DLL пролетят мимо, ну и хрен с ними?



Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 01 апреля 2007 12:14
· Личное сообщение · #5

и еще вопрос.
в даном случае пропатчить dll я смогу уже только после ее инициализации.
А если надо пропатчить до инициализации dll? как поступать тогда?



Ранг: 9.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 01 апреля 2007 12:57
· Личное сообщение · #6

Если Библеотеки нет в целевом процессе то ты можеш её загрузить а при попытке приложения загрузить её загрузчик небудет по новой грузить а даст указатель на уже патченую длл



Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 01 апреля 2007 13:57
· Личное сообщение · #7

Заранее точно не известно, какие модули подключены к проге (зависит от комплектации) , именно по этому самому их подгрузить не получится (хотя по идее можно, но это не универсальный метод).
Надо просто правильно все перехватить, для этого и вопрос задал



Ранг: 17.6 (новичок)
Активность: 0.01=0.01
Статус: Участник

Создано: 01 апреля 2007 14:26
· Личное сообщение · #8

Tolkin

Посетите Сегодняшнюю тему

<< Об новых инструментах и командах >>

Там выложен инструмент, в нем есть пример
LoadLibrary

Скачай инструмент "Перископ"
и будет тебе счастье!

Инструмент тут:

www.slil.ru/24165978


 eXeL@B —› Программирование —› Функция для перехвата
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати