Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647

DLL инъекция, оконные сообщения 955(0x3bb), 957(0x3bd), и вылеты (BEX, StackHash)

06.03.2016, 16:26. Показов 1581. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ситуация такая-есть некое приложение, в которое делается dll инъекция. В DLLке происходит подмена оконной процедуры и разного рода API. У меня на моей машине(Windows8x64) данная инъекция работает стабильно. Но у некоторых(в частности, на Windows7x64) данное приложение с инъекцией вылетает с ошибкой на одном и том же месте, которое, казалось бы, не имеет абсолютно никакого отношения к функционалу DLLки. Согласно сообщению об ошибке, событие-BEX, имя модуля с ошибкой-StackHash с чем-то. Долго не мог понять в чем дело, просил жертв данной ошибки попробовать поотключать DEP, антивирусы и произвести прочие манипуляции с системой. Но ничего из этого не помогало. В конце-концов я поставил на виртуалке такую же винду, как у них, поставил там студию и стал дебаггером искать, в чем же дело. Обнаружил, что крэш происходит, когда окну приходят таинственные сообщения
955(0x3bb), 957(0x3bd). Мой код по данным сообщениям никакого функционала не выполняет-просто вызывает старую оконную процедуру. проверив номер сообщения. Spy++ имен данным сообщениям не дает, гугл тоже, вроде бы, ничего о них не знает. Попробовал отловить такие же сообщения на своей машине-они не приходят. Попробовал их отправлять-ничего не происходит. А на 7ерке подобные сообщения откуда-то прилетают сами и вызывают немедленный крэш. В результате чего я в оконной процедуре просто написал:
C++
1
2
3
4
    if (msg == 955 || msg==957)
    {
        return TRUE;
    }
И крэши прекратились. Вопрос: в чем же может быть дело? В каком направлении копать? Может кто сталкивался с таким? Уверен, что эта проблема еще всплывет, потому что причину происходящего я так и не уловил.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.03.2016, 16:26
Ответы с готовыми решениями:

Оконные сообщения
Добрый день! Есть проблема. Есть приложение условно назовем AppMain, которое отправляет в определенный момент оконное сообщение...

APPCRASH BEX 64 MSVCR90.dll
Хаюшки! Установил AMD gaming evolved=>записал ним видео в формате mp4=>кинул файл в Sony Vegas 11=> и сразу вылетает: Имя события...

Обработать оконные сообщения
Нужно обработать WM_CHAR, WM_KEYDOWN, WM_LBUTTONDBLCLK, WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOVE. Не важно что и как, любые...

4
 Аватар для Alex xelA
100 / 38 / 20
Регистрация: 27.02.2016
Сообщений: 135
06.03.2016, 16:54
Код WindowProc покажите хоть.
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
06.03.2016, 17:08  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
LRESULT CALLBACK NewWindowProc(HWND hWnd, UINT msg, WPARAM w, LPARAM l)
{
    WNDPROC oldproc = NULL;
    EnterCriticalSection(&csWndProc);
    for (int i = 0; i < (int)old.size(); i++)
    {
        if (old[i].hWnd == hWnd) { oldproc = old[i].proc; break; } //в old лежит список структур из двух полей: хэндл окна и старая оконная процедура. Находит в списке соответствующую старую оконную процедуру.
    }
    LeaveCriticalSection(&csWndProc);
    if (oldproc == NULL)
        return FALSE; //если не нашли-возвращаемся(такого в норме не должно случаться никогда, обычно использовалось для точки останова)
    if (msg == WM_CHAR && !(GetWindowLongPtrW(hWnd, GWL_STYLE)&WS_VISIBLE)) {
        return TRUE; //запрещаю слать WM_CHAR невидимому окну
    }
    if (msg == 955 || msg == 957) //упомянутый в теме костыль, после которого вылеты прекратились.
    {
        return TRUE;
    }
    int result = oldproc(hWnd, msg, w, l); //вызываем старую оконную процедуру. Ошибка происходит где-то внутри нее.
    switch(msg){
        //длинный код
       }
      return result.
}
Код старой оконной процедуры мне неизвестен. Разве что дизассемблировать.

Добавлено через 39 секунд
C++ я очень плохо знаю, мог что-то существенное просто не заметить...
0
 Аватар для Alex xelA
100 / 38 / 20
Регистрация: 27.02.2016
Сообщений: 135
06.03.2016, 17:10
Лучший ответ Сообщение было отмечено EvilFromHell как решение

Решение

Попробуй CallWindowProc(...). Старый указатель WindowProc может быть и не функцией вовсе, а спец. значением для системы.

К тому же, при обработке WM_CHAR надо возвращать FALSE (0).
1
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
06.03.2016, 17:33  [ТС]
Alex xelA, огромное вам спасибо. Действительно-вылеты сразу же прекратились, после того, как я CallWindowProc(...) попробовал. Пропустил я этот нюанс.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.03.2016, 17:33
Помогаю со студенческими работами здесь

BEX clr.dll Код исключения: c0000409
Добрый день, У меня есть C#-приложение (VS2010, framework 4). На некоторых машинах при запуске получаю сообщение: Имя события...

Инъекция .dll в .exe
День добрый, Возник такой вопрос: Можно ли впихнуть в EXEшник DLLки, что бы оно находилось в одном файле, был один .exe и он работал...

Вычислить комптоновское смещение Δλ и относительное изменение Δλ/λ длины волны
Вычислить комптоновское смещение Δλ и относительное изменение Δλ/λ длины волны для видимого света λ = 500 нм и γ–лучей λ = 5...

Могут ли у оператора A различным собственным числам λ1 и λ2
Добрый вечер, хотел бы удостоверится в правильности ответа. Могут ли у оператора A различным собственным числам {\lambda}^{1} и...

λ-исчисление: Определите тип комбинатора: S = λfgx.fx(gx)
Здравствуйте! Хотел поинтересоваться а правильно ли я сделал задания. 2) Используя Y - комбинатор. сделать так чтобы FM = F ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru