Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Майкл_Сикорски,_Эндрю_Хониг_Вскрытие_покажет!_Практический_анализ.pdf
Скачиваний:
18
Добавлен:
19.04.2024
Размер:
17.17 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

434  Часть V  •  Противодействие обратному проектированию

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

 

 

 

 

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

Ввиду такого богатого функционала Themida, как правило, генерирует довольно объемные исполняемые файлы. Кроме того, в отличие от большинства упаковщиков, код Themida работает на протяжении всего выполнения оригинальной программы.

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

Если автоматические инструменты не работают, отличным вариантом будет сбросить память процесса на диск с помощью ProcDump, без использования отладчика. ProcDump — это утилита от компании Microsoft для сохранения содержимого процессов в Windows. Она предназначена для работы в связке с отладчиками, но сама не занимается отладкой. Она хороша тем, что для сбрасывания памяти процесса на диск его не нужно останавливать или отлаживать, а это чрезвычайно полезно при работе с упаковщиками, предпринимающими продвинутые антиотладочные меры. ProcDump справится с задачей, даже если вы не можете отладить исполняемый файл. С помощью этой утилиты нельзя полностью восстановить исходную программу, но полученный результат позволяет искать строки и выполнять определенный анализ кода.

Анализ без полной распаковки

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

Самый простой сценарий выглядит так: распакованная программа не может запуститься, потому что вам не удалось полностью восстановить таблицу импорта и PE-заголовок. В этом случае вы по-прежнему можете проанализировать программу в IDA Pro, несмотря на то что ее нельзя выполнить. Сбросив память на диск, вы можете исследовать определенные ее участки, проходя по адресам и помечая их как код. Вы также можете воспользоваться утилитой Strings (см. главу 1), чтобы получить список функций импорта и другую полезную информацию.

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

Некоторые заглушки на самом деле не распаковывают всю программу целиком, прежде чем ее запускать. В память по очереди попадают лишь отдельные части

 

 

 

 

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

 

 

Глава 18. Упаковщики и распаковка  435

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

кода, которые нужно выполнить в тот или иной момент. Это замедляет работу исполняемого файла и повышает ресурсоемкость процесса, но существенно затрудняет распаковку программы аналитиком.

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

Упакованные DLL

С упаковкой DLL связаны дополнительные трудности, поэтому не все упаковщики поддерживают эту процедуру. Одной из таких трудностей является работа с экспортными вызовами. Таблица экспорта внутри DLL ссылается на адреса экспортируемых функций, которые упаковываются вместе с самой библиотекой. Упаковщик должен учитывать этот момент, чтобы библиотека работала корректно.

Распаковка DLL мало чем отличается от распаковки исполняемых файлов. Главное — помнить, что и те и другие содержат оригинальную точку входа. У любой библиотеки есть функция DllMain, которая вызывается при загрузке DLL; ОТВ ведет к ее началу. Начальный адрес, указанный в упакованной библиотеке, — это адрес заглушки-распаковщика, которая находится скорее внутри DllMain, чем в главной функции. OllyDbg умеет загружать и отлаживать DLL с помощью инструмента loadDll.exe. Проблема в том, что функция DllMain вызывается до остановки выполнения в OllyDbg. К моменту, когда OllyDbg остановится, заглушка уже успеет выполнить свою работу и нам будет очень сложно найти ОТВ.

Чтобы решить эту проблему, откройте PE-файл и найдите в разделе IMAGE_ FILE_HEADER поле Characteristics (Характеристики). В DLL бит 0x2000 внутри IMAGE_ FILE_HEADER равен 1. Если значение этого поля поменять на 0, то содержимое будет интерпретировано как исполняемый файл. OllyDbg откроет программу в качестве EXE-файла, и вы сможете применить все стратегии по распаковке, рассмотренные в этой главе. Когда найдете ОТВ, поменяйте бит обратно, чтобы программа опять воспринималась как DLL.

Итоги главы

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

снесколькими из них.

Вследующей главе мы поговорим о коде командной оболочки и способах рас-

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

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

436  Часть V  •  Противодействие обратному проектированию

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

 

 

 

 

Лабораторные работы

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

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

Lab18-01.exe до Lab18-05.exe.

 

 

 

 

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

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Часть VI Специальные темы