|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.11.2014, 11:36 | #1 |
Форумчанин
Регистрация: 23.08.2011
Сообщений: 171
|
Перехват LoadLibraryW
Есть некая DirectX игра. Мне нужно сделать своего рода "фильтр" загружаемых dll'ок. Если имя загружаемой dll допустим "testdll.dll", тогда запрещаем ей загружаться, иначе выполняем обычную функцию LoadLibraryW. (Вариант с перебором всех загруженных dll не подходит, т.к. она уже будет загружена, моя задача не дать загрузиться, покачто только через функцию LoadLibraryW). Делаю с помощью apihooktool.
Хук ставится, и все работает: Код:
Код:
Код:
Все, что мне нужно это выдрать имя загружаемой библиотеки, сделать пару своих проверок и выполнить оригинальную функцию. Можетбыть делать, что-нибудь типо такого: Код:
jmp point; - Это первые 5 байт в оригинальной функции Kernel32.LoadLibraryW, которые мы подменили на свои. point := Pointer($10027AB0) В общем пните меня в нужном направлении пожалусто. P.S. В ассемблере чайник.
Каждый день узнаю новое...
Последний раз редактировалось Anton911; 18.11.2014 в 16:23. |
19.11.2014, 15:25 | #2 |
Форумчанин
Регистрация: 23.08.2011
Сообщений: 171
|
Почему не работает такая штука? Пытаюсь вызвать функцию зная ее адрес (GetProcAddress).
Код:
Каждый день узнаю новое...
|
19.11.2014, 17:22 | #3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
19.11.2014, 17:36 | #4 |
Форумчанин
Регистрация: 23.08.2011
Сообщений: 171
|
Немного не понял вопрос. testdll.dll это всего-лишь пример. Что значит стереть? Найти ее на диске? Моя задача не дать ей загрузиться в игру. Она может иметь произвольное имя, путь, я хочу делать пару проверок перед "добро на загрузку" в игру (например самое простое размер, или по "начинке", не суть).
Каждый день узнаю новое...
|
19.11.2014, 17:54 | #5 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Цитата:
С верятностью в 100% по тому адресу NULL. |
|
19.11.2014, 18:12 | #6 |
Форумчанин
Регистрация: 23.08.2011
Сообщений: 171
|
Но ведь kernel32.dll грузится в процессы по одним и темже адресам... Получается и адреса его функций тоже не меняются. Это тотже самый адрес, что и вернет
Код:
Каждый день узнаю новое...
|
19.11.2014, 18:15 | #7 |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,777
|
Ошибаешься. Есть ASLR.
|
23.11.2014, 15:46 | #8 |
Форумчанин
Регистрация: 23.08.2011
Сообщений: 171
|
Понял.
Хорошо, а почему не работает такая система: Код:
Пытаюсь вызвать функцию loadlibraryw, зная ее адрес.
Каждый день узнаю новое...
Последний раз редактировалось Anton911; 23.11.2014 в 15:59. |
23.11.2014, 15:57 | #9 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Если я правильно помню, когда ASLR в Windows появился, kernel32 всё равно был по одному адресу, только адрес выбирался при загрузке. С тех пор что-то изменилось?
|
23.11.2014, 17:34 | #10 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перехват | Miha85193 | Общие вопросы Delphi | 2 | 23.05.2012 13:16 |
Перехват. | egorzenit | Общие вопросы Delphi | 3 | 29.03.2012 15:19 |
Перехват клавиш | AnTe | Общие вопросы Delphi | 3 | 23.07.2010 06:24 |
Перехват WM_TIMER | Proof | Win Api | 1 | 27.06.2010 08:35 |
Перехват клавиши | mustang007 | Общие вопросы Delphi | 6 | 15.04.2009 02:01 |