Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехватить MessageBox 
:(
    Опции темы
Zolex
Дата 12.3.2008, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 24.10.2006

Репутация: нет
Всего: нет



Здравствуйте.

Имею вот такую проблему.

Есть динамическая библиотека стороннего производителя с набором известных функций, которую я динамически гружу себе. LoadLibrary. GetProcAddress.

Далее я лезу в эту библиотеку вызывая функцию, описанную там. dll выдат MessageBox о том что она не пустит меня дальше. Но мне это и не надо.

Мне надо только понять что он собирается выдать этот MessageBox, перехватить его и запретить вывод не экран. Вместо этого записать себе в программу данные о том что это защищенный производителями dll.

Вот такая задача. Я не очень хорошо понимаю перехват. Не могли бы Вы написать пошаговую инструкцию что делать.

Заранее спасибо.
PM MAIL   Вверх
korian
Дата 12.3.2008, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 4
Всего: 17



обычно делается подменой dll'ok - dll'ками-обертками
вот это может помочь:
http://forum.vingrad.ru/forum/topic-199415.html

PM   Вверх
Zolex
Дата 12.3.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 24.10.2006

Репутация: нет
Всего: нет



Как-то не очень помогло...
PM MAIL   Вверх
Dmi3ev
Дата 13.3.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: нет
Всего: 41



можно при появлении окошка, закрывать его бысто и все:
Код

HWND hwnd=FindWindow(NULL,"Title сообщения");
if (hwnd!=NULL)
 DestroyWindow(hwnd);

а понять заранее выдастся сообщение или нет затруднительно


--------------------

PM MAIL   Вверх
Zolex
Дата 13.3.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 24.10.2006

Репутация: нет
Всего: нет



Цитата(Dmi3ev @ 13.3.2008,  11:42)
можно при появлении окошка, закрывать его бысто и все:
Код

HWND hwnd=FindWindow(NULL,"Title сообщения");
if (hwnd!=NULL)
 DestroyWindow(hwnd);

а понять заранее выдастся сообщение или нет затруднительно

Да я думал об этом. Но учитывая что я открываю последовательно нескольно dll я не всегда знаю какие заголовки имеет окно. А можно получать хэндл последнего открытого окна? Или как тут еще понять что это именно то окно?
PM MAIL   Вверх
Rififi
Дата 13.3.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 2
Всего: 36



загружаешь искомую dll в память, далее парсишь таблицу импорта. для каждого импортируемого модуля ищешь список импортируемых функций. при совпадении с MessageBox(A|W) меняешь её адрес на свою заглушку. всё.
примерно этот процесс описан здесь
PM MAIL   Вверх
dizzy1984
Дата 14.3.2008, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: нет
Всего: 25



Про перехват api-вызовов есть у рихтера "ГЛАВА 22 Внедрение DLL и перехват API-вызовов". Там говорится о нескольких подводных камнях, в частности проблемы будут, если вызов идет не через ссылку на таблицу импорта, а через GetProcAddress.

Добавлено через 4 минуты и 34 секунды
В принципе, если появление messagebox достаточно для постановки диагноза, то перехват MessageBoxA и MessageBoxW может решить проблему
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.