| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Перехват WinAPI и UPX |
| Автор: DelDev 6.9.2013, 14:17 |
| Подскажите, пожалуйста, какие есть способы перехвата функций Windows API (например, MessageBox) в сжатом (UPX) исполняемом файле. P.S. Исполняемый файл подгружает мою Dll. |
| Автор: bems 6.9.2013, 15:13 |
| попробуй хук реализации функции сплайсингом |
| Автор: DelDev 6.9.2013, 18:01 |
| Как получить адрес функции в исполняемом модуле из DLL? |
| Автор: bems 6.9.2013, 19:21 |
| я говорю реализацию хукай, которая в user32.dll |
| Автор: DelDev 6.9.2013, 19:28 |
| Можно, пожалуйста, как-то поподробнее. |
| Автор: bems 6.9.2013, 19:44 |
| можно. берешь адрес MessageBox. Если он указывает на какой-то из вариантов инструкции jmp, то берешь адрес куда эта инструкция джампает. проверяешь нет ли там в свою очередь еще одного джампа. и так до тех пор, пока не найдешь адрес собственно кода функции. сохраняешь куда-то первые инструкции функции, записываешь на их место джамп на твой хук. когда нужно выполнить оригинальную функцию, ты вызываешь сохранённое начало, а потом джампаешь на код, который шел в оригинале сразу после него. Как вариант можно вместо записи джампа в начало функции записать туда int3 или еще какую-то однобайтовую инструкцию, вызывающую исключение, а в векторном обработчике исключения вызывать хук. Это позволяет сохранять только первую инструкцию похуканной функции |
| Автор: DelDev 6.9.2013, 20:20 |
| А пример есть? |
| Автор: bems 6.9.2013, 20:26 |
| гуглится несложно по слову "сплайсинг" |
| Автор: DelDev 6.9.2013, 21:03 |
| Можно ли заменить функцию через таблицу импорта? |
| Автор: bems 6.9.2013, 21:28 |
| импорт же вроде upx скрывает. тогда уже правь таблицу экспорта дллки, но сделать это нужно до того как начнет работать экзешник. например запустить процесс замороженным, похукать и запустить. |
| Автор: DelDev 6.9.2013, 21:56 |
| А это можно сделать в моем случае, когда зажатый исполняемый файл сам загружает мою DLL. Это что типа нада ставит глобальный хук в другой dll? И еще вопрос: UPX сокращает таблицу импорта до нескольких функций, но он, наверное, после запуска должен ее восстановить? Если это так, то можно к ней как-то обратиться и пропатчить нужный адрес функции? |
| Автор: Чучмек 7.9.2013, 16:12 | ||
|
| Автор: DelDev 7.9.2013, 18:18 | ||||||
Спасибо, но я спрашивал немного о другом. |
| Автор: Чучмек 8.9.2013, 18:39 |
Этого достаточно, чтобы перехватить любую функцию импортируемую приложением из любой dll. Неважно как приложение ее импортирует - через таблицу импорта, или через LoadLibrary. Ковырять таблицу импорта нужно только тогда, когда нужно перехватить ВСЕ используемые приложением функции. И то - необходимо только чтение таблицы импорта. |