![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| DelDev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 9.8.2013 Репутация: нет Всего: нет |
Подскажите, пожалуйста, какие есть способы перехвата функций Windows API (например, MessageBox) в сжатом (UPX) исполняемом файле.
P.S. Исполняемый файл подгружает мою Dll. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
попробуй хук реализации функции сплайсингом
-------------------- Обижено школьников: 8 |
|||
|
||||
| DelDev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 9.8.2013 Репутация: нет Всего: нет |
Как получить адрес функции в исполняемом модуле из DLL?
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
я говорю реализацию хукай, которая в user32.dll
-------------------- Обижено школьников: 8 |
|||
|
||||
| DelDev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 9.8.2013 Репутация: нет Всего: нет |
Можно, пожалуйста, как-то поподробнее.
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
можно.
берешь адрес MessageBox. Если он указывает на какой-то из вариантов инструкции jmp, то берешь адрес куда эта инструкция джампает. проверяешь нет ли там в свою очередь еще одного джампа. и так до тех пор, пока не найдешь адрес собственно кода функции. сохраняешь куда-то первые инструкции функции, записываешь на их место джамп на твой хук. когда нужно выполнить оригинальную функцию, ты вызываешь сохранённое начало, а потом джампаешь на код, который шел в оригинале сразу после него. Как вариант можно вместо записи джампа в начало функции записать туда int3 или еще какую-то однобайтовую инструкцию, вызывающую исключение, а в векторном обработчике исключения вызывать хук. Это позволяет сохранять только первую инструкцию похуканной функции -------------------- Обижено школьников: 8 |
|||
|
||||
| DelDev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 9.8.2013 Репутация: нет Всего: нет |
А пример есть?
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
гуглится несложно по слову "сплайсинг"
-------------------- Обижено школьников: 8 |
|||
|
||||
| DelDev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 9.8.2013 Репутация: нет Всего: нет |
Можно ли заменить функцию через таблицу импорта?
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
импорт же вроде upx скрывает. тогда уже правь таблицу экспорта дллки, но сделать это нужно до того как начнет работать экзешник. например запустить процесс замороженным, похукать и запустить.
-------------------- Обижено школьников: 8 |
|||
|
||||
| DelDev |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 9.8.2013 Репутация: нет Всего: нет |
А это можно сделать в моем случае, когда зажатый исполняемый файл сам загружает мою DLL. Это что типа нада ставит глобальный хук в другой dll?
И еще вопрос: UPX сокращает таблицу импорта до нескольких функций, но он, наверное, после запуска должен ее восстановить? Если это так, то можно к ней как-то обратиться и пропатчить нужный адрес функции? Это сообщение отредактировал(а) DelDev - 6.9.2013, 21:58 |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| DelDev |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 9.8.2013 Репутация: нет Всего: нет |
Спасибо, но я спрашивал немного о другом. Это сообщение отредактировал(а) DelDev - 7.9.2013, 18:23 |
||||||
|
|||||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 7 Всего: 41 |
Этого достаточно, чтобы перехватить любую функцию импортируемую приложением из любой dll. Неважно как приложение ее импортирует - через таблицу импорта, или через LoadLibrary. Ковырять таблицу импорта нужно только тогда, когда нужно перехватить ВСЕ используемые приложением функции. И то - необходимо только чтение таблицы импорта. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |