- •Внимание!
- •Об авторах
- •О техническом редакторе
- •О соавторах
- •Предисловие
- •Благодарности
- •Отдельное спасибо
- •Введение
- •Необходимая квалификация
- •Изучение на примерах
- •Структура книги
- •Глава 0. Анализ вредоносных программ для начинающих
- •Цель анализа вредоносных программ
- •Методики анализа вредоносного ПО
- •Общие правила анализа вредоносного ПО
- •Глава 1. Основные статические методики
- •Сканирование антивирусом: первый шаг
- •Хеширование: отпечатки пальцев злоумышленника
- •Поиск строк
- •Упакованное и обфусцированное вредоносное ПО
- •Формат переносимых исполняемых файлов
- •Компонуемые библиотеки и функции
- •Статический анализ на практике
- •Заголовки и разделы PE-файла
- •Итоги главы
- •Глава 2. Анализ вредоносных программ в виртуальных машинах
- •Структура виртуальной машины
- •Запуск виртуальной машины для анализа вредоносного ПО
- •Использование виртуальной машины для анализа безопасности
- •Риски при использовании VMware для анализа безопасности
- •Запись/воспроизведение работы компьютера
- •Итоги главы
- •Глава 3. Основы динамического анализа
- •Песочницы: решение на скорую руку
- •Запуск вредоносных программ
- •Мониторинг с помощью Process Monitor
- •Сравнение снимков реестра с помощью Regshot
- •Симуляция сети
- •Перехват пакетов с помощью Wireshark
- •Использование INetSim
- •Применение основных инструментов для динамического анализа
- •Итоги главы
- •Уровни абстракции
- •Архитектура x86
- •Итоги главы
- •Глава 5. IDA Pro
- •Загрузка исполняемого файла
- •Интерфейс IDA Pro
- •Использование перекрестных ссылок
- •Анализ функций
- •Схематическое представление
- •Повышение эффективности дизассемблирования
- •Плагины к IDA Pro
- •Итоги главы
- •Глава 6. Распознавание конструкций языка C в ассемблере
- •Переменные: локальные и глобальные
- •Дизассемблирование арифметических операций
- •Распознавание выражений if
- •Распознавание циклов
- •Соглашения, касающиеся вызова функций
- •Анализ выражений switch
- •Дизассемблирование массивов
- •Распознавание структур
- •Анализ обхода связного списка
- •Итоги главы
- •Глава 7. Анализ вредоносных программ для Windows
- •Windows API
- •Реестр Windows
- •API для работы с сетью
- •Отслеживание запущенной вредоносной программы
- •Сравнение режимов ядра и пользователя
- •Native API
- •Итоги главы
- •Глава 8. Отладка
- •Сравнение отладки на уровне исходного и дизассемблированного кода
- •Отладка на уровне ядра и пользователя
- •Использование отладчика
- •Исключения
- •Управление выполнением с помощью отладчика
- •Изменение хода выполнения программы на практике
- •Итоги главы
- •Глава 9. OllyDbg
- •Загрузка вредоносного ПО
- •Пользовательский интерфейс OllyDbg
- •Карта памяти
- •Просмотр потоков и стеков
- •Выполнение кода
- •Точки останова
- •Трассировка
- •Обработка исключений
- •Редактирование кода
- •Анализ кода командной оболочки
- •Вспомогательные возможности
- •Подключаемые модули
- •Отладка с использованием скриптов
- •Итоги главы
- •Драйверы и код ядра
- •Подготовка к отладке ядра
- •Использование WinDbg
- •Отладочные символы Microsoft
- •Отладка ядра на практике
- •Руткиты
- •Загрузка драйверов
- •Итоги главы
- •Глава 11. Поведение вредоносных программ
- •Программы для загрузки и запуска ПО
- •Бэкдоры
- •Похищение учетных данных
- •Механизм постоянного присутствия
- •Повышение привилегий
- •Заметая следы: руткиты, работающие в пользовательском режиме
- •Итоги главы
- •Глава 12. Скрытый запуск вредоносного ПО
- •Загрузчики
- •Внедрение в процесс
- •Подмена процесса
- •Внедрение перехватчиков
- •Detours
- •Внедрение асинхронных процедур
- •Итоги главы
- •Глава 13. Кодирование данных
- •Простые шифры
- •Распространенные криптографические алгоритмы
- •Нестандартное кодирование
- •Декодирование
- •Итоги главы
- •Глава 14. Сетевые сигнатуры, нацеленные на вредоносное ПО
- •Сетевые контрмеры
- •Безопасное расследование вредоносной деятельности в Интернете
- •Контрмеры, основанные на сетевом трафике
- •Углубленный анализ
- •Сочетание динамических и статических методик анализа
- •Понимание психологии злоумышленника
- •Итоги главы
- •Искажение алгоритмов дизассемблирования
- •Срыв анализа слоя стека
- •Итоги главы
- •Глава 16. Антиотладка
- •Обнаружение отладчика в Windows
- •Распознавание поведения отладчика
- •Искажение работы отладчика
- •Уязвимости отладчиков
- •Итоги главы
- •Глава 17. Методы противодействия виртуальным машинам
- •Признаки присутствия VMware
- •Уязвимые инструкции
- •Изменение настроек
- •Побег из виртуальной машины
- •Итоги главы
- •Глава 18. Упаковщики и распаковка
- •Анатомия упаковщика
- •Распознавание упакованных программ
- •Способы распаковки
- •Автоматизированная распаковка
- •Ручная распаковка
- •Советы и приемы для работы с распространенными упаковщиками
- •Анализ без полной распаковки
- •Итоги главы
- •Глава 19. Анализ кода командной оболочки
- •Загрузка кода командной оболочки для анализа
- •Позиционно-независимый код
- •Определение адреса выполнения
- •Поиск символов вручную
- •Окончательная версия программы Hello World
- •Кодировки кода командной оболочки
- •NOP-цепочки
- •Поиск кода командной оболочки
- •Итоги главы
- •Глава 20. Анализ кода на C++
- •Объектно-ориентированное программирование
- •Обычные и виртуальные функции
- •Создание и уничтожение объектов
- •Итоги главы
- •Какой смысл в 64-битном вредоносном ПО?
- •Особенности архитектуры x64
- •Признаки вредоносного кода на платформе x64
- •Итоги главы
- •Приложения
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
164 Часть II • Продвинутый статический анализ |
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
с помощью пути \\.\PhysicalDisk1 программа может обратиться непосредственно к диску PhysicalDisk1, минуя его файловую систему, что позволяет вносить изменения, которые были бы невозможны при использовании обычного API. Такой подход дает вредоносу возможность считывать и записывать данные в пока еще не выделенных секторах без создания или открытия файлов, что позволяет избежать обнаружения со стороны антивирусного и защитного ПО.
Так, червь Witty, замеченный несколько лет назад, обращался к \Device\ PhysicalDisk1 через пространство имен NT, чтобы повредить файловую систему жертвы. Он открывал это устройство и записывал в него отрезки данных случайно выбранного размера, чем рано или поздно выводил из строя операционную систему и делал невозможной ее загрузку. Этот червь просуществовал недолго, поскольку зараженные компьютеры часто давали сбой до того, как он успевал распространиться. Однако пострадавшим системам был причинен немалый вред.
Еще одним примером может служить злонамеренное использование устройства \Device\PhysicalMemory для прямого доступа к оперативной памяти, что позволяет программам в пользовательском пространстве производить запись в пространство ядра. С помощью этой методики вредоносы модифицировали ядро и прятали программы в пространстве пользователя.
ПРИМЕЧАНИЕ
Начиная с Windows 2003 SP1 устройство \Device\PhysicalMemory недоступно из пользовательского пространства. Но вы по-прежнему можете обращаться к нему из пространства ядра, извлекая такую низкоуровневую информацию, как код и конфигурация BIOS.
Альтернативные потоки данных
Альтернативные потоки данных (alternate data streams, ADS) — это технология
врамках NTFS, которая позволяет записывать в файл дополнительные данные, фактически добавляя один файл в другой. Эта новая информация не выводится
влистинге каталога или при просмотре содержимого файла — ее можно увидеть только при доступе к потоку.
Данные в ADS подчиняются соглашению об именовании вида обычныйФайл.txt:По ток:$DATA, что позволяет программе выполнять чтение и запись в заданном потоке. Авторы вредоносного ПО любят эту технологию, так как она позволяет прятать данные.
Реестр Windows
Реестр Windows используется для хранения системной и программной конфигурации, такой как настройки и параметры. Как и файловая система, это хороший источник локальных индикаторов, который может многое поведать о возможностях вредоносного ПО.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
Глава 7. Анализ вредоносных программ для Windows 165 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
В ранних версиях Windows для хранения конфигурационной информации использовались файлы .ini. Реестр создавался как иерархическая база данных, которая должна была улучшить производительность. Его значимость росла по мере того, как все больше приложений начинали хранить в нем свою информацию. Практически любая конфигурация хранится в реестре, включая сетевые параметры, настройки драйверов, сведения о загрузке, учетные записи и т. д.
Вредоносные программы часто используют реестр для записи постоянной информации или конфигурационных данных. Они добавляют туда ключи, которые позволяют им автоматически запускаться при включении компьютера. Реестр настолько большой, что у вредоноса есть множество способов сохранить в нем свои данные.
Но прежде, чем углубляться в эту тему, рассмотрим несколько важных терминов, которые необходимо понимать при чтении официальной документации.
Корневой ключ. Реестр состоит из пяти разделов высшего уровня, которые называются корневыми ключами. Иногда их обозначают как HKEY, в англоязычной литературе также используется термин hive (улей). Каждый корневой ключ имеет определенное назначение, о чем мы поговорим чуть ниже.
Дочерний ключ. Это как подкаталог внутри каталога.
Ключ. Это папка, которая может содержать другие папки или значения. В эту категорию входят как корневые, так и дочерние ключи.
Параметр. Упорядоченная пара с именем и значением.
Значение или данные. Данные, которые хранятся в параметре реестра.
Корневые ключи реестра
Реестр разделен на пять корневых ключей.
HKEY_LOCAL_MACHINE (HKLM). Хранит глобальные настройки локальной системы.HKEY_CURRENT_USER (HKCU). Хранит настройки текущего пользователя.HKEY_CLASSES_ROOT. Хранит типы информации.
HKEY_CURRENT_CONFIG. Хранит настройки текущей аппаратной конфигурации, а точнее разницу между текущей и стандартной конфигурациями.
HKEY_USERS. Определяет настройки для пользователя по умолчанию, новых и текущих пользователей.
Чаще других используются ключи HKLM и HKCU (обычно обозначаются аббревиа турами).
Некоторые ключи на самом деле являются виртуальными и лишь ссылаются на имеющуюся информацию. Например, ключ HKEY_CURRENT_USER в действительности хранится внутри HKEY_USERS\SID, где SID — идентификатор безопасности текущего пользователя. Еще один популярный дочерний ключ, HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Windows\CurrentVersion\Run, содержит список исполняемых файлов,
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
w |
|
|
to |
|
|
166 Часть II • Продвинутый статический анализ |
||||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
которые автоматически запускаются при входе пользователя в систему. Корневым здесь является ключ HKEY_LOCAL_MACHINE, который хранит дочерние ключи SOFTWARE,
Microsoft, Windows, CurrentVersion и Run.
Regedit
На рис. 7.1 показан встроенный в Windows редактор реестра Registry Editor (Regedit). На левой панели выводятся открытые дочерние ключи. Справа отображаются соответствующие параметры. Каждый параметр имеет имя, тип и значение. Полный путь к текущему дочернему ключу выводится в нижней части окна.
Программы, которые стартуют автоматически
Запись параметров в дочерний ключ Run (выделенный на рис. 7.1) — это широко известный способ автоматически запускать программное обеспечение. И хотя этот подход не очень скрытный, вредоносные программы часто используют его, чтобы стартовать вместе с системой.
Microsoft предоставляет бесплатную утилиту Autoruns, которая перечисляет код, запускаемый при загрузке системы. Это касается исполняемых файлов, динамических библиотек, загружаемых в Internet Explorer, и других программ, а также драйверов, которые выполняются ядром. Autoruns проверяет примерно 25–30 мест в реестре, которые предназначены для автоматического запуска кода, но этот список может оказаться неполным.
Рис. 7.1. Утилита Regedit
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
Глава 7. Анализ вредоносных программ для Windows 167 |
to |
|
|
|
|
|
||||
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Распространенные функции для работы с реестром
Вредоносное ПО часто использует функции Windows API, чтобы модифицировать реестр и запускаться автоматически вместе с системой. Ниже проведены самые популярные функции для работы с реестром.
RegOpenKeyEx. Открывает реестр для записи и чтения. Существуют функции, которые позволяют проделывать эти операции без предварительного открытия реестра, но большинство программ все рано используют RegOpenKeyEx.
RegSetValueEx. Добавляет в реестр новый параметр и устанавливает для него значение.
RegGetValue. Возвращает содержимое параметра реестра.
Встретив эти функции во вредоносной программе, вы должны будете найти ключи реестра, к которым они обращаются.
Помимо ключей для автоматического запуска существует множество значений реестра, которые играют важную роль в безопасности и конфигурации системы. Их слишком много, чтобы перечислять каждый из них здесь (или где-либо еще). Чтобы найти ключи, к которым обращается вредонос, придется прибегнуть к поисковым службам, например к Google.
Практический анализ кода, работающего с реестром
В листинге 7.1 показан настоящий вредоносный код, который открывает в реестре ключ Run и добавляет в него значение, чтобы запускаться при каждой загрузке Windows. Функция RegSetValueEx принимает шесть аргументов и либо редактирует существующий параметр реестра, либо создает новый, если такового еще нет.
ПРИМЕЧАНИЕ
При поиске документации для таких функций, как RegOpenKeyEx иRegSetValuEx, не забудьте убрать в конце букву W или A.
Листинг 7.1. Код, изменяющий настройки реестра
0040286F |
push |
2 |
; samDesired |
|
00402871 |
push |
eax |
; ulOptions |
|
00402872 |
push |
offset SubKey |
; "Software\\Microsoft\\Windows\\ |
|
CurrentVersion\\Run" |
|
|
|
|
00402877 |
push |
HKEY_LOCAL_MACHINE |
; hKey |
|
0040287C |
call |
esi ; RegOpenKeyExW |
|
|
0040287E |
test |
eax, eax |
|
|
00402880 |
jnz |
short loc_4028C5 |
|
|
00402882 |
|
|
|
|
00402882 |
loc_402882: |
|
|
|
00402882 |
lea |
ecx, [esp+424h+Data] |
|
|
00402886 |
push |
ecx |
; lpString |
|
00402887 |
mov |
bl, 1 |
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
||
P |
|
|
|
|
|
NOW! |
o |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|
|
|||
w |
|
|
to |
|
|
168 |
Часть II • |
Продвинутый статический анализ |
|||||
w Click |
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
|
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
00402889 |
call |
ds:lstrlenW |
|
||
|
|
|
|
|
|
|
|
0040288F |
lea |
edx, [eax+eax+2] |
|
||
|
|
|
|
|
|
|
|
00402893 |
push |
edx |
; cbData |
||
|
|
|
|
|
|
|
|
00402894 |
mov |
edx, [esp+428h+hKey] |
|||
|
|
|
|
|
|
|
|
00402898 |
lea |
eax, [esp+428h+Data] |
|||
|
|
|
|
|
|
|
|
0040289C |
push |
eax |
; lpData |
||
|
|
|
|
|
|
|
|
0040289D |
push |
1 |
; dwType |
||
|
|
|
|
|
|
|
|
0040289F |
push |
0 |
; Reserved |
||
|
|
|
|
|
|
|
|
004028A1 |
lea |
ecx, [esp+434h+ValueName] |
|||
|
|
|
|
|
|
|
|
004028A8 |
push |
ecx |
; lpValueName |
||
|
|
|
|
|
|
|
|
004028A9 |
push |
edx |
; hKey |
||
|
|
|
|
|
|
|
|
004028AA |
call |
ds:RegSetValueExW |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
В листинге 7.1 в большинстве строчек после точки с запятой указаны комментарии. Это в основном имена аргументов, которые добавляются в стек. Они были взяты из официальной документации для соответствующих функций. Например, в первых четырех строках содержатся комментарии samDesired, ulOptions, "Software\\ Microsoft\\Windows\\CurrentVersion\\Run" и hKey, которые дают нам представление о добавляемых значениях. Значение samDesired указывает на тип запрашиваемого доступа, поле ulOptions является беззнаковым длинным целым числом, которое представляет параметры вызова (не забывайте о венгерской нотации), а hKey — это дескриптор корневого ключа, к которому обращается функция.
Код вызывает функцию RegOpenKeyEx с аргументами, необходимыми для открытия дескриптора ключа HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run. Имя и значение параметра хранятся в стеке в качестве аргументов функции — здесь они помечены с помощью IDA Pro. Вызов lstrlenW нужен, чтобы получить размер данных, которые передаются в виде аргумента функции RegSetValueEx .
Написание скриптов для реестра с помощью файлов .reg
Файлы с расширением .reg содержат данные реестра в удобочитаемом виде. При двойном щелчке на таком файле его содержимое автоматически объединяется с информацией в реестре — как будто это скрипт, который модифицирует реестр. Как вы можете догадаться, вредоносное ПО тоже иногда использует файлы .reg, хотя предпочтение обычно отдается непосредственному редактированию программным способом.
Листинг 7.2. Пример файла .reg
Windows Registry Editor Version 5.00
[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"MaliciousValue"="C:\Windows\evil.exe"
В первой строке листинга 7.2 указана версия редактора реестра (5.00 в данном случае обозначает Windows XP). Ключ, который нужно отредактировать, [HKLM\ SOFTWARE\Microsoft\Windows\CurrentVersion\Run], находится внутри квадратных