Сrackme, прячущий код на API-функциях


         

соглашения при котором аргументы удаляет


Почему? Вспомним, что API-функции придерживаются stdcall- соглашения при котором аргументы удаляет из стека сама вызываемая функция. Аргументы легко скопировать "с запасом", но откуда мы знаем сколько их удалять при выходе из thunk'а? А удалять необходимо, ведь в противном случае стек окажется несбалансированным и все рухнет.

Вообще-то, можно просто проанализировать значение регистра ESP до и после выполнения API-функции. Дельта и будет тем количеством байт, на которые мы должны увеличить ESP. Но есть и более короткие пути: если перехватываемая функция известна, достаточно просто создать функцию-двойник, имеющий тот же самый прототип. На языке Си это будет выглядеть так (в данном случае перехватывается MessageBoxA, в заголовке которой насильно прописывается строка "hacked", подтверждающая, что перехватчик исправно работает):

// наш thunk

//============================================================================

// получаем управление до вызова функции MessageBoxA

// может делать что угодно с параметрами и т.д.

__stdcall thunk(HWND h, LPCTSTR lpTxt, LPCTSTR lpCaption, UINT uType)

{

       _do(_UNINSTALL_THUNK_);           // восстанавливаем оригинальную функцию

       MessageBox(h,lpTxt,"hacked",uType);      // вызываем оригинальную функцию

       _do(_INSTALL_THUNK_);                    // вновь устаналиваем thunk

}

Листинг 4 демонстрация перехвата API-функции с известным прототипом


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий