Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
15
Добавлен:
20.04.2024
Размер:
16.68 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

ìîé.o

С ней будет работать Windows! Базовая UNIX-машина в этом слу-

 

w

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

чае получает в свое распоряжение все системные ресурсы, и падения производительности уже не происходит, но появляются другие проблемы. Windows-приложения (например, игрушки) будут либо сильно тормозить, либо откажутся запускаться совсем, к тому же со всеми остальными типами устройств, например, интегрированной WLAN платой или видеокартой, Windows работать не сможет. А все потому, что VMWare представляет собой закрытый ящик, отгороженный от базовой операционной системы толстой стеной эмулятора. Вот если бы существовала возможность предоставить виртуальной машине полный доступ ко всему физическому оборудованию, вот тогда бы... Готовься! Именно такой способ мы и собираемся описать!

[два в одном] Начнем с простого, но до сих пор никем не решенного вопроса, то есть уже давно решенного, конечно, но совсем не так, как следует. Известно, что поддержка NTFS-разделов представляет огромную проблему. Драйвера, научившиеся писать на NTFS-раздел, появились совсем недавно, да и то лишь затем, чтобы покрасоваться на выставках. Для реальной работы они не годятся, потому что работают нестабильно и несут на своем горбу кучу ограничений. Сжатые файлы, транзакции и куча других вещей все еще не поддерживается. К тому же, NTFS не стоит на месте и хоть и медленно, но совершенствуется. Можно ли, хотя бы теоретически, написать 100% совместимый драйвер, «переваривающий» новые версии NTFS без участия программиста? Вопрос совсем не так наивен, каким кажется. Для чего нам корпеть над своим собственным драйвером, когда под рукой есть уже готовый — ntfs.sys. Если мы сумеем заставить его заработать под Linux, все проблемы решатся сами собой.

Да, на уровне ядра Linux/BSD отличается от Windows так же, как слонопотам от крокодила. Различий очень много, но что-то общее между ними все-таки есть. И Windows, и Linux, и BSD работают на x86-процессорах в защищенном режиме, используют страничную организацию виртуальной памяти и взаимодействуют с оборудованием в строго установленном порядке (через иерархию физических и виртуальных шин). Высокоуровневые драйвера такие, например, как ntfs.sys, вообще не касаются оборудования и содержат минимум системно-зависимого кода. Почему же тогда драйвер от одной системы не работает в другой? Главным образом, потому что интерфейс между осью и драйвером в каждом случае разли- чен и еще потому, что драйвер использует библиотеку функций, экспортируемых системой, и эти функции у каждой системы свои.

Перенести Windows-драйвер в Linux/BSD вполне реально! Для этого даже не потребуется его исходный код. Достаточно лишь написать тонкий и несложный «переходник» между драйвером и операционной системой, принимающий запросы и транслирующий их по всем правилами «этикета», а также перетащить библиотеку функций, необходимых

Windows NT изнутри

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

драйверу для работы. О, да! Для этого необходимо уметь программиро-

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

вать! Для простых смертных пользователей такой рецепт совершенно

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

не годится, но тут уже ничего не попишешь. Тем не менее перенести го-

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

мум, не потребуется проводить кропотливую работу по дизассемблиро-

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

ментации (которая либо совсем отсутствует, либо отдается только под

 

 

 

 

 

 

 

 

подписку о неразглашении, зачастую запрещающее открытое распрост-

 

 

 

 

 

 

 

 

ранение исходных текстов). К тому же, при выходе новых версий

 

 

 

 

 

 

 

 

Windows-драйвера, процедура обновления Linux/BSD порта существен-

 

 

 

 

 

 

 

 

но упрощается, просто скопировал поверх старого файла, и все. Но все

 

 

 

 

 

 

 

 

это теория. Перейдем к деталям.

 

 

 

 

 

 

 

 

 

 

Ядерная модель Windows NT и всех производных от нее операционных

 

 

 

 

 

 

 

 

систем (как Windows 2000, XP, 2003) достаточно проста. С «внешним»

 

 

 

 

 

 

 

 

миром ядро связывает Диспетчер Системных Сервисов, «подключен-

 

 

 

 

 

 

 

 

ный» к ntdll.dll. Эта библиотека находится уже за «скорлупой» ядра и ис-

 

 

 

 

 

 

 

 

полняется в пользовательском режиме. Диспетчер Системных Серви-

 

 

 

 

 

 

 

 

сов, реализованный в ntoskrnl.exe, опирается на Вызываемые Интер-

 

 

 

 

 

 

 

 

фейсы Ядра, часть которых реализована внутри самого ntoskrnl.exe, а

 

 

 

 

 

 

 

 

часть — во внешних драйверах, к числу которых принадлежит Диспет-

 

 

 

 

 

 

 

 

чер Электропитания. Определенный класс драйверов, называемый

 

 

 

 

 

 

 

 

Драйверами Устройств файловой системы, находится в своеобразной

 

 

 

 

 

 

 

 

«скорлупе» и взаимодействует с Диспетчером Системных Вызовов че-

 

 

 

 

 

 

 

 

рез Диспетчер ввода-вывода, реализованный в ntoskrnl.exe!

 

 

 

 

 

 

 

 

 

 

Ядро, на котором, как на фундаменте, держатся все вышеупомянутые

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

ций, сосредоточенных... Правильно! В ntoskrnl.exe! Ниже находится

 

 

 

 

 

 

 

 

только слой абстрагирования от оборудования, или сокращенно HAL

 

 

 

 

 

 

 

 

(Hardware Abstraction Level). Когда-то у Microsoft была идея разделить

 

 

 

 

 

 

 

 

ядро на системно-зависимую и системно-независимую части, чтобы уп-

 

 

 

 

 

 

 

 

ростить перенос Windows на другие платформы, но уже во времена NT

 

 

 

 

 

 

 

 

4.x все перемешалось, и большая часть системно-зависимых функций

 

 

 

 

 

 

 

 

попала в ntoskrnl.exe, а сегодня от HAL практически отказались. В нем

 

 

 

 

 

 

 

 

осталось небольшое количество действительно низкоуровневых функ-

 

 

 

 

 

 

 

 

ций, непосредственно взаимодействующих с оборудованием. В частнос-

 

 

 

 

 

 

 

 

ти, с портами и с DMA. Но в ядре Linux/BSD есть свои функции для ра-

 

 

 

 

 

 

 

 

боты с DMA, так что тащить за собой HAL нам совершенно необязатель-

 

 

 

 

 

 

 

 

но, тем более что драйвера взаимодействуют с DMA не напрямую, а че-

 

 

 

 

 

 

 

 

рез Plug-n-Pray менеджер, который находится в ntoskrnl.exe.

 

 

 

 

 

 

 

 

 

 

Таким образом, если заставить ntoskrnl.exe работать в среде чужерод-

 

 

 

 

 

 

 

 

ного ему Linux'а (или BSD), мы получим возможность запускать любые

 

 

 

 

 

 

 

 

NT-драйвера без какой-либо доработки их двоичного кода. Это не толь-

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

«авторских прав». Интеграция с Европой идет полным ходом, Третий

 

 

 

 

 

 

 

 

Рим (известный под логотипом USA) рвется в заснеженные леса Рос-

 

 

 

 

 

 

 

 

сии, всюду устанавливая свои порядки и зако-

 

 

]

 

 

 

 

ны. Любой обладатель лицензионной копии

 

 

109

 

 

 

 

 

 

 

 

 

 

 

 

Windows вправе вызывать готовый драйвер от-

 

 

 

 

 

 

 

 

куда угодно без каких бы то ни было разреше-

 

 

UNIXOID

 

 

 

 

ний и без выплаты дополнительного вознаг-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

раждения, но модифицировать двоичный код

 

 

 

 

 

 

 

 

ему позволят едва ли.

 

 

 

 

 

 

 

 

 

 

Но мы ведь и не собираемся ничего модифици-

 

 

 

 

 

 

 

 

ровать! Мы берем готовый ntoskrnl.exe и...

 

 

 

 

 

 

 

 

собственно, это все. Работы предстоит не так

 

 

 

 

 

 

 

 

уж и много. Достаточно спроецировать его по

 

 

 

 

 

 

 

 

адресам, указанным в заголовке PE-файла (а

 

 

 

 

 

 

 

 

ntoskrnl.exe — это обычный PE-Файл) и разоб-

 

 

 

 

 

 

 

 

раться с таблицей экспорта, используемой

 

 

 

 

 

 

 

 

драйверами. Короче говоря, мы должны реали-

 

 

 

 

 

 

 

 

зовать свой собственный PE-загрузчик и раз-

 

 

 

 

 

 

 

 

местить его в загружаемый модуль ядра или в

 

 

 

 

 

 

 

 

само ядро. Чтобы не мучиться, можно хлебнуть

 

 

 

 

 

 

 

 

вина и содрать готовый загрузчик оттуда. Нет,

 

 

 

 

 

 

 

 

это не спиртной напиток, это эмулятор

 

 

 

 

 

 

 

 

Windows'à — Wine (Windows Emulator).

 

 

 

 

 

 

 

 

 

 

Взаимодействие ntoskrnl.exe с Linux/BSD ядром

 

 

 

 

 

 

 

 

будет происходить через переходной код, эму-

 

 

 

 

 

 

 

 

лирующий HAL. Этот код мы будем должны на-

 

 

 

 

 

 

 

 

писать сами, однако ничего сложного в этом

 

 

 

 

 

 

 

 

нет, и объем работы предстоит минимальный,

 

 

>

 

 

 

 

поскольку HAL содержит немного функций, да

 

 

05

 

 

 

 

и те простые, как самовар. Сложнее подружить

 

 

[84]

 

 

 

 

 

 

 

 

 

 

 

 

Диспетчер Системных Вызовов с внешним ми-

 

 

12

 

 

 

 

ром, то есть миром Linux/BSD. Основная проб-

 

 

 

 

 

 

 

 

[XÀÊÅÐ

 

 

 

 

не документирован и к тому же подвержен пос-

 

 

 

 

 

 

лема в том, что интерфейс Диспетчера ни разу

 

 

 

 

 

 

 

 

виртуальная Windows-машина, работающая под управлением Linux

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

тояннымo

изменениям. А потом Microsoft вновь придумает

 

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

-xcha

 

 

новую пакость, и вся наша работа окажется бесполезной.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поэтому приходится хитрить и тащить за собой не только

 

 

 

 

 

 

 

 

 

 

 

ntoskrnl.exe, но еще и ntdll.dll. Некоторые могут спросить: за-

 

 

 

 

 

 

 

 

 

 

 

чем? Какое отношение ntdll.dll имеет к драйверам и ядру?

 

 

 

 

 

 

 

 

 

 

 

Драйвера его не вызывают, да и сам ntdll.dll представляет

 

 

 

 

 

 

 

 

 

 

 

собой всего лишь набор переходников к ntoskrnl.exe.

 

 

 

 

 

 

 

 

 

 

 

Дело в том, что интерфейс ntdll.dll худо-бедно документиро-

 

 

 

 

 

 

 

 

 

 

 

ван и остается практически неизменным уже на протяже-

 

 

 

 

 

 

 

 

 

 

 

нии многих лет, поэтому его смело можно брать за основу.

 

 

 

 

 

 

 

 

 

 

 

После этого остается всего лишь связать ntdll.dll с миром

 

 

 

 

 

 

 

 

 

 

 

Linux/BSD, то есть написать транслятор запросов к драйве-

 

 

 

 

 

 

 

 

 

 

 

рам. Это не так-то просто сделать, поскольку писать при-

 

 

 

 

 

 

 

 

 

 

 

дется достаточно много, и работа отнимет не один день и

 

 

 

 

 

 

 

 

 

 

 

даже не одну неделю, а с учетом отладки потребуется, как

 

 

 

 

 

 

 

 

 

 

 

минимум, месяц. Но работа стоит того!

 

 

 

 

 

 

 

 

 

 

 

По крайней мере, в Linux/BSD наладится нормальная ра-

 

 

 

 

 

 

 

 

 

 

 

бота с NTFS и некоторыми другими драйверами ввода-вы-

 

 

 

 

 

 

 

 

 

 

 

вода. С видеокартами, правда, все значительно сложнее,

 

 

 

 

 

 

 

 

 

 

 

поскольку они взаимодействуют отнюдь не с Диспетчером

 

 

 

 

 

 

 

 

 

 

 

ввода-вывода (который находится внутри ntoskrnl.exe), а с

 

 

 

 

 

 

 

 

 

 

 

подсистемой win32. В Windows 2000 она реализована в

 

 

 

 

 

 

 

 

 

 

 

файле win2k.sys. Как обстоят дела в других системах — не

 

 

 

 

 

 

 

 

 

 

 

знаю, да это и не важно. Драйвер win2k.sys — лишь малая

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

часть того, что ему нужно для работы, и просто так пере-

 

 

 

 

 

 

 

 

 

тащить в Linux/BSD его не получится. За ним неизбежно

 

 

 

 

 

 

 

 

 

потянется все его окружение, и написать столько «оберток» будет

 

 

 

 

 

 

 

 

 

практически нереально. Реально, конечно, но сколько это потребует

 

 

 

 

 

 

 

 

 

времени и сил? Переписать видеодрайвер гораздо проще, не говоря

 

 

 

 

 

 

 

 

 

уже о том, что в этом случае он будет более производителен. Кстати

 

 

 

 

 

 

 

 

 

говоря, компании NVIDIA и ATI в последнее время наладили выпуск

 

 

 

 

 

 

 

 

 

Linux/BSD драйверов под наиболее популярные чипсеты, так что проб-

 

 

 

 

 

 

 

 

 

лема снимается сама собой.

 

 

 

 

 

 

 

 

 

[готовый пример реализации] Конкретные переносы драйверов из

 

 

 

 

 

 

 

 

 

мира Windows в Linux/BSD мне неизвестны, однако под MS-DOS, кажет-

 

 

 

 

 

 

 

 

 

ся, есть что-то похожее. Речь идет о проекте Марка Руссиновича NTFS

 

 

 

 

 

 

 

 

 

for MS-DOS — известного хакера и исследователя недр NT. Бесплатную

 

 

 

 

 

 

 

 

 

версию (www.sysinternals.com/Utilities/NtfsDosProfessional.html) может

 

 

 

 

 

 

 

 

 

только читать, а платную легко найти в Осле. Специальный мастер ус-

 

 

 

 

 

 

 

 

 

тановки просит указать путь к системному каталогу Windows и создает

 

 

 

 

 

 

 

 

 

две дискеты, на которые ожесточенно записывает что-то тяжелое.

 

 

 

 

 

 

 

 

 

Начнем с первой дискеты (которая, кстати говоря, обычно бывает систем-

 

 

 

 

 

 

 

 

 

ной). Здесь находится только один исполняемый файл ntfspro.exe, предс-

 

 

 

 

 

 

 

 

 

тавляющий собой транслятор запросов, слинкованный с расширением за-

 

 

 

]

 

 

 

щищенного режима WDOSX 0.96 DOS extender от Michael Tippach.

 

 

 

 

 

 

Файл ntfs.gz — это «родной» ntfs.sys драйвер, вытащенный из системного

 

 

 

110

 

 

 

 

 

 

 

 

 

каталога Windows и для экономии места упакованный архиватором gzip.

 

 

 

 

 

 

 

 

 

 

 

 

UNIXOID

 

 

 

 

Для распаковки нам потребуется либо Linux, либо pkzip для Windows/MS-

 

 

 

 

 

 

 

 

 

 

 

 

 

DOS. Сравнив его с оригинальным файлом драйвера, мы не найдем никаких изменений! А ntoskrnl.gz — это ядро системы (ntoskrnl.exe), точно так же вытащенное и упакованное. Никаких изменений в нем нет.

На другой дискете находится ntdll.gz (о происхождении которого догадаться нетрудно) и ntfschk.exe. Последний представляет собой полностью переписанный вариант штатной утилиты chkdsk.exe. Чтобы заставить консольное приложение заработать в MS-DOS, пришлось бы

 

 

 

 

 

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

 

 

 

 

эмулировать еще множество функций, что в планы Руссиновича, оче- видно, не входило (тем не менее легендарный хакер Юрий Харон все-та- ки создал расширитель, способный запускать Windows-приложения изпод голого ДОС'а, без обращения к Windows вообще! Все умещается на одну дискетку — красота! Сам расширитель можно скачать с www.doswin32.com. Для некоммерческого применения он бесплатен).

Еще на дискетах содержатся файлы c_866.gz, autochk.gz, c_437.gz, c_1252.gz, l_intl.gz, содержащие языковые страницы и прочую служебную мишуру, без которой можно и обойтись.

Суть в том, что ядро проекта NTFS for MS-DOS составляют три файла: ntoskrnl.exe, ntdll.dll и ntfs.sys, которые помещаются в своеобразную скорлупу файла ntfspro.exe, переводящего процессор в защищенный режим и транслирующего MS-DOS-запросы в язык, понятный ntfs.sys, и наоборот. Как видишь, это работает. Конечно, Linux/BSD — это совсем не чистая MS-DOS. Ядро по-своему распределяет прерывания и другие системные ресурсы, поэтому при написании «скорлупы-оболочки» возникает множество технических проблем, но все они решаемы. Пример аналогичного решения можно найти в другом проекте Марка Руссиновича NTFS for Windows 9x. Здесь также используется «скорлупа», создающая адекватное окружение для ntoskrnl.exe и транслятор запросов, но она уже работает совсем не в голой MS-DOS, с которой все и так ясно, а в агрессивной Windows 9x, которая отличается от NT ничуть не меньше, чем Linux/BSD.

[заключение] Так что написать драйверную «скорлупу» для Linux/BSD вполне реально, и ничего фантастичного в этом нет. Ее достаточно создать лишь однажды, после чего можно будет запускать различные драйвера. Почему бы нам, хакерам, не скооперироваться и не заняться этим? Например, создать новый проект на www.sourceforge.net, набрать группу и оттянуться по полной программе. Ведь это действительно ХАКЕРСТВО, а не тоскливый бух и склад! Ну так чего же мы ждем?! Поехали

XÀÊÅÐ 12 [84] 05 >

виртуальная Linux-машина, работающая под управлением Windows

видеодрайвера для Linux, FreeBSD и Solaris от NVIDIA

[

 

 

 

 

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

 

 

 

 

Крис Касперски ака мыщъх

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

m

w

 

НЬЮСЫ

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

FERRUM

PC_ZONE

ИМПЛАНТ

ВЗЛОМ

СЦЕНА

UNIXOID

 

 

 

 

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

 

 

 

 

[КОДИНГ]

КРЕАТИФФ

ЮНИТЫ

SoftICE как логгер

Рассказ об ассемблере, отладчике уровня ядра и макросах

СУЩЕСТВУЕТ МНОЖЕСТВО ПОЛЕЗНЫХ СОФТИН, ОТСЛЕЖИВАЮЩИХ ВСЯКИЕ СИСТЕМНЫЕ СОБЫТИЯ (НАПРИМЕР, ШПИОНЯЩИХ ЗА API-ФУНКЦИЯМИ). ЗАЧАСТУЮ ИХ ВОЗМОЖНОСТИ СИЛЬНО ОГРАНИЧЕНЫ, И ПОЭТОМУ ХАКЕРЫ ПИШУТ СВОИ УТИЛИТЫ, ПРОСИЖИВАЯ ЗА КОМПИЛЯТОРОМ ДОЛГИЕ ЗИМНИЕ НОЧИ. ХОЧЕШЬ УЗНАТЬ БОЛЕЕ КОРОТКИЙ ПУТЬ? |

У меня тоже давно чесались лапы написать статью на тему логгинга. Взять хотя бы тех же API-шпионов. Все программы, которые я видел, очень часто падали без всяких видимых причин или обходились вирусами/защитными механизмами, оставляя самые ценные APIфункции за пределами лога. К тому же, размер сгенерированных логов просто ошеломлял. Среди миллионов бестолковых строк не было практически ничего интересного, а система фильтрации функций (даже если она и присутствовала) тупее моего хвоста. Можно было, конечно, пропустить лог через внешний фильтр, написанный на Perl'е или Си, но ведь это же сколько программировать надо! Не говоря уже о том, что нам может потребоваться информация, отсут-

 

 

 

 

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

 

 

 

 

ствующая в логе, скажем, следует ли за данной API-функцией команда TEST EAX,EAX или нет. А если мы захотим шпионить не только за API, но и за чем-ни- будь совершенно другим? Например, перехватить протокол обмена с драйвером или железом. SoftICE дает нам такую возможность! Мы просто создаем условную точку останова с хитрыми параметрами и заставляем отладчик вместо всплытия на экран, выводить всю информацию в лог, при- чем какие данные выводить и в каком порядке, опять-таки определяем мы сами. Система макросов — великая вещь, но далеко не все хакеры используют ее на полную. Хотим получить гибкий и конфигурабельный логгер с практически неограниченными возможностями? Ну, так чего же мы ждем?!

[легкая разминка] Прежде чем использовать SoftICE как логгер ,его необходимо правильно настроить. Запускам Symbol Loader, лезем в Edit -> SoftICE initialization setting и увеличиваем размер буфера истории (history buffer) до нескольких мегабайт. Точное зна- чение зависит от конкретной зада- чи. Чем больше информации нам необходимо собрать за один сеанс, тем длиннее должен быть буфер. Поскольку буфер устроен по принципу кольца, то при его заполнении никакого переполнения не происходит, просто свежие данные затирают самые старые. Во вкладке Macros Definition можно увеличить количество одновременно используемых макросов с 32 (по умолчанию) до 256. Но это уже по желанию. Для большинства задач лимит в 32 макроса мешать никому не будет.

Теперь попробуем в качестве разминки проследить за вызовом функции CreateFileA, использующейся для открытия устройств и файлов. Создадим условную точку останова следующего вида: 'bpx CreateFileA DO "x;"'. Ключевое слово DO определяет последовательность команд отладчика, которые тот должен выполнить после того, как эта точка сработает. Команды разделяются точкой с запятой и подробнее об их синтаксисте можно прочитать в главе Conditional Breakpoints руководства пользователя по отладчику. В данном слу- чае здесь стоит только команда 'x', означающая немедленный выход из отладчика.

Нажмем <Ctrl-D> для возврата в Windows и попробуем пооткрывать файлы, а когда это надоест, вызовем Symbol Loader и сохраним историю SoftICE в файл протокола (File -> Save SoftICE history as). После непродолжительного шуршания на диске образуется файл winice.log (по умолчанию). Посмотрим что там?

[наш самый первый протокол]

 

Break due to BPX KERNEL32!CreateFileA

DO "x;" (ET=1.44 seconds)

Break due to BPX KERNEL32!CreateFileA

DO "x;" (ET=940.19 milliseconds)

Break due to BPX KERNEL32!CreateFileA

DO "x;" (ET=14.51 seconds)

Break due to BPX KERNEL32!CreateFileA

DO "x;" (ET=19.23 milliseconds)

Break due to BPX KERNEL32!CreateFileA

DO "x;" (ET=13.88 milliseconds)

 

 

 

 

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

 

 

 

 

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

Вот улучшенный вариант (внимание, SoftICE не позволяет ставить две точки останова на одну функцию и перед тем, как создавать новую, старая должна быть удалена командой 'bc 0'):

[бряк, распечатывающий имена всех открываемых файлов]

bpx CreateFileA DO "D esp->4 L 20; x;"

Что изменилось? Появился вывод имени файла: 'D esp->4 L 20', где 'D' — команда отображения дампа, 'esp->4' — указатель на первый аргумент функции CreateFileA (что открывать), а 'L 20' — сколько байт выводить (конкретное значе- ние выбирается по вкусу). Протестируем обновленный вариант. Нажимаем <Ctrl- D>, выходим из отладчика, запускам какую-нибудь программу, за которой хотим пошпионить (например, FAR), затем вновь нажимаем <Ctrl-D>, заходим в отлад- чик и говорим 'bd 0' для прекращения шпионажа. Выходим из SoftICE, заходим в Symbol Loader и сохраняем историю на диск. На этот раз мы получаем:

[усовершенствованный протокол с именами открываемых файлов]

Break due to BPX KERNEL32!CreateFileA DO "d esp->4 L 20;x;" (ET=3.64 seconds) 0010:004859E8 43 4F 4E 4F 55 54 24 00-43 4F 4E 49 4E 24 00 49 CONOUT$.CONIN$.I 0010:004859F8 6E 74 65 72 66 61 63 65-00 4D 6F 75 73 65 00 25 nterface.Mouse.%

Break due to BPX KERNEL32!CreateFileA DO "d esp->4 L 20;x;" (ET=8.98 milliseconds) 0010:004859F0 43 4F 4E 49 4E 24 00 49-6E 74 65 72 66 61 63 65 CONIN$.Interface 0010:00485A00 00 4D 6F 75 73 65 00 25-63 00 25 30 32 64 3A 25 .Mouse.%c.%02d:%

Break due to BPX KERNEL32!CreateFileA DO "d esp->4 L 20;x;" (ET=16.93 milliseconds)

 

0010:00492330 43 3A 5C 50 72 6F 67 72-61 6D 20 46 69 6C 65 73

C:\Program Files

 

0010:00492340 5C 46 61 72 5C 46 61 72-45 6E 67 2E 6C 6E 67 00

\Far\FarEng.lng.

 

Совсем другое дело! Теперь отображается имя открываемого файла и

 

наш импровизированный шпион мало-помалу начинает работать. Одна-

 

ко отсутствуют такие важнейшие ингредиенты, как идентификатор про-

 

цесса, вызывавшего API-функцию и код возврата. Но что нам стоит до-

 

бавить к точке останова еще несколько строк?

 

 

 

[финальная точка останова ]

 

 

 

bpx CreateFileA DO "? PID; D esp->4 L 20; P RET; ? EAX; x;"

 

 

 

 

 

 

]

Команда '? PID' выводит идентификатор процесса, 'P RET' выполняет API-функ-

113

 

цию, дожидаясь возврата, а '? EAX' сообщает содержимое регистра EAX, в ко-

 

тором находится код возврата из API-функции, и все вместе это работает так:

КОДИНГ

[полная версия протокола]

 

 

 

 

 

Break due to BPX KERNEL32!CreateFileA DO "? PID; D esp->4 L 20; P RET; ? EAX; x;"

 

000001DC 0000000476 "?"

; PID

 

0010:0012138C 43 44 2E 73 6E 61 69 6C-2E 65 78 65 00 61 5F 65

 

CD.snail.exe.a_e

 

0010:0012139C 2E 65 78 65 00 00 00 00-00 00 00 00 00 00 00 00

 

.exe............

 

00000074 0000000116 "t"

; код возврата

 

Break due to BPX KERNEL32!CreateFileA DO "? PID; D esp->4 L 20; P RET; ? EAX; x;"

 

000001DC 0000000476 "?"

; PID

 

0010:0012138C 64 65 6D 6F 2E 63 72 6B-2E 65 78 65 00 61 5F 65

demo.crk.exe.a_e

 

0010:0012139C 2E 65 78 65 00 00 00 00-00 00 00 00 00 00 00 00

 

.exe............

 

00000074 0000000116 "t"

; код возврата

>

 

 

 

05

Break due to BPX KERNEL32!CreateFileA DO "? PID; D esp->4 L 20; P RET; ? EAX; x;"

[84]

 

000001DC 0000000476 "?"

; PID

12

0010:0012138C 64 65 6D 6F 2E 70 72 6F-74 65 63 74 65 64 2E 63

 

demo.protected.c

 

[XÀÊÅÐ

0010:0012139C 72 6B 2E 65 78 65 00 00-00 00 00 00 00 00 00 00

rk.exe..........

00000074 0000000116 "t"

; код возврата

 

 

 

 

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

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

t

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

NOW!

r

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

 

его предварительно пропатчить с помощью пакета IceExt, который скры-

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

вает отладчик от некоторых защитных механизмов). Все интересное только начинается!

Давайте чуть-чуть усложним задачу. Будем шпионить не за всеми файлами, а только за теми, чье имя начинается на букву «a». Это совсем несложно!

КОДИНГ 114]

[XÀÊÅÐ 12 [84] 05 >

NuMega SoftIce Symbol Loader

настойка размера буфера истории

Согласитесь, что с таким отчетом можно и поработать! Мы уже достигли функционала стандартного API-шпиона, однако при желании фильтр легко усложнить, добавив новые критерии отбора проб. Формат протокола отчета также легко обогатить новыми деталями, выводя все необходимые подробности, которые только потребуются (например, содержимое стека вызовов). Конечно, этот путь не обходится без проблем. Постоянно всплывающий SoftICE противно мерцает и жрет производительность. Можно ли как-нибудь заставить его ввести протокол, не всплывая? Можно! Отладчик поддерживает специальную функцию BPLOG, всегда возвращающую TRUE и подавляющую всплытие отладчика. К сожалению, вместе с этим подавляется и последовательность команд, следующая за DO, а значит, создание подробных от- четов становится невозможным, так что для наших целей такой способ не годится. Других «антивсплывающих» средств в нашем распоряжении нет.

Еще одним источником головной боли становится мусор в протоколе. Полезные данные перемешиваются с прочей информацией, выводящейся на экран, и... Какая там легкость чтения! Без написания специального форматера отчетов мы буквально утонем. Но программировать на Perl'е лениво, и на помощь приходят... правильно! Макросы! Только на этот раз не из SoftICE, а те, что встроены в FAR.

Нажимаем <F4> (в FAR'e) и внимательно смотрим на наш отчет. Как видно, каждая порция отчетной информации начинается со строки "break due to". Вот ее-то мы и будем искать! Нажимаем <Ctrl-.> для начала записи макросов, затем <F7> "break due to" <ENTER>. Теперь <Shift-стрелка вправо> пока мы не выделим все лишнее до "CreateFileA", <Crl-Del>, чтобы вырезать его , <Ctrl-Shift-стрелка вправо>, чтобы перейти на "DO", которое мы также удаляем вместе с остатком строки и т.д. и т. п. Кромсаем текст, как хотим. Это тяжело описывать словами, легче показать конечный результат. После того как макрос будет создан, достаточно будет его применить к протоколу заданное число раз (просто нажать назначенную ему комбинацию клавиш и не отпускать), в результате чего получится следующее:

[точка останова, шпионящая за открытием файлов, начинающихся с буквы «a»]

bpx CreateFileA if byte (*esp->4)=='a' DO xxx

Проблема в том, что если функции CreateFileA передается полное имя файла с путем, наша точка останова уже не сработает, поскольку она проверяет только первый символ имени, а функции поиска подстроки в арсенале SoftICE, увы, нет. Как говориться, конструктивно непредусмотрено. Какая жалость, но не беда!

Будем исходить из того, что память, лежащая выше указателя стека, как правило, свободна и может быть использована по нашему усмотрению. Что если записать туда крошечную ассемблерную программу и передать на нее управление? Если это получится (а это получится, уж поверь мне) мы сможем неограниченно наращивать функционал отладчика, не прибегая к плагинам, которые не совсем документированы (точнее, совсем не документированы), довольно громоздки, неповоротливы и т. д.

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

Чтобы осуществить задуманное, мы должны сделать следующее:

поместить машинный код нашей функции выше вершины стека;

сохранить текущее значение регистра EIP и регистра флагов (например, в том же стеке);

сохранить все регистры, которые изменяет наша функция;

установить EIP на начало нашей функции;

тем или иным образом передать аргументы (например, через регистры);

выполнить функцию, возвратив результат работы, например, через EAX;

проанализировать возвращенное значение, выполнив те или иные операции;

восстановить измененные регистры;

восстановить регистр EIP и регистр флагов; продолжить нормальное выполнение программы.

Звучит устрашающе, но ничего сложного в этом нет. Давай для начала попытаемся выполнить функцию XOR EAX,EAX/RET. Как перевести ее в машинный код? Можно, конечно, воспользоваться HIEW'ом или даже FASM'ом, но зачем выходить из SoftICE? Достаточно переместиться в любое свободное место памяти и дать команду 'a' (assemble — то есть ассемблировать), только предварительно убедись, что ты находишься в контексте отлаживаемого приложения (его имя отображается в правом нижнем углу экрана), а не в ядре, иначе случится крах.

[ассемблирование нашей функции в SoftICE]

[прилизанный протокол, из которого выброшено все ненужное]

 

CreateFileA, PID:1DCh; NAME: CD.snail.exe;

RET: 74h

CreateFileA, PID:1DCh; NAME: demo.crk.exe;

RET: 74h

CreateFileA, PID:1DCh; NAME: demo.protected.crk.exe;

RET: 74h

Вполне достойный результат для нескольких минут работы! С помощью макросов можно сделать все или практически все! И пускай некоторые презрительно ухмыльнуться, мол, этот путь непрофессионален. Главное, что поставленная задача была выполнена в рекордно короткие сроки, а все остальное уже неважно.

[более сложные фильтры] До сих пор мы не создали ничего сложнее обычного API-шпиона, которых просто тьма. Начнем с того, что SoftICE (особенно при использовании аппаратных точек останова типа 'bpm') намного менее конфликтен, чем большинство шпионов, и легко работает там, где другие средства уже не справляются (особенно если

:a esp-10

0023:0012B0DC xor eax,eax 0023:0012B0DE ret 0023:0012B0DF

:d esp-10

0023:0012B0DC 33 C0 C3 00 DB 80 FB 77-88 AE F8 77 FF FF FF FF 3......w...w....

0023:0012B0EC 31 D8 43 00 E8 59 48 00-00 00 00 C0 03 00 00 00 1.C..YH.........

Теперь программа лежит на стеке, но вот как ее исполнить? Да очень просто! Сказать 'G esp-10' (перейти к адресу esp-10) и пусть процессор выкручивается как может. Правда, чтобы возвратить управление в текущее место отлаживаемой программы, необходимо предварительно сохранить регистр EIP, а сделать это не так-то просто. Команда 'E (esp-10) EIP' не работает, поскольку не допускает использования выражений (а имя регистра — это выражение) и обламывает нас по полной syntax error. Как быть? Кого мочить? Что делать?!

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

F

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ОГРАНИЧИВАЙ

 

 

 

df-xÍÅchan

 

 

 

 

to

BUY

 

 

 

 

 

w Click

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

e

 

 

ÑÅÁß

 

 

 

 

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

 

 

 

 

Играй

просто!

ПОЛУЧИ GamePost

МАКСИМУМ

УДОВОЛЬСТВИЯ

ИСПОЛЬЗУЯ ДОПОЛНИТЕЛЬНЫЕ АКССЕСУАРЫ

Монитор

Наушники

Колонки

Øëåì

Корпус

Pinnacle Systems

Shuttle XP17SG

Sennheiser RS 110-8

M-Audio Studiophile

i-O Display Systems

Shuttle SB83G5C

Studio 9 Plus RUS

 

 

LX4 2.1 System

i-glasses PC

 

 

$675.99

$79.99

$339.99

$1099.99

$485.99

$99.99

* В нашем магазине

* Постоянно

* Товары от

 

вас ждет более

обновляемый

самых лучших

 

1000 èãð

ассортимент

производителей

 

на ваш выбор

 

 

 

макрос, выделяющий выполненные команды голубым цветом; невыполненные команды помечаются серым

 

 

 

 

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

 

 

 

 

 

А давай воспользуемся командой 'M' (move), копирующей блоки памяти

 

из одного адреса в другой. Тогда мы сможем сохранить кусочек ориги-

 

нальной программы на стеке, а саму программу модифицировать по

 

своему усмотрению. Мы должны будем записать PUSH EAX/MOV

 

EAX,ESP/SUB EAX,10h/CALL EAX. Короче, нам нужна команда CALL

 

ESP-N, поскольку такой команды в лексиконе x86 процессоров нет и ни-

 

когда не существовало, нам приходится ее эмулировать через матема-

 

тические преобразования с любым дополнительным регистром, напри-

 

мер, EAX. В машинном коде это выглядит так: "50h/8Bh C4h/83h E8h

 

10h/FFh D0h".

 

Копируем кусок отлаживаемой программы на стек: 'M EIP L 10 ESP-20',

 

где 'ESP-20' — адрес-приемник, лежащий выше указателя вершины сте-

 

ка и не затирающий нашу машинную программу. Теперь модифицируем

 

окрестности отлаживаемой программы: 'ED EIP 83C48B50; ED EIP+4

 

D0FF10E8'. Как видно, это тот же самый код, только набранный задом

 

наперед, потому что в x86 процессорах младший байт располагается по

]

меньшему адресу.

На этом подготовительный этап можно считать законченным. Говорим 'T'

116

(TRACE), повторяя эту команду четыре раза до входа в нашу функцию, а

 

КОДИНГ

затем отдаем приказ 'P RET' для выхода оттуда. И все!!! В регистре EAX

теперь содержится ноль! Наша функция завершила свою работу и возв-

 

 

ратила все, что хотела! Разве это не здорово, что можно выполнять в от-

 

ладчике свой собственный код, написанный с чистого листа?!

 

Но вот проблема как проанализировать возвращенное значение в от-

 

ладчике? Если попытаться пойти прямым путем: 'IF (eax==0) DO xxxx', то

 

нас поимеют по всему мясокомбинату. Ну не понимает SoftICE условных

 

команд, и ключевое слово IF может встречаться только в точках остано-

 

ва. Так давайте и создадим ему фиктивную точку останова, которая сра-

 

батывает всегда! Что-то вроде:

 

[фиктивная точка останова позволяет использовать ключевое слово IF]

 

BPX EIP IF (EAX==0) DO xxx

 

Естественно, независимо от того, сработает ли точка останова или нет,

 

нам необходимо восстановить регистр EAX (про флаги мы помним, но

 

не сохраняем их, чтобы не загромождать код), вернуть кусок оригиналь-

 

ной программы на место и удалить фиктивную точку, поскольку количе-

 

ство точек останова ограниченно. Что касается регистра EAX, то он мо-

 

жет быть восстановлен командой POP EAX, следующей за CALL EAX, а

 

вернуть программу на место поможет конструкция 'M ESP-20 L 10 EIP-9'.

>

Откуда взялось 'EIP-9'? Прочему не EIP? Так ведь в процессе выполне-

05

ния «заплатки» значение EIP изменилось! Число «9» и есть размер на-

[84]

шей заплатки вместе с командой POP EAX. Остается сказать «R EIP =

EIP-9», чтобы вернуть EIP на место, и выполнение отлаживаемой прог-

12

раммы можно смело продолжать. Если все было сделано правильно, и

[XÀÊÅÐ

никакой защитный механизм не использовал незадействованный стек,

то отлаживаемая программа не рухнет.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

Кстати говоря, под Windows 9x с некоторой вероятностью сбои

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

все-таки будут происходить, поскольку она активно мусорит в

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

стеке. Чтобы не дать ей хулиганить, регистр ESP следует на

 

 

 

 

 

 

 

 

время выполнения всех операций подтянуть наверх, а затем

 

 

 

 

 

 

 

 

снова опустить назад.

 

 

 

 

 

 

 

 

 

 

Естественно, необязательно каждый раз набивать машинные

 

 

 

 

 

 

 

 

коды вручную. Занятие это утомительное, и приятным его ни-

 

 

 

 

 

 

 

 

как не назовешь. Вот тут-то нам и пригодятся макросы! Гово-

 

 

 

 

 

 

 

 

рим 'MACRO MACRO_NAME = "xxxxx"' и заносим макрос в спи-

 

 

 

 

 

 

 

 

сок постоянных. Это делается так: запускам Symbol Loader, за-

 

 

 

 

 

 

 

 

ходим в Edit -> SoftICE Initialization Setting, переходим к вклад-

 

 

 

 

 

 

 

 

ке Macro Definitions, нажимаем Add, даем макросу имя (name)

 

 

 

 

 

 

 

 

и тело (definition). Теперь макрос будет автоматически загру-

 

 

 

 

 

 

 

 

жаться вместе с SoftICE. Можно создать библиотеку собствен-

 

 

 

 

 

 

 

 

ных расширенных условных точек останова, поддерживающих

 

 

 

 

 

 

 

 

такие функции поиска подстроки в строке или сравнения строк

 

 

 

 

 

 

 

 

по шаблонам '*' и '?'. Это действительно можно сделать, и тог-

 

 

 

 

 

 

 

 

да мощь SoftICE многократно возрастет, кроме того, мы полу-

 

 

 

 

 

 

 

 

чим замечательный шанс попрактиковаться с программирова-

 

 

 

 

 

 

 

 

нием в машинных кодах!

 

 

 

 

 

 

 

 

 

 

Кстати говоря, макросы позволяют решить и другую проблему.

 

 

 

 

 

 

 

 

Дело в том, что SoftICE не поддерживает вложенные точки ос-

 

 

 

 

 

 

 

 

танова, без которых нам никак не обойтись (как мы помним,

 

 

 

 

 

 

 

 

для анализа содержимого регистра EAX нам пришлось прибег-

 

 

 

 

 

 

 

 

нуть к созданию фиктивной точки останова). Если мы попыта-

 

 

 

 

 

 

 

 

емся написать: 'BPX CreateFileA DO "xxx; bpx EIP DO "XXXX";

 

 

 

 

 

 

 

 

x;"', то ничего не получится! SoftICE запутается в кавычках и от-

 

 

 

 

 

 

 

 

кажется переваривать такую конструкцию. Но если оформить

 

 

 

 

 

 

 

 

'bpx EIP DO "XXXX"' в виде макроса, названного, например,

 

 

 

 

 

 

 

 

XYZ, то конструкция 'BPX CreateFileA DO "xxx; XYZ; x;"' будет восприня-

 

 

 

 

 

 

 

 

та отладчиком вполне благосклонно.

 

 

 

 

 

 

 

 

 

 

[анимэ и SoftICE] Некоторые отладчики (такие, например, как

 

 

 

 

 

 

 

 

OllyDbg) имеют одну полезную фишку, которую не имеет SoftICE.

 

 

 

 

 

 

 

 

А именно — возможность пошаговой анимированной трассировки с ус-

 

 

 

 

 

 

 

 

ловными точками останова на каждом ходу. Например, можно поста-

 

 

 

 

 

 

 

 

вить точку останова на конструкцию 'TEST EAX,EAX/Jx XXX', заставив

 

 

 

 

 

 

 

 

отладчик всплывать всякий раз, когда EAX будет равен нулю или любо-

 

 

 

 

 

 

 

 

му другому значению на наш выбор. Что-то вроде 'BPX IF

 

 

 

 

 

 

 

 

(*word(EIP)==0xC085 && (*byte(EIP+2) & 70h)==70h)'. Здесь 0xC085 — оп-

 

 

 

 

 

 

 

 

код команды TEST EAX,EAX, а 70h — маска инструкции Jx, ну а вся точ-

 

 

 

 

 

 

 

 

ка останова в целом позволяет отлавливать код типа "if

 

 

 

 

 

 

 

 

(func(1,2,3)!=0)…", которые часто используется в защитных механизмах.

 

 

 

 

 

 

 

 

SoftICE таких шуток не понимает и требует, чтобы адрес точки оста-

 

 

 

 

 

 

 

 

нова был задан явно, например 'BPX EIP...', но и в этом случае он

 

 

 

 

 

 

 

 

создает одну единственную точку останова, опираясь на текущее

 

 

 

 

 

 

 

 

значение EIP (каким оно было в момент создания точки останова) и

 

 

 

 

 

 

 

 

отказываясь автоматически «пересчитывать» его по ходу следова-

 

 

 

 

 

 

 

 

ния программы. Какая жалость! А ведь ради этой возможности мно-

 

 

 

 

 

 

 

 

гие хакеры отказываются от привычного SoftICE и мигрируют в сто-

 

 

 

 

 

 

 

 

рону OllyDbg. Между тем, решение есть!

 

 

 

 

 

 

 

 

 

 

Макросы могут быть вложенными! Попробуйте написать 'MACRO

 

 

 

 

 

 

 

 

XYZ="T; XYZ;"', наберите XYZ и посмотрите что получится. SoftICE нач-

 

 

 

 

 

 

 

 

нет анимировать программу! Не слишком быстро, но все-таки достаточ-

 

 

]

 

 

 

 

но производительно. Во всяком случае, для распаковки навесных упа-

 

 

116

 

 

 

 

 

 

 

 

 

 

 

 

ковщиков вполне подойдет.

 

 

 

 

 

 

 

 

 

 

Коль скоро мы научились анимировать программу, создание условных

 

 

КОДИНГ

 

 

 

 

точек уже не станет проблемой. Вот, например, такой полезный макрос:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'MACRO XYZ = "BPX EIP;T;XYZ;"'. Что он делает? А вот что! Он выделя-

 

 

 

 

 

 

 

 

ет трассу следования программы, помечая выполненный код, и мы сра-

 

 

 

 

 

 

 

 

зу видим, какие условные переходы выполнялись, а какие нет. Только

 

 

 

 

 

 

 

 

необходимо учитывать, что количество точек останова ограниченно,

 

 

 

 

 

 

 

 

и потому их периодически необходимо снимать.

 

 

 

 

 

 

 

 

 

 

[заключение] SoftICE — это действительно мощный инструмент не-

 

 

 

 

 

 

 

 

обыкновенной разрушительной силы, который позволяет делать все,

 

 

 

 

 

 

 

 

что нужно. Главное — фантазию иметь. Русский мужик всегда отличал-

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

Вот так и с отладкой. Вместо того чтобы искать отладчик, реализующий

 

 

 

 

 

 

 

 

необходимый нам функционал, мы можем взять в руки напильник и до-

 

 

 

 

 

 

 

 

работать уже существующий, тем более что логгинг — это не един-

 

 

>

 

 

 

 

ственная альтернативная профессия SoftICE. При желании из него

 

 

05

 

 

 

 

можно соорудить отличный дампер или что-то еще. Но это тема уже

 

 

[84]

 

 

 

 

 

 

 

 

 

 

 

 

другого разговора.

 

 

 

 

12

 

 

 

 

Главное — схватить идею. Эта статья не предлагает готовых решений,

 

 

 

 

 

 

 

 

[XÀÊÅÐ

 

 

 

 

но зато поднимает целый пласт возможностей, которые каждый может

 

 

 

 

 

 

использовать по своему усмотрению

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

В СТИЛЕX

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

ЭКСКЛЮЗИВНАЯ

 

 

 

 

 

 

 

 

 

 

 

*

w Click

to

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

КОЛЛЕКЦИЯ ОДЕЖДЫ

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

И АКСЕССУАРОВ ОТ ЖУРНАЛА ХАКЕР

XAKEP STUFF

«ОПАСНО ДЛЯ ЖИЗНИ»

«C.I.A. - CENTRAL INTELLIGENCE

С ЛОГОТИПОМ «ХАКЕР»

AGENCY»

КРУЖКА + ФЛЯЖКА + ЗАЖИГАЛКА

КОВРИК ДЛЯ МЫШИ

ТОЛСТОВКА

ПИВНАЯ КРУЖКА СО ШКАЛОЙ

!!!

 

 

 

new

 

 

 

ÖÅÍÀ:69.99USD

КОД ТОВАРА: COF16384 ÖÅÍÀ: 6.99USD КОД ТОВАРА: COF13771

ÖÅÍÀ:39.99USD

КОД ТОВАРА: COF14827 ÖÅÍÀ:12.99USD КОД ТОВАРА: COF14018

 

 

 

 

 

 

 

 

 

«ХАКЕР INSIDE»

 

«WWW - WE WANT WOMEN'' »

«HACK OFF»

 

«FBI»

ФУТБОЛКА

ТОЛСТОВКА

ФУТБОЛКА

ВЕТРОВКА

 

 

 

 

 

 

 

 

 

 

 

 

«ХАКЕР – ДЕНЬГИ»

«ХАКЕР»

С ЛОГОТИПОМ «ХАКЕР»

«ХАКЕР»

ЗАЖИМ ДЛЯ ДЕНЕГ

КОЖАНЫЙ ШНУРОК ДЛЯ МОБИЛЬНИКА

ЗАЖИГАЛКА МЕТАЛЛИЧЕСКАЯ

РУЧКА SENATOR МЕТАЛ. С ГРАВИРОВКОЙ

 

 

 

 

 

 

 

!!! LIMITED

ÖÅÍÀ:11.99USD КОД ТОВАРА: COF14590 ÖÅÍÀ:11.99USD КОД ТОВАРА: COF14591 ÖÅÍÀ:11.99 USD КОД ТОВАРА: COF13862 ÖÅÍÀ:22.99USD КОД ТОВАРА: COF13861

Играй

просто!

GamePost

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

m

w

 

НЬЮСЫ

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

FERRUM

PC_ZONE

ИМПЛАНТ

ВЗЛОМ

СЦЕНА

 

 

 

 

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

 

 

 

 

_icomming malr

UNIXOID

[КОДИНГ]

КРЕАТИФФ

ЮНИТЫ

Разводим червей

Что такое мыльные черви, и с чем их едят

ТАКОЕ ЯВЛЕНИЕ, КАК МАССОВОЕ РАСПРОСТРАНЕНИЕ ЧЕРВЕЙ В СЕТИ КОСНУЛАСЬ, ДУМАЮ, ЛЮБОГО. НАВЕРНЯКА ТЫ УЖЕ ЗНАЕШЬ ТАКИХ СЕТЕВЫХ ПРЕДСТАВИТЕЛЕЙ БЕСПОЗВОНОЧНЫХ, КАК BEAGLE И MYDOOM, ОНИ ЗАРАЗИЛИ СОТНИ ТЫСЯЧ МАШИН И НАДЕЛАЛИ НЕМАЛО ШУМА. МОЖЕТ БЫТЬ, ТЫ ДУМАЕШЬ, ЧТО СДЕЛАТЬ САМОМУ ПО-

ДОБНОГО ЗВЕРЯ ОЧЕНЬ ТРУДНО? ЭТО НЕ ТАК, МЫЛЬНЫЙ ЧЕРВЬ НА САМОМ ДЕЛЕ НЕ ПРЕДСТАВЛЯЕТ СОБОЙ НИЧЕГО СЛОЖНОГО. И В ЭТОЙ СТАТЬЕ Я ЭТО ПОПЫТАЮСЬ ДОКАЗАТЬ, РАССКАЗАВ ТЕБЕ О ПРИНЦИПАХ ФУНКЦИОНИРОВАНИЯ МЫЛЬНЫХ ЧЕРВЕЙ И ОБ ОСОБЕННОСТЯХ ИХ РЕАЛИЗАЦИИ. НО ХОЧУ ТЕБЯ СРАЗУ ПРЕДОСТЕРЕЧЬ, ЧТО

ЧЕРВИ ЧРЕЗВЫЧАЙНО ОПАСНЫ, ПОЭТОМУ ОБРАЩАТЬСЯ С НИМИ НАДО СО ВСЕЙ ОСТОРОЖНОСТЬЮ, ИНАЧЕ МОЖНО НАДЕЛАТЬ БЕД И ЗАГРЕМЕТЬ ЗА РЕШЕТКУ. ТАК ЧТО ВСЕ НАПИСАННОЕ В ЭТОЙ СТАТЬЕ СЛЕДУЕТ ИСПОЛЬЗОВАТЬ ТОЛЬКО В УЧЕБНЫХ ЦЕЛЯХ. В ОБЩЕМ, НАЧИНАЕМ РАЗВОДИТЬ ЧЕРВЕЙ

| Ms-Rem (Ms-Rem@yandex.ru)

[как работает червь?] Общий принцип работы всех мыльных червей — это рассылка писем, в аттачах которых находится копия червя, предназначенная юзеру. Наверно, ты думаешь, что это вздор, аттачи сейчас никто не запускает. Однако статистика говорит, что приложения в сомнительных письмах запускает 2—3% пользователей, а этого вполне достаточно для успешного распространения червей. После запуска червь ка- ким-либо образом прописывает себя в автозагрузку. Следующим этапом работы червя является поиск всех e-mail адресов на зараженной машине, они извлекаются из адресной книги Outlook (либо других почтовых программ) и ищутся в html-, txt- и doc-файлах по всем дискам зараженной машины. Третьим этапом жизни червя является рассылка себя по всем найденным адресам. Все это с первого взгляда кажется примитивным, но на всех этапах есть множество важных тонкостей, которые нужно обязательно учесть для того, чтобы червь стал жизнеспособным. Необходимо заставить сервер принять письмо, а пользователя запустить в

аттач. Нетривиальной также будет борьба с антивирусами, спамфильтрами почтовых систем, файрволами и различными фильтрами аттачей в mail-клиентах. Короче говоря, проблем у червеписателей хватает. Итак, приступим к рассмотрению всех этапов жизни червя по порядку.

Начнем с самого важного, по моему мнению, вопроса, который возникает при создании червя: как заставить юзера запустить аттач? В первую очередь нужно обойти проблемы технического характера, главной из которых может быть запрет открытия исполняемых файлов почтовой программой. Уже давно прошли времена, когда можно было смело посылать на мыло exe-файл и надеяться, что пользователь его запустит. Сейчас даже самый тупой юзер (на которого и рассчитаны мыльные черви) не запустит такой аттач по той причине, что ему не даст это сделать почтовая программа, либо письмо будет удалено фильтром вложений файрвола. Первое, что приходит на ум, — это засунуть исполняемый файл в архив. Почтовые фильтры не рискнут удалять такие аттачи,

Соседние файлы в папке журнал хакер