![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Zolex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 24.10.2006 Репутация: нет Всего: нет |
Здравствуйте.
Имею вот такую проблему. Есть динамическая библиотека стороннего производителя с набором известных функций, которую я динамически гружу себе. LoadLibrary. GetProcAddress. Далее я лезу в эту библиотеку вызывая функцию, описанную там. dll выдат MessageBox о том что она не пустит меня дальше. Но мне это и не надо. Мне надо только понять что он собирается выдать этот MessageBox, перехватить его и запретить вывод не экран. Вместо этого записать себе в программу данные о том что это защищенный производителями dll. Вот такая задача. Я не очень хорошо понимаю перехват. Не могли бы Вы написать пошаговую инструкцию что делать. Заранее спасибо. |
|||
|
||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 4 Всего: 17 |
обычно делается подменой dll'ok - dll'ками-обертками
вот это может помочь: http://forum.vingrad.ru/forum/topic-199415.html |
|||
|
||||
| Zolex |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 24.10.2006 Репутация: нет Всего: нет |
Как-то не очень помогло...
|
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: нет Всего: 41 |
можно при появлении окошка, закрывать его бысто и все:
а понять заранее выдастся сообщение или нет затруднительно -------------------- |
|||
|
||||
| Zolex |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 24.10.2006 Репутация: нет Всего: нет |
Да я думал об этом. Но учитывая что я открываю последовательно нескольно dll я не всегда знаю какие заголовки имеет окно. А можно получать хэндл последнего открытого окна? Или как тут еще понять что это именно то окно? |
||||
|
|||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 2 Всего: 36 |
загружаешь искомую dll в память, далее парсишь таблицу импорта. для каждого импортируемого модуля ищешь список импортируемых функций. при совпадении с MessageBox(A|W) меняешь её адрес на свою заглушку. всё.
примерно этот процесс описан здесь |
|||
|
||||
| dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: нет Всего: 25 |
Про перехват api-вызовов есть у рихтера "ГЛАВА 22 Внедрение DLL и перехват API-вызовов". Там говорится о нескольких подводных камнях, в частности проблемы будут, если вызов идет не через ссылку на таблицу импорта, а через GetProcAddress.
Добавлено через 4 минуты и 34 секунды В принципе, если появление messagebox достаточно для постановки диагноза, то перехват MessageBoxA и MessageBoxW может решить проблему |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |