Перехват библиотечных функций в linux и bsd


         

в который будет записан сгенерированный


unsigned char prolog_1[]={0x55h,0x89,0xE5,0x83,0xEC};

unsigned char prolog_2[]={0x55,0x89,0xE5,0x57,0x56};

// буфер в который будет записан сгенерированный код

unsigned char buf_code[1024];

// определяем адрес перехватываемой функции

p = msym(base, fnc_name);

// если в начале перехватываемой функции расположен prolog_1

// внедряем в ее начало call на prepare_prolog_1

if (!memcmp(p,prolog_1,sizeof(prolog_1))

       call_r(base, fnc_name, "gets", 0);

// если в начале перехватываемой функции расположен prolog_2

// внедряем в ее начало call на prepare_prolog_2

if (!memcmp(p,prolog_1,sizeof(prolog_2))

       call_r(base,fnc_name,"gets", offset prapare_prolog_2-offset prepare_prolog_1);

Листинг 10 фрагмент программы-инсталлятора, анализирующей пролог перехватываемой функции и устанавливающей обработчик с соответствующим прологом

; // заносим номер "нашего" пролога в регистр EAX,

; // чтобы перехватчик знал какой ему пролог эмулировать

; // ВНИМАНИЕ! этот код засирает EAX

и не работает на fastcall-функциях,

; // для поддержки которых регистры трогать нельзя, а номер пролога класть на стек,

; // восстанавливая его перед передачей управления оригинальной функции

prepare_prolog_1:

       MOV EAX, 0x1

       JMP short do_begin

      

prepare_prolog_2:

       MOV EAX, 0x2

       JMP short do_begin

      

prepare_prolog_n:

       MOV EAX, 0x2

       JMP do_begin

do_begin:

       // ОСНОВНОЙ КОД ПЕРЕХВАТЧИКА

       // ДЕЛАЕМ ЧТО ЗАДУМАНО

       // [ESP+4]+5 содержит адрес вызванной функции

       // это поможет нам отличить перехваченные функции друг от друга

       …

       …

       …

       // ПЕРЕДАЧА УПРАВЛЕНИЯ ПЕРЕХВАЧЕННОЙ ФУНКЦИИ

       // С ЭМУЛЯЦИЕЙ ЕЕ "РОДНОГО" ПРОЛОГА

       DEC EAX

       JZ prolog_1

       DEC EAX

       JZ prolog_2

       …

      

prolog_1: ; // эмулируем выполнение пролога типа PUSH EBP/MOV EBP,ESP/SUB ESP,XXX


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





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