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

 

 

 

 

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

 

 

Глава 5. IDA Pro  129

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

можно обнаружить код командной оболочки в виде простых байтов — нажмите в этом месте C. Код будет дизассемблирован, и вы увидите, что по адресу 0x97 он содержит цикл декодирования на основе XOR.

При необходимости набор байтов можно похожим образом превратить в данные или строки формата ASCII, воспользовавшись соответственно клавишами D или A.

Плагины к IDA Pro

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

Мы познакомим вас с двумя наиболее популярными средствами скриптования на основе IDC и Python. Как видно на рис. 5.12, эти скрипты можно легко запускать в виде файлов, используя пункт меню File Script File (Файл Файл скрипта), или как отдельные команды с помощью пунктов File IDC Command (Файл Команда IDC) или File Python Command

(Файл Команда Python).

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

Рис. 5.12. Варианты загрузки IDC-

и Python-скриптов

Таблица 5.4. Ручное дизассемблирование кода командной оболочки в документе paycuts.pdf

Файл до нажатия клавиши C

Файл после нажатия клавиши C

 

 

 

 

 

 

 

 

 

 

00008384

db

28h

;

(

00008384

db

28h

;

(

00008385

db

0FCh

;

n

00008385

db

0FCh

;

n

00008386

db

10h

 

 

00008386

db

10h

 

 

00008387

db

90h

;

 

00008387

nop

 

 

 

00008388

db

90h

;

 

00008388

nop

 

 

 

00008389

db

8Bh

;

ï

00008389

mov

 

ebx, eax

0000838A db 0D8h ; +

0000838B

add

 

ebx, 28h ; '('

0000838B

db

83h

;

â

0000838E

add

 

dword ptr [ebx], 1Bh

0000838C

db

0C3h

;

+

00008391

mov

 

ebx, [ebx]

0000838D

db

28h

;

(

00008393

xor

 

ecx, ecx

0000838E

db

83h

;

 

00008395

 

 

 

 

0000838F

db

3

 

 

00008395 loc_8395:

; CODE XREF: seg000:000083A0j

 

 

 

 

 

 

 

 

 

 

Продолжение

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

130  Часть II  •  Продвинутый статический анализ

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Таблица 5.4 (продолжение)

 

 

 

 

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

 

 

 

 

Файл до нажатия клавиши C

Файл после нажатия клавиши C

 

 

 

 

 

 

 

 

 

00008390

db

1Bh

 

 

00008395

xor

 

byte ptr [ebx], 97h

00008391

db

8Bh

;

 

00008398

inc

 

ebx

00008392

db

1Bh

 

 

00008399

inc

 

ecx

00008393

db

33h

;

3

0000839A

cmp

 

ecx, 700h

00008394

db

0C9h

;

+

000083A0

jnz

 

short loc_8395

00008395

db

80h

;

 

000083A2

retn

 

7B1Ch

00008396

db

33h

;

3

000083A2 ; ----------------------------------000083A5 db 16h

00008397

db

97h

;

 

000083A6

db

7Bh

; {

00008398

db

43h

;

C

000083A7

db

8Fh

;

00008399

db

41h

;

A

 

 

 

 

0000839A

db

81h

;

 

 

 

 

 

0000839B

db

0F9h

;

 

 

 

 

0000839C

db

0

 

 

 

 

 

 

0000839D

db

7

 

 

 

 

 

 

0000839E

db

0

 

 

 

 

 

 

0000839F

db

0

 

 

 

 

 

 

000083A0

db

75h

;

u

 

 

 

 

000083A1

db

0F3h

;

=

 

 

 

 

000083A2 db 0C2h ; -

 

 

 

 

000083A3

db

1Ch

 

 

 

 

 

 

000083A4

db

7Bh

;

{

 

 

 

 

000083A5

db

16h

 

 

 

 

 

 

000083A6

db

7Bh

;

{

 

 

 

 

000083A7

db

8Fh

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Использование IDC-скриптов

IDA Pro поддерживает встроенный скриптовый язык, известный как IDC, который возник еще до широкого распространения скриптовых языков Python и Ruby. Подкаталог IDC внутри установочного каталога IDA содержит несколько демонстрационных IDC-скриптов, которые анализируют дизассемблированный текст. Они вам помогут, если вы решите изучить этот язык.

IDC-скрипт — это программа, полностью состоящая из статических функций. Аргументы можно указывать без типа, а для объявления локальных переменных используется ключевое слово auto.

IDC содержит множество встроенных функций. Вы можете ознакомиться с ними в справочных материалах IDA Pro или в файле idc.idc, который обычно подключается к скриптам, использующим эти встроенные функции.

 

 

 

 

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

 

 

Глава 5. IDA Pro  131

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

В главе 1 мы обсуждали утилиту PEiD и ее плагин Krypto ANALyzer (KANAL), который способен экспортировать IDC-скрипты. IDC-скрипт добавляет закладки и комментарии в базу данных IDA Pro для заданного двоичного файла, как показано в листинге 5.5.

Листинг 5.5. IDC-скрипт, сгенерированный плагином KANAL утилиты PEiD

#include <idc.idc> static main(void){

auto slotidx; slotidx = 1;

MarkPosition(0x00403108, 0, 0, 0, slotidx + 0, "RIJNDAEL [S] [char]"); MakeComm(PrevNotTail(0x00403109), "RIJNDAEL [S] [char]\nRIJNDAEL (AES):

SBOX (also used in other ciphers).");

MarkPosition(0x00403208, 0, 0, 0, slotidx + 1, "RIJNDAEL [S-inv] [char]"); MakeComm(PrevNotTail(0x00403209), "RIJNDAEL [S-inv] [char]\nRIJNDAEL (AES):

inverse SBOX (for decryption)");

}

Чтобы загрузить IDC-скрипт, выберите пункт меню File Script File (Файл Файл скрипта). После этого скрипт должен немедленно выполниться, а на панели инструментов появятся две кнопки: одна для редактирования скрипта, а другая — для его повторного запуска.

Использование IDAPython

Плагин IDAPython полностью интегрирован в текущую версию IDA Pro и позволяет применять мощные и удобные скрипты на языке Python в анализе двоичных файлов. IDAPython использует множество функций из пакета разработки IDA Pro, предоставляя более практичные средства скриптования, чем IDC. IDAPython имеет три модуля, которые обеспечивают доступ к IDA API (idaapi), интерфейсу IDC (idc) и вспомогательным функциям самого плагина (idautils).

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

В листинге 5.6 показан пример скрипта для IDAPython. Он предназначен для раскрашивания всех инструкций call в idb, чтобы аналитику было легче их распо­ знать. Например, ScreenEA является распространенной функцией, которая получает местоположение курсора.

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

SetColor.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

132  Часть II  •  Продвинутый статический анализ

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Листинг 5.6. Полезный скрипт на языке Python для раскрашивания всех вызовов

 

 

 

 

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

 

 

 

 

from idautils import * from idc import *

heads = Heads(SegStart(ScreenEA()), SegEnd(ScreenEA()))

functionCalls = []

for i in heads:

if GetMnem(i) == "call": functionCalls.append(i)

print "Number of calls found: %d" % (len(functionCalls))

for i in functionCalls:

SetColor(i, CIC_ITEM, 0xc7fdff)

Использование коммерческих плагинов

Приобретя достаточный опыт работы с IDA Pro, вам стоит подумать о покупке нескольких коммерческих плагинов, таких как Hex-Rays Decompiler и zynamics BinDiff. Hex-Rays Decompiler превращает результат дизассемблирования в псевдокод на языке C, понятный человеку. Чтение такого кода вместо ассемблера часто ускоряет анализ, делая вас ближе к оригинальным исходным текстам, которые написал автор вредоноса.

BinDiff от zynamics — это инструмент для сравнения двух баз данных IDA Pro. Он позволяет выявить различия между разными вариантами вредоносного программного обеспечения, включая новые функции и разницу между похожими функциями. Одной из возможностей данного плагина является создание рейтинга схожести при сравнении двух участков вредоноса. Более подробно эти инструменты будут описаны в приложении Б.

Итоги главы

В этой главе предлагается лишь поверхностное введение в IDA Pro. В дальнейшем мы будем использовать эту программу в наших лабораторных работах, демонстрируя интересные способы ее применения.

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

Мы также обсудили разные способы просмотра кода на ассемблере с применением перекрестных ссылок и схематических представлений, которые ускоряют процесс анализа.

 

 

 

 

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

 

 

Глава 5. IDA Pro  133

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

Лабораторная работа 5.1

Проанализируйте зараженный файл Lab05-01.dll с помощью IDA Pro. Цель данной лабораторной работы — дать вам поупражняться в работе с этой программой. Если у вас уже есть опыт использования IDA Pro, можете пропустить эти вопросы и сосредоточиться на обратном проектировании вредоносного ПО.

Вопросы

1.Каков адрес функции DllMain?

2.Используйте окно Imports (Импорт), чтобы пройти к функции gethostbyname. Где происходит импорт?

3.Сколько функций делают вызов gethostbyname?

4.Обратите внимание на вызов gethostbyname по адресу 0x10001757. Можете определить, какой DNS-запрос будет выполнен?

5.Сколько локальных переменных было распознано IDA Pro для ответвления по адресу 0x10001656?

6.Сколько параметров было распознано IDA Pro для ответвления по адресу 0x10001656?

7.Используйте окно Strings (Строки), чтобы найти в коде строку \cmd.exe /c. Где она находится?

8.Что происходит на отрезке кода, в котором используется строка \cmd.exe /c?

9.На том же участке, по адресу 0x100101C8, находится глобальная переменная dword_1008E5C4, которая участвует в выборе пути выполнения. Каким образом вредонос устанавливает dword_1008E5C4? Подсказка: используйте перекрестные ссылки этой переменной.

10. Через несколько сотен строк после начала ответвления 0x1000FF58 находятся инструкции memcmp, которые используются для сравнения строк. Что произойдет, если сравнение со строкой robotwork окажется успешным (когда memcmp возвращает 0)?

11. Что делает экспортная функция PSLIST?

12. Используйте схематический режим, чтобы представить перекрестные ссылки из sub_10004E79. Какие вызовы Windows API могут быть сделаны при входе в эту функцию? Если исходить лишь из этих вызовов, как бы вы ее переименовали?

13. Сколько функций Windows API вызывается непосредственно из DllMain, а сколько — на втором уровне вложенности?

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w

 

 

to

 

 

134  Часть 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

 

 

 

 

14. По адресу 0x10001358 находится вызов Sleep (функция Windows API, единственный параметр которой определяет, на сколько миллисекунд нужно остановиться). Пройдитесь вверх по коду и попытайтесь понять, как долго будет бездействовать программа, если этот участок выполнится.

15. По адресу 0x10001701 находится вызов socket. Какие три параметра он принимает?

16. Воспользуйтесь страницей MSDN для функции socket и библиотекой символьных констант в IDA Pro, чтобы придать этим параметрам больше смысла. Как они будут выглядеть после применения изменений?

17. Найдите в коде инструкцию in (опкод 0xED). В сочетании с волшебной строкой VMXh ее используют для обнаружения VMware. Относится ли это к данному вредоносу? Воспользуйтесь перекрестными ссылками на функцию, которая выполняет in, чтобы найти признаки обнаружения VMware.

18. Переместите курсор по адресу 0x1001D988. Что вы там видите?

19. Если у вас установлен плагин IDA Python (поставляется вместе с коммерческой версией IDA Pro), запустите скрипт Lab05-01.py, который содержится в архиве вредоносного ПО для этой книги (убедитесь в том, что курсор находится по адресу 0x1001D988). Что произойдет при выполнении скрипта?

20. Как превратить эти данные в единую строку в формате ASCII, не перемещая курсор?

21. Откройте скрипт в текстовом редакторе. Как он работает?