Посл.ответ |
Сообщение |
Ранг: 64.0 (постоянный), 2thx Активность: 0.04↘0.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.04↘0.01 Статус: Участник
|
Создано: 01 апреля 2007 11:33 · Личное сообщение · #2
Дополню - основная задача даного перехвата - отловить загрузку всех Dll, поск в них интересующей сигнатуры, если есть - патч, и выход.
Правильный ли у меня подход для решения даной задачи?
| Сообщение посчитали полезным: |
Ранг: 309.8 (мудрец), 21thx Активность: 0.17↘0 Статус: Участник
|
Создано: 01 апреля 2007 11:55 · Личное сообщение · #3
ну делай проверку на то какая длл грузится...
----- Shalom ebanats! | Сообщение посчитали полезным: |
Ранг: 64.0 (постоянный), 2thx Активность: 0.04↘0.01 Статус: Участник
|
Создано: 01 апреля 2007 12:06 · Личное сообщение · #4
в даном случае даже если проверю имя и затем вызову true_LoadLibrary а там еще вызовится LoadLibrary...
в итоге base будет последней вызванной dll.
А Dll все равно все надо грузить.
да, true_LoadLibraryW - начало настоящей функции скопировано в буфер с подальшим переходом на оригинальную.
Может стоить восстанавливать оригинальную апи с последующим вызовом, тогда подгружаемые дополнительные DLL пролетят мимо, ну и хрен с ними?
| Сообщение посчитали полезным: |
Ранг: 64.0 (постоянный), 2thx Активность: 0.04↘0.01 Статус: Участник
|
Создано: 01 апреля 2007 12:14 · Личное сообщение · #5
и еще вопрос.
в даном случае пропатчить dll я смогу уже только после ее инициализации.
А если надо пропатчить до инициализации dll? как поступать тогда?
| Сообщение посчитали полезным: |
Ранг: 9.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 01 апреля 2007 12:57 · Личное сообщение · #6
Если Библеотеки нет в целевом процессе то ты можеш её загрузить а при попытке приложения загрузить её загрузчик небудет по новой грузить а даст указатель на уже патченую длл
| Сообщение посчитали полезным: |
Ранг: 64.0 (постоянный), 2thx Активность: 0.04↘0.01 Статус: Участник
|
Создано: 01 апреля 2007 13:57 · Личное сообщение · #7
Заранее точно не известно, какие модули подключены к проге (зависит от комплектации) , именно по этому самому их подгрузить не получится (хотя по идее можно, но это не универсальный метод).
Надо просто правильно все перехватить, для этого и вопрос задал
| Сообщение посчитали полезным: |
Ранг: 17.6 (новичок) Активность: 0.01=0.01 Статус: Участник
|
Создано: 01 апреля 2007 14:26 · Личное сообщение · #8
Tolkin
Посетите Сегодняшнюю тему
<< Об новых инструментах и командах >>
Там выложен инструмент, в нем есть пример
LoadLibrary
Скачай инструмент "Перископ"
и будет тебе счастье!
Инструмент тут:
www.slil.ru/24165978
| Сообщение посчитали полезным: |