Библиотека Рефераты Курсовые Дипломы Поиск
Библиотека Рефераты Курсовые Дипломы Поиск
сделать стартовой добавить в избранное
Кефирный гриб на сайте www.za4et.net.ru

Компьютеры, Программирование Компьютеры, Программирование

Методы перехвата API-вызовов в Win32

Браслет светоотражающий, самофиксирующийся, желтый.
Изготовлены из влагостойкого и грязестойкого материала, сохраняющего свои свойства в любых погодных условиях. Легкость крепления позволяет
66 руб
Раздел: Прочее
Совок большой.
Длина 21,5 см. Расцветка в ассортименте, без возможности выбора.
21 руб
Раздел: Совки
Фонарь желаний бумажный, оранжевый.
В комплекте: фонарик, горелка. Оформление упаковки - 100% полностью на русском языке. Форма купола "перевёрнутая груша" как у
87 руб
Раздел: Небесные фонарики

Игорь В. Филимонов Введение Данная статья написана в результате анализа известных методов перехвата API-вызовов в Wi dows. В некоторых широко известных примерах реализации перехвата системных функций есть небольшие ошибки, которые в некоторых случаях приводят к тому, что перехват не работает. Один из таких примеров был описан в RSD Magazi e #1, другой – в известной книге Джеффри Рихтера «Wi dows для профессионалов: создание эффективных Wi 32-приложений с учетом специфики 64-разрядной версии Wi dows», 4-е издание. Перехват системных функций операционной системы – приём, известный давно. Обычно перехватывается некоторая системная функция с целью мониторинга или изменения её поведения. Во времена DOS программисты перехватывали программные прерывания (i 21h, i 16h, i 10h). С приходом Wi 16 понадобились средства для перехвата API-функций. И, наконец, с появлением Wi 32 средства перехвата ещё раз эволюционировали, подстроившись под новую систему. Операционные системы семейства Wi dows никогда не содержали встроенных средств, специально предназначенных для перехвата системных функций. И понятно почему – всё-таки это немного хакерский приём. Поэтому перехват обычно осуществляется «подручными средствами», и для его реализации нужно чётко представлять многие глубинные аспекты устройства и функционирования операционной системы. В данной статье рассматриваются методы реализации перехвата системных API-функций в 32-разрядных операционных системах Wi dows. Рассматриваются особенности реализации перехвата в Wi 9X (Wi dows 95/98/98SE/ME) и Wi (Wi dows /2000/XP/2003). Особенности организации памяти в Wi dows Так как перехват практически всегда связан с модификацией памяти (либо кода перехватываемой функции, либо таблиц импорта/экспорта), то для его осуществления необходимо учитывать особенности архитектуры памяти Wi и Wi 9X. Каждому процессу (начиная с Wi dows 95) выделяется собственное виртуальное адресное пространство. Для 32-разрядных процессов его размер составляет 4 Гб. Это адресное пространство разбивается на разделы, функциональное назначение и свойства которых довольно сильно отличаются у семейств ОС Wi и Wi 9Х. Адресное пространство любого процесса в Wi 9Х можно разделить на три раздела: Младшие два гигабайта (00400000-7FFFFFFF) – код и данные пользовательского режима (в диапазоне 00000000-003FFFFF расположены разделы для выявления нулевых указателей и для совместимости с программами DOS и Wi 16); Третий гигабайт – для общих файлов, проецируемых в память (MMF), и системных DLL. Четвёртый гигабайт – для кода и данных режима ядра (здесь располагается ядро операционной системы и драйверы). Старшие два гигабайта являются общими для всех процессов. Основные системные DLL – ker el32.dll, advAPI32.dll, user32.dll и GDI32.dll загружаются в третий гигабайт. По этой причине эти четыре библиотеки доступны всем процессам в системе. Поскольку этот гигабайт общий, они существуют во всех процессах по одним и тем же адресам. Из соображений безопасности Microsof запретила запись в область, куда они загружаются. Если же запись туда всё же произвести (а это возможно из режима ядра или недокументированными методами), то изменения произойдут во всех процессах одновременно.

В Wi общих разделов у процессов нет, хотя системные библиотеки по-прежнему во всех процессах загружаются по одинаковым адресам (но теперь уже в область кода и данных пользовательского режима). Запись в эту область разрешена, но у образов системных библиотек в памяти стоит атрибут «копирование при записи» (copy-o -wri e). По этой причине попытка записи, например, в образ ker el32.dll приведёт к появлению у процесса своей копии изменённой страницы ker el32.dll, а на остальных процессах это никак не отразится. Все эти различия существенно влияют на способы реализации перехвата функций, расположенных в системных DLL. Перехваты можно разделить на два типа: локальные (перехват в пределах одного процесса) и глобальные (в масштабах всей системы). Локальный перехват Локальный перехват с использованием раздела импорта Локальный перехват может быть реализован и в Wi 9X, и в Wi посредством подмены адреса перехватываемой функции в таблице импорта. Для понимания механизма работы этого метода нужно иметь представление о том, как осуществляется динамическое связывание. В частности, необходимо разбираться в структуре раздела импорта модуля. В разделе импорта каждого exe- или DLL-модуля содержится список всех используемых DLL. Кроме того, в нем перечислены все импортируемые функции. Вызывая импортируемую функцию, поток получает ее адрес фактически из раздела импорта. Поэтому, чтобы перехватить определенную функцию, надо лишь изменить её адрес в разделе импорта. Для того чтобы перехватить произвольную функцию в некотором процессе, необходимо поправить её адрес импорта во всех модулях процесса (так как процесс может вызывать эту функцию не только из exe-модуля, но и из DLL-модулей). Кроме того, процесс может воспользоваться для загрузки DLL функциями LoadLibraryA, LoadLibraryW, LoadLibraryExA, LoadLibraryExW или, если она уже загружена, определить её адрес при помощи функции Ge ProcAddress. Поэтому для перехвата любой API-функции необходимо перехватывать и все эти функции. Существует несколько широко известных примеров реализации этого метода, в частности один из них описан в книге Джеффри Рихтера «Wi dows для профессионалов: создание эффективных Wi 32 приложений с учетом специфики 64-разрядной версии Wi dows» (Jeffrey Rich er «Programmi g Applica io s for Microsof Wi dows»), 4-е издание. Другой пример – библиотека APIHijack, написанная Wade Brai erd на основе DelayLoadProfileDLL.CPP (Ma Pie rek, MSJ, февраль 2000). Для описания этого метода я взял за основу пример Джеффри Рихтера (с небольшими изменениями). Для реализации перехвата был создан класс CAPIHook, конструктор которого перехватывает заданную функцию в текущем процессе. Для этого он вызывает метод ReplaceIA E ryI AllMods, который, перечисляя все модули текущего процесса, вызывает для каждого метод ReplaceIA E ryI O eMod, в котором и реализуется поиск и замена адреса в таблице импорта для заданного модуля. void CAPIHook::ReplaceIA E ryI O eMod(PCS R pszCalleeMod ame,  PROC pf Curre , PROC pf ew, HMODULE hmodCaller) {  //Получим адрес секции импорта  ULO G ulSize;  PIMAGE IMPOR DESCRIP OR pImpor Desc = RUE,  IMAGE DIREC ORY E RY IMPOR , &ulSize);  if (pImpor Desc == ULL)  re ur ; //Здесь её нет  //Найдём нужный модуль  for (; pImpor Desc-> ame; pImpor Desc )  {  PS R pszMod ame = (PS R)((PBY E) hmodCaller pImpor Desc-> ame);  if (ls rcmpiA(pszMod ame, pszCalleeMod ame) == 0)  {   //Нашли   if (pImpor Desc-> ame == 0)   re ur ; //Ни одна функция не импортируется   //Получим адрес таблицы импорта   PIMAGE HU K DA A p hu k =   (PIMAGE HU K DA A)((PBY E) hmodCaller pImpor Desc->Firs hu k);   //Переберём все импортируемые функции   for (; p hu k->u1.F

u c io ; p hu k )   {   PROC ppf = (PROC ) &p hu k->u1.Fu c io ; //Получим адрес функции   BOOL fFou d = ( ppf == pf Curre );  //Его ищем?   if (!fFou d && ( ppf > sm pvMaxAppAddr))   {    // Если не нашли, то поищем поглубже.    // Если мы в Wi 98 под отладчиком, то    // здесь может быть push с адресом нашей функции    PBY E pbI Fu c = (PBY E) ppf ;    if (pbI Fu c == cPushOpCode)    {    //Да, здесь PUSH    ppf = (PROC ) &pbI Fu c;    //Наш адрес?    fFou d = ( ppf == pf Curre );    }   }   if (fFou d)   {    //Нашли!!!    DWORD dwDummy;    //Разрешим запись в эту страницу    Vir ualPro ec (ppf , sizeof(ppf ), PAGE EXECU E READWRI E, &dwDummy);    //Сменим адрес на свой    Wri eProcessMemory(Ge Curre Process(), ppf , &pf ew,    sizeof(pf ew), ULL);    //Восстановим атрибуты    Vir ualPro ec (ppf , sizeof(ppf ), dwDummy , &dwDummy);    //Готово!!!    re ur ;   }   }  }  }  //Здесь этой функции не нашлось } При помощи функции ImageDirec oryE ry oDa a определяется дескриптор таблицы импорта и, если он есть, перебираются все DLL, из которых импортируются функции. Если DLL находится, то среди функций, импортируемых из неё, ищется нужная, а затем при помощи Wri eProcessMemory её адрес меняется на адрес своего обработчика. Теперь он будет вызываться каждый раз, когда из данного модуля будет происходить обращение к перехваченной функции. ПРИМЕЧАНИЕ Если вы читали уже упоминаемую выше книгу Джеффри Рихтера, то могли заметить, что в функции ReplaceIA E ryI O eMod я сделал одно изменение. У него она работала так: в таблице импорта находился список функций того модуля, функция из которого импортировалась, и если в этом списке эта функция не находилась, то ReplaceIA E ryI O eMod больше ничего не делала (т. е. перехват не происходил). Я столкнулся с таким поведением, когда написал тестовую программу на Delphi для примера Drive ype2 (этот пример описан ниже, в разделе «Глобальный перехват методом тотального локального перехвата», он перехватывает функцию Ge Drive ypeA во всех приложениях с использованием описываемого метода). Тест, написанный на Visual C , работал прекрасно – функция Ge Drive ypeA перехватывалась. А вот программа на Delphi всё равно для всех перехватываемых мной дисков возвращала реальные значения. Я посмотрел таблицу импорта тестовой программы при помощи утилиты DUMPBI и обнаружил, что компилятор Delphi не поместил все импортируемые функции из ker el32.dll в один список, а разбил их на 3 части, причём Ge Drive ypeA оказалась в третьей. Поэтому функция ReplaceIA E ryI O eMod Джеффри Рихтера, просмотрев все функции из первого списка Ker el32.dll, не нашла функции Ge Drive ypeA, хотя она и импортировалась модулем Drive ype es .exe. Я исправил эту функцию таким образом, чтобы она проверяла всю таблицу импорта и перебирала все списки с функциями из ker el32.dll (как оказалось, их может быть несколько). В описании формата РЕ-файла нигде не оговаривается, что каждый модуль, из которого импортируются функции, должен встречаться в секции импорта только один раз, и, видимо, некоторые компиляторы этим пользуются. При реализации данного метода следует учитывать, что вызовы из DllMai библиотеки, в которой находится перехватываемая функция, перехватить не удастся.

Однако часто возникает ситуация, когда одновременно используются СОМ и API-функции Win32, что не дает возможности применить эту технику. Рассмотрим следующий фрагмент кода, читающий строку из элемента редактирования и преобразующий ее в IID: HRESULT IIDFromHWND(HWND hwnd, IID& riid) { TCHAR szEditText[1024]; // call a TCHAR-based Win32 routine // вызываем TCHAR-процедуру Win32 GetWindowText(hwnd, szEditText, 1024); // call an OLECHAR-based СОМ routine // вызываем OLECHAR-процедуру СОМ return IIDFromString(szEditText, &riid); } Допуская, что этот код скомпилирован с указанным символом С-препроцессора UNICODE; он работает безупречно, так как TCHAR и OLECHAR являются просто псевдонимами wchar_t и никакого преобразования не требуется. Если же функция скомпилирована с версией Win32 API, не поддерживающей Unicode, то TCHAR является псевдонимом для char, и первый параметр для IIDFromString имеет неправильный тип. Чтобы решить эту проблему, нужно провести условную компиляцию: HRESULT IIDFromHWND(HWND hwnd, IID& riid) { TCHAR szEditText[1024]; GetWindowText(hwnd, szEditText, 1024); #ifdef UNICODE return IIDFromString(szEditText, &riid); #else OLECHAR wszEditText[l024]; ustrncpy(wszEditText, szEditText, 1024); return IIDFromString(wszEditText, &riid); #endif } Хотя этот фрагмент и генерирует оптимальный код, очень утомительно применять эту технику всякий раз, когда символьный параметр имеет неверный тип

1. Перехват методов COM интерфейсов

2. Метод конечных элементов

3. Изучение миксомицетов среднего Урала, выращенных методом влажных камер

4. Методы исследования в цитологии

5. МЕТОДЫ ИЗУЧЕНИЯ ЭВОЛЮЦИИ ЧЕЛОВЕКА

6. Методологическое значение сравнительного метода в зоологических исследованиях
7. Метод радиоавтографии в биологии
8. Виды стихийных бедствий и методы борьбы с ними

9. Схема вызова всех служб города Кургана

10. Методы и модели демографических процессов

11. Гидрохимический, атмохический и биогеохимический методы поисков

12. Добыча золота методами геотехнологии

13. Государственное регулирование экономики: формы и методы

14. Сущность, методы и формы государственного регулирования внешнеэкономической деятельности Российской Федерации

15. Нелегальная миграция в России и методы борьбы с ней

16. Предмет и метод гражданского права

Настольная игра "Битва полов", артикул 7747.
Предлагаем вам принять участие в извечном противостоянии мужчин и женщин. В настоящей битве сойдутся мужское мышление и женская логика,
568 руб
Раздел: Игры для взрослых (18+)
Рамочка на 12 фотографий "Первый год" (белая).
Рамочка с отпечатком - это особый подход к созданию очаровательного подарка на память для этого особого периода жизни, с картинкой и
2503 руб
Раздел: Мультирамки
Доска магнитно-маркерная "Premium", 450x600 мм.
Доска магнитно-маркерная "Premium". Увеличенная толщина магнитно-маркерной поверхности, ДВП основа. Полочка для аксессуаров и
940 руб
Раздел: Доски магнитно-маркерные

17. Предмет, метод и система гражданского процессуального права /Украина/

18. Корпорация BBC. Формы и методы государственного контроля вещания

19. Формы и методы выхода предприятий на внешний рынок

20. Финансовый контроль: формы, методы, органы

21. Эффективные методы изучения иностранных языков

22. Метод действенного анализа в режиссуре театра, кино и телевидения
23. Соцреализм как метод искусства
24. Дидактические возможности отдельных методов обучения на уроках литературы в старших классах

25. Методы изучения музыкальных произведений крупной формы в старших классах общеобразовательной школы

26. Цивилизационные методы в изучении истории

27. Методы компьютерной обработки статистических данных

28. Решение транспортной задачи методом потенциалов

29. Решение дифференциальных уравнений 1 порядка методом Эйлера

30. Оценка методов и средств обеспечения безошибочности передачи данных в сетях

31. Обзор возможных методов защиты

32. Метод деформируемого многогранника

Набор цветных карандашей "Noris Club", акварельные, 36 цветов, с кистью.
Детские цветные акварельные карандаши в картонной коробке. Серия «Noris Club» предназначена для использования детьми. Специальное защитное
859 руб
Раздел: Акварельные
Мозаика.
50 фишек. Размер поля: 24 х 35 см. Размер фишки: 40 х 45 х 14 мм. Материал: полипропилен.
450 руб
Раздел: Пластмассовая
Блюдо для блинов "Спелая смородина", 24,5x28x3 см.
Блюдо для блинов. Размер: 24,5x28x3 см. Материал: фарфор.
619 руб
Раздел: Прочее

33. Сравнение эффективности методов сортировки массивов: Метод прямого выбора и метод сортировки с помощью дерева

34. Методы прогнозирования основанные на нейронных сетях

35. Модифицированный симплекс-метод с мультипликативным представлением матриц

36. Методы приобретения знаний в интеллектуальных системах

37. Резидентный обработчик клавиатуры (перехват нажатий клавиш и запись в файл)

38. Лекции по высокоуровневым методам информатики и программированию
39. Метод Симпсона на компьютере
40. Полином Гира (экстраполяция методом Гира)

41. Компьютерные вирусы, типы вирусов, методы борьбы с вирусами

42. Анализ криптостойкости методов защиты информации в операционных системах Microsoft Window 9x

43. Парольные методы защиты информации в компьютерных системах от несанкционированного доступа

44. Лабораторная работа №7 по "Основам теории систем" (Решение задачи коммивояжера методом ветвей и границ)

45. Лабораторная работа №6 по "Основам теории систем" (Решение задачи о ранце методом ветвей и границ)

46. Решение задач - методы спуска

47. Решение смешанной задачи для уравнения гиперболического типа методом сеток

48. Решение систем дифференциальных уравнений методом Рунге-Куты 4 порядка

Кольцедержатель "Дерево с оленем", малый, белый.
Стильный аксессуар в виде фигурки оленя с ветвящимися рогами – держатель для украшений, - выполнен из прочного пластика двух классических
375 руб
Раздел: Подставки для украшений
Детский велосипед Jaguar трехколесный (цвет: розовый).
Детский трехколесный велосипед для малышей от 1 года до 3 лет. Трехколесный велосипед колясочного типа с музыкально-световой кнопкой.
1800 руб
Раздел: Трехколесные
Горшок дорожный и насадка на унитаз "HandyPotty" (лайм).
Дорожный горшок и насадка на унитаз HandyPotty помогут сделать путешествие еще комфортнее для малыша. Комбинированная модель сочетает в
1128 руб
Раздел: Сиденья

49. Решение систем линейных алгебраических уравнений методом Гаусса и Зейделя

50. Использование численных методов для решения дифуpов (2-го порядка) (, демонстрация применения интерполяции в среде MATHCAD-а)

51. Вычисление определенного интеграла методами трапеций и средних прямоугольников

52. Решение нелинейного уравнения методом касательных

53. Методы корреляционного и регрессионного анализа в экономических исследованиях

54. Современные криптографические методы
55. Математические методы в организации транспортного процесса
56. Метод последовательных уступок (Теория принятия решений)

57. Построение графика функции различными методами (самостоятельная работа учащихся)

58. Краткая методичка по логике

59. Методы решения систем линейных неравенств

60. Вычисление двойных интегралов методом ячеек

61. Методы обучения математике в 10 -11 класах

62. Решение задач линейной оптимизации симплекс – методом

63. Приближённые методы решения алгебраического уравнения

64. Решение дифференциальных уравнений 1 порядка методом Эйлера

Папка-сумка "Тролли", А4.
Папка текстильная формованная из вспененного полимера. Формат: А4. Лицевая сторона с выдавленными элементами 3D.
481 руб
Раздел: Папки-портфели, папки с наполнением
Фигурка декоративная "Колокольчик", 6x10 см.
Осторожно, хрупкое изделие! Материал: металл, австрийские кристаллы. Размер: 6x10 см. Товар не подлежит обязательной сертификации.
358 руб
Раздел: Миниатюры
Батут.
Каркас: сталь. Полотно: дюралевая нейлоновая сетка. Окантовка: прочный защитный материал. Количество ножек: 6 шт. Допустимая нагрузка:
3350 руб
Раздел: Батуты, надувные центры

65. Методы расчета электрических полей

66. Метод Алексея Юрьевича Виноградова для решения краевых задач

67. Решение задач на построение сечений в многогранниках методом следов

68. Новый метод «дополнительных краевых условий» Алексея Юрьевича Виноградова для краевых задач

69. Лазерные методы диагностики. Термография

70. Объективные и субъективные признаки усталости, утомления и переутомления, их причины, методы устранения и профилактика
71. Дополнительные методы обследования легочных больных. Основные синдромы при заболеваниях легких
72. Хламидиоз. Методы определения/диагностики

73. Предмет, метод, содержание cудебной медицины

74. Методы оценки кровопотери в акушерстве

75. Метод Фолля

76. Некоторые методы лечения переломов длинных трубчатых костей

77. Ретроспективный cанитарно – эпидемиологический анализ по определению связи между заболеваемостью населения ОКИ и факторами внешней среды по эпидемиологически значимым объектам (с использованием статистического метода ранговой корреляции ) за 2000 –2002 г

78. Сравнительная характеристика методов лабораторной диагностики трихомоноза

79. Продвинутые методы Ганемана. LМ-потенции: теория и практика

80. Воспалительные заболевания женских половых органов неспецифической этиологии, клиника, диагностика, методы лечения

Ватман "Kroyter Проф", А1, 100 листов.
Нарезанные листы ватмана для черчения. Формат: А1 (600Х840 мм). Плотность: 200 г/м2. В наборе: 100 листов.
2739 руб
Раздел: Прочее
Именная кружка с надписью "Любимая мама".
Предлагаем вашему вниманию готовое решения для подарка по любому поводу – именная кружка. Кружка изготовлена из керамики, в нежной
434 руб
Раздел: Кружки
Копилка-раскраска "Лисенок".
Набор для творчества. Копилка-раскраска. Пластиковая копилка легкая, приятная на ощупь, не бьется при падении и ее легко раскрашивать. В
324 руб
Раздел: Копилки

81. Предмет, понятие, метод и система криминологии

82. Характеристики методов расследования преступлений, связанных с квалифицированным вымогательством

83. Понятие и основные методы исследовательской фотографии

84. Загрязнение водных ресурсов и методы очистки

85. Методы очистки промышленных газовых выбросов

86. Мониторинг загрязнения водной среды реки Херота с помощью методов биоиндикации
87. Экология. Предмет и методы
88. Визуальные методы оценки цикличности в ходе метеоэлементов

89. Изучение экологического состояния территории Большеземельской тундры с использованием методов дистанционного мониторинга

90. Игровые методы в логопедической практике

91. Компьютерные технологии как фактор эволюции форм и методов обучения

92. Методы изучения музыкальных произведений крупной формы в старших классах общеобразовательной школы

93. Наркомания школьников, методы профилактики

94. Средства и методы педагогического воздействия на личность

95. Эффективные методы изучения иностранных языков

96. Использование различных методов обучения с целью активизации познавательной деятельности на уроках технологии

Защита-органайзер для планшета (отделение для планшета + 3 кармана), 60х45 см.
Защита-органайзер для планшета (отделение для планшета + 3 кармана). Предназначена для защиты обивки сидений и для удобного хранения
503 руб
Раздел: Прочее
Подарочное махровое полотенце "23 февраля. Звезда".
Подарочное махровое полотенце. Цвет полотенца и цвет вышивки - в ассортименте! Оригинальная тематическая вышивка на полезном в хозяйстве
316 руб
Раздел: Средние, ширина 31-40 см
Экологичный стиральный порошок "Garden", без отдушек, 1350 грамм.
Благодаря входящим в состав компонентам на растительной основе средство мягко отстирывает и освежает бельё из всех видов тканей (в том
399 руб
Раздел: Стиральные порошки

97. Игровые методы обучения

98. Методы воспитания

99. Методы изучения развитости личности ученика


Поиск Рефератов на сайте za4eti.ru Вы студент, и у Вас нет времени на выполнение письменных работ (рефератов, курсовых и дипломов)? Мы сможем Вам в этом помочь. Возможно, Вам подойдет что-то из ПЕРЕЧНЯ ПРЕДМЕТОВ И ДИСЦИПЛИН, ПО КОТОРЫМ ВЫПОЛНЯЮТСЯ РЕФЕРАТЫ, КУРСОВЫЕ И ДИПЛОМНЫЕ РАБОТЫ. 
Вы можете поискать нужную Вам работу в КОЛЛЕКЦИИ ГОТОВЫХ РЕФЕРАТОВ, КУРСОВЫХ И ДИПЛОМНЫХ РАБОТ, выполненных преподавателями московских ВУЗов за период более чем 10-летней работы. Эти работы Вы можете бесплатно СКАЧАТЬ.