![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
AndAnd |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 22.7.2006 Репутация: 1 Всего: 1 |
Здравствуйте все участники форума!
У меня тут возникла проблема. Нашел в Инете статью о том как перехватывать API функцию MessageBoxA из user32.dll. Суть данного метода заключается в следующем (очень кратко): Пишем свою DLL, с функцией двойником и какую функцию необходимо перехватывать. Затем отдельно код на подключение DLL к процессу, где используется искомая API функция (я создал простой проект с MessageBox в Buildere). Далее запускаем проект с MessageBox (в диспетчере задач появляется процесс с каким-то PID), после чего подключаем DLL к процессу. Вызываем MessageBox (с любым текстом), DLL перехватывает этот текст и добавляет к нему (или совсем другой текст) некоторый набор символов, и выдает измененное сообщение, вродебы перехват осуществился. Но при попытке перехватить любую API функцию из Wininet.DLL, происходит ошибка приложения, использующее эту библиотеку. Ошибка скорее всего в коде DLL, но точно не заню. Может кто знает как исправить вот исходник DLL на Buildere
а вот исходник для присоединения DLL к процессу:
Спасибо за внимание. Жду ответов по-существу. |
||||
|
|||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
пока причины не понял, но явно бросается в глаза вызов "call" инструкции: 0x15ff - это что угодно, но не "call". У "call" всего 4 возможных варианта кода: E8im, FF/2, 9Aim, FF/3 и ни под один 0x15ff не подходит! После слеша указан код регистра RO, т.е. старший халф-байт второго слова расширенной(двухбайтовой) команды.
Теперь по сути: ты пытаешься перепизать какой-нибудь экспортный вызов в уже загруженном модуле, но учти один момент: не все экспортируемые методы имеют одинаковую модель вызова: экспортировать можно и __fastcall и __cdecl, а ты используешь только один подход при подстановке своего кода. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
GremlinProg, имхо в обратном порядке это и будет 0xff, 0x15
![]() -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Romikgy, собственно, об чем я и говорю: (15!=3)&&(15!=2). ))
Добавлено @ 18:02 вернее (0x01!=0x03)&&(0x01!=0x02), это стабший полубайт! -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
проглядел
![]() я не силен в асме , не знаю его команд ![]() Это сообщение отредактировал(а) Romikgy - 22.7.2006, 18:04 -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
AndAnd |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 22.7.2006 Репутация: 1 Всего: 1 |
Вот какую ошибку мне выдает IE если к нему подключать эту библиотеку.
как я вижу DLL подключена к IE, но почему-то здесь все по нулям. Это сообщение отредактировал(а) AndAnd - 22.7.2006, 20:28 Присоединённый файл ( Кол-во скачиваний: 22 ) ![]() |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
ff 15 xx xx xx xx - call dword ptr [xx xx xx xx]
__fastcall на экспорт - таки не типичный случай ![]() по существу: #pragma pack(1) ![]() Добавлено @ 22:20 и не забудь подставлять полный путь к .dll, если она не в system32... |
|||
|
||||
AndAnd |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 22.7.2006 Репутация: 1 Всего: 1 |
dumb, извини, но я не понял, что ты этим хочешь сказать. GremlinProg, ты не нашел причину? я один с этим не справлюсь, мне нужна ваша помощь, я смотрю тут все соображают, кроме меня. ![]() |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
"оберни" объявления структур INJECTORCODE и jmp_far:
|
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Извиняюсь, про двухбитный MOD забыл, все привильно ff 15 xx xx xx xx - call dword ptr [xx xx xx xx], как ты и сказал.
Добавлено @ 22:13 покажи объявление INJECTORCODE Добавлено @ 22:21 call dword ptr [loadlibrary_adr] - это вызов из импортного THUNC'а LoadLibrary, а GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA") даст тебе прямой линк на метод, получается команда выполнит джамп неизвестно куда, т.е. на адрес по адресу первого дворда кода LoadLibraryA. Нужно заменить тогда ff 15 xx xx xx xx на E8 xx xx xx xx - это на байт короче. Добавлено @ 22:22 но бросает вызов сразу по смещению, без dword ptr [] -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
AndAnd |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 22.7.2006 Репутация: 1 Всего: 1 |
вот
|
||||
|
|||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
код рабочий, слит с rsdn. просто было не учтено выравнивание в структуре.
AndAnd, неужели не работает до сих пор?! ![]() |
|||
|
||||
AndAnd |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 22.7.2006 Репутация: 1 Всего: 1 |
dumb, именно с этой статьи я и брал код. Просто мне надо перехватить не MessageBoxA, а функцию InternetConnectA из wininet.dll. Но при простой замене функции MessageBox на InternetConnectA ничего не получается, приложение выдает ошибку.
Может я что-н. не так делаю, но не работает. ![]() |
|||
|
||||
dumb |
|
||||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
dll:
кусок от "присоединителя" (в нем, собственно, и так все нормально - на всякий случай):
|
||||
|
|||||
AndAnd |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 22.7.2006 Репутация: 1 Всего: 1 |
dumb , спасибо тебе большое, очень выручил! Спасибо и всем участникам данной темы: GremlinProg , Romikgy .
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |