С наступившим тебя Новым годом! Понимаю, праздники уже закончились, но мы как обычно затянули с номером и лучше уж поздравить позже, чем вообще не поздравить. Мы надеемся, что ты встретил Новый год как надо - весело, шумно, с песнями и плясками и сейчас полностью готов к трудовым будням. Многие в курсе, что мы уже два года собираемся сменить движок и внешний вид VR-Online, но из-за постоянной нехватки времени это мероприятие все время откладывается. Ты не поверишь, но мы всетаки смогли это сделать! Мы собрались с духом и таки перевили весь сайт на новый движок (Drupal)! Чтобы как-то ускорить переход, мы решили не ждать реализации всех запланированных фишек, а запустить двиг в работу и уже по ходу дела вносить изменения. Пока сайт работает в тестовом режиме. Тестируй, осматривайся и пиши свои предложения/претензии ко мне на почту (antonov.igor.khv@gmail.com) или на форум. Улучшим VR вместе! P.S. Один из наших постоянных посетителей (ZeroXor) написал прикольное стихотворение-поздравлялку с Новым годом. Читай сразу же на следующей странице! Приятного чтения! Игорь Антонов
Над номером работали: Редактор: Игорь Антонов aka Spider_NET Графика: Soffrick, Дмитрий Редькин, Magistral Верстка: Игорь Антонов aka Spider_NET Литературный редактор: Мансур Хусаинов aka Khusman
Вот уходит старый год: Пусть с собой он заберет Все невзгоды и печали, Коннекты, что порой слетали.
Шашлыки чтобы на даче, Чтоб апгрейд всегда удачный, Юзерам - мозгов побольше. Также - вовремя закончить
Заберет он пусть заботы, Звезды, что идут с traceroute, DoS'еров пусть с наших сайтов Заберет он без возврата.
То, что начато давно, Много раз сходить в кино, Наконец-то отоспаться, От рутины оторваться,
Жадных, мелочных клиентов, Нелюбимых конкурентов, Палки, что в колеса лезут, Ламерских мозгов протезы.
Новых завести друзей, Целей достигать быстрей, И чтоб вири на машине Никогда не заводились,
Пинги, те, что без ответа, BSOD, что появился летом. Спам, что валит круглый год Пусть с собою унесет.
Да и вы чтоб не болели. Чтобы вовремя успели Сдать проект очередной. Чтоб дедлайна геморрой
Дятлов тех, что нас долбают, Пусть с собою забирает. Ведь уходит старый год. Ну и хрен с ним, пусть идет!
Не настиг, когда не надо. И большой-большой зарплатой Оценили чтобы вас. Вот на этом я рассказ
Новый ждет нас у ворот. Что с собой он принесет? Мы сейчас, увы, не знаем, Но, как прежде, пожелаем
И заканчиваю. Глянь! На столе пивка стакан Уж налит. Давай поднимем, Программист, или админ ты,
Всем айтишникам сейчас Не лагал чтоб комп у вас, Чтоб программы компилились, Сети чтоб всегда ловились.
Эникейщик ли виндовый, BSD-шник ли суровый, Новый Год встречать пора! *DRINK* , айтишники! Ура!
Так как этот номер всё-таки является новогодним, то стоит подвести итог прошлого года. 2009 год не был революционным в плане новых технологий. Что же интересного произошло за этот период в мире IT? Итак, встречайте. Мой Top 5! 1. Думаю, всё будут согласны со мной, что первое место в нашем рейтинге займёт новая ОС от Microsoft – Windows 7.
Она пришла на смену Windows Vista, которая так и не смогла завоевать популярность среди пользователей. Я уже около 2-х месяцев перевёл свой десктопный ПК под управление семёрки и не жалею об этом. Разработчики Win7 позиционировали ее как самую быструю, простую и удобную операционную систему. Простая? Да! Даже самый тупень её сможет поставить. Удобная? Да! Самая быстрая? Тут я вынужден немного не согласиться. Я этого как то не заметил. Ибо даже тесты THG(www.thg.ru) доказали, что семёрка всего чуть-чуть быстрее висты в синтетических тестах. Но факт на лицо – новая качественная ось от MS. Значит год уже не зря прошёл J 2. Вторым в списке, наверное, будет выход Chrome OS от Google
Большого прока я в этой операционке не вижу. Да и операционкой назвать это у меня язык как то не поворачивается. По этому поводу было несколько горячих обсуждений на Хабре (www.habrahabr.ru). Большинство там пришло к такому же мнению. Но тем не менее! Второе место J 3. Это место я отдам новинке от Nokia – “Линуксу в кармане”, имеющий гордое название N900.
Работающий под операционной системой Maemo 5, телефон имеет огромные возможности. Если быть точнее, то это не просто телефон, а миникомпьютер под управлением особой сборки Debian Linux. Обзор был в декабрьском номере журнала Хакер. По праву третье место. 4. Здесь расположился “Аватар”. Точнее, не сам фильм, а тот рывок в работе с 3D, который он дал.
2 Мб на кадр, 288 Мб на секунду, 17,28 Гб на минуту. Все 162 минуты фильма, который мы увидели на экранах – огромный объем информации – это только маленькая толика того, что пропустил через себя новый дата-центр студии Weta. Собранный, как вы уже могли догадаться, на серверах HP: 34 стойки с 32 блейдами HP Proliant BL2x220c в каждой – 40 000 процессоров и 104 Тб RAM На сегодня Weta Digital является обладателем мощнейшего кластера для 3D-рендеринга в мире. И существующий задел еще долгие годы позволит студии создавать шедевры, которым нет равных. “Аватар” поднял планку спецэфектов на новую высоту, теперь можно ожидать, что в следующем годы самые громкие блокбастеры в обязательном порядке будут иметь 3Dверсию. 5. 2009 год по праву можно назвать “годом Twitter’a”
Именно в 2009 году "Твиттер" вдохновил разные компании на создание приложений – либо на основе самого "Твиттера", либо устроенных по тому же принципу, то есть работающих в реальном времени (например, Google Wave или Etherpad). "Твиттер" вынудил крупнейшую в мире социальную сеть Facebook стать по сути открытой, заставил крупнейшие поисковые системы переосмыслить системы индексации и поиска ради поиска в реальном времени.
Written by Роман Костенко aka Lord of Fear E-mail: kostenko.r.khv@gmail.com
Лысых Василий Директор по развитию компании CCS (diskwritecopy.com), занимающейся разработкой системного программного обеспечения, защитой информации и данных.
Расскажите про идею создания продукта, с чего все начиналось. Я считаю, что вопрос поставлен неточно, так как мы нацелены на постоянное развитие, которое происходит в данный момент в том числе. То есть всё еще начинается. А идея создания пришла как раз с очевидной нехваткой подобного рода, качественного решения на рынке, и осознанием возможности его создания. Корень идеи лежит в принципе запрещения изменений операционной системы, после её полной настройки. Если в двух словах, то хотелось избавиться от постоянных переустановок системы и других программ, вызванными неосторожными действиями и случайными вредоносными кодами, которые несогласованно с пользователем, бесконтрольно, вносят изменения в систему и данные. Можно с уверенностью утверждать, что первой цели мы достигли, так как Disk Write Copy успешно используется в нашей компании, а также пользователями и компаниями в разных странах. Чем выделяется Ваш продукт среди подобных решений? В первую очередь наши программные продукты имеют полную русскоязычную поддержку пользователей, так как компания изначально Российская. Решений в сфере безопасности существует великое множество, и каждое имеет очень много разных нюансов. Наши программисты делают упор на качество программных продуктов, их удобство и функциональность. Они отличаются стабильностью работы, так как наши программисты имеют длительный стаж работы в этом направлении, а продукты тщательно тестируются. Все наши программные продукты имеют цифровые сертификаты доверенного центра Microsoft, которые гарантируют целостность и подлинность всех исполняемых файлов. Наши разработчики с энтузиазмом реагируют на предложения и пожелания пользователей, некоторые из которых реализуются в новых версиях программных продуктов. Например, около 40% пожеланий, предложенных нашими пользователями, будут реализованы в линейке 2.х. Насколько продукт DWC популярен среди подобных решений? Мы считаем, что о популярности продукта говорить рано, пока разработчики не реализовали всех задуманных решений, которых остается еще очень много. Disk Write Copy постоянно находится в активной стадии разработки, и вот-вот перейдет в линейку 2.х., где будет реализовано много востребованного функционала не только для обычного пользователя, но и для корпоративного сектора. Что дает использование программы DWC системным администраторам? Использования Disk Write Copy линейки 1.х дает администраторам следующие преимущества: - гарантированная ежедневная загрузка всех систем после включении питания - мгновенное восстановление системы и данных путём простой перезагрузки - экономия личного времени - экономия времени простоя в неработоспособном состоянии - автоматическое и удаленное решение проблем пользователей без непосредственного участия администратора - автоматическое удаление конфиденциальных данных после выключения компьютера - автоматическое восстановление работоспособного состояние систем при перебоях питания
- повышение общего уровня безопасности системы У Disk Write Copy существует редакция "Server". Расскажите подробней, для каких типов серверов ее можно использовать и не скажется ли использование DWC на их производительности. Disk Write Copy Server Edition можно использовать на любых серверных платформах, которые существуют на платформе Microsoft Server в наше время, начиная с Windows Server 2000. Если приложение установлено на платформе Intel, то пользователь получает высокую производительность, благодаря использованию виртуализации, многопоточности приложения, а также других технологий. До 30% быстрее происходит обработка данных. В том числе при работе с Intel Itanium. Что отличает DWC от утилит типа Acronis True Image и т.д.? Они же тоже позволяют сделать полный образ диска. Как мы уже говорили, систем обеспечивающих безопасность информации существует очень много, но обеспечивают они её разными способами. Если говорить об утилите Disk Write Copy, то её технология представляет собой не обычный бэкап данных, создающий архив всех файлов, хранящихся либо на одном из разделов, либо на всем жестком диске. Disk Write Copy - это программа для моментального отката, которая использует технологию теневых дисков. Отличие нашей технологии в простоте: пользователю необходимо выбрать защищаемый раздел диска, после чего программа автоматически будет возвращаться к эталонному состоянию информации на выбранном разделе, после каждой перезагрузки или выключения компьютера. Сопутствующее свойство моментального отката в том, что он действительно происходит моментально. Вы просто включаете свой компьютер, и он загружается в эталонном состоянии раздела. Хочется так же добавить, что перечисленное описание относится исключительно к линейке продуктов 1.х, а с выходом новых версий, функциональность продукта будет существенно расширена. Скажите, есть ли возможность использовать DWC в домене (установка через групповые политики, централизованное администрирование)? Если да, расскажите подробности, ну а если нет, то ожидается ли такая возможность в будущем. Вопросы подобного характера стали нам очень знакомы, когда мы начали получать множество пожеланий от наших пользователей из корпоративного сектора. Именно поэтому в самой ближайшей перспективе данная возможность будет доступна. Поделимся секретом: в версии 2.х станет возможным удалённое централизованное управление по защищенному каналу через интерфейс Disk Write Copy Server Edition, а также поддержка компьютеров в домене Программа позволяет вернуться в "прошлое", т.е. к первоначальному состоянию системы, а как быть с установленными в процессе работы программами? Да, в обычных случаях можно разделить диск на разделы, но как тогда быть с обновлениями для ОС, которые обязательно должны ставятся в системные папки?
В этом случае необходимо использовать Disk Write Copy Professional или Disk Write Copy Server, в которых реализован Инкрементный режим защиты. Он позволяет сохранять изменения от сеанса к сеансу и очищать их только при изменении режима защиты. В остальных случаях, используя Disk Write Copy линейки 1.х, необходимо отключать защиту, после чего устанавливать обновления. Мы хотим напомнить, что защита системы происходит только тогда, когда для защиты выбран именно системный раздел диска. Известно, что Вы активно сотрудничаете с компанией Intel. В чем это заключается (применительно к Вашей программе)? Мы действительно успешно сотрудничаем с компанией Intel. В рамках своей программы поддержки разработчиков, Intel предоставляет нашей компании всевозможные сервисы и инициативы, которые мы используем, а наши сотрудники посещают семинары Интел. Благодаря этому, компании CCS удалось успешно оптимизировать свои программные продукты под процессоры Intel, в том числе под такие, как Intel Itanium (ia64). Учитывая развитие нашего сотрудничества, мы уверены, что оно принесет еще не мало плодов. Как Ваш продукт "уживается" с антивирусами и другим ПО для защиты. Возможны ли конфликты и неприятные последствия? Disk Write Copy — это технология, которая является прозрачной прослойкой для всех приложений. Однако, несмотря на наличие у наших исполняемых файлов сертификатов, одной из старейших компаний - администраторов сертификатов, компании GlobalSign Inc - доверенного центра Microsoft, некоторые антивирусы находят их небезопасными. Учитывая, что наличие у компании сертификатов на их продукт полностью снимает опасение на счет его безопасности, встает вопрос об эффективности работы подобных антивирусов. В любом случае, наши специалисты отслеживают подобные проблемы и находят пути для их решения. Используются ли какие-нибудь защитные механизмы для хранения созданной копии диска? Да, конечно, защищенные данные, а также оригинальный образ диска защищены от изменений извне. То есть доступ к ним закрыт через стандартные интерфейсы работы с диском в Windows, в том числе и низкоуровневые. Кроме того, применяется шифрование изменённых данных на диске. Подобные механизмы присутствуют в линейке 1.x, а в линейке 2.x будет значительно расширен функционал, в плане защиты не только созданной копии диска, но и физических дисков целиком. Полную информацию обо всех новшествах и изменениях в линейке 2.x можно будет узнать из наших пресс-релизов после официального выхода 2.x Почему сегодня уже недостаточно Антивируса и персонального Firewall для обеспечения достойного уровня безопасности? Антивирус и Межсетевой экран, он же фаервол, являются достойными примерами продуктов, обеспечивающих безопасность. Антивирус хорош для сканирования информации на предмет вредоносных кодов, а фаервол для отражения сетевых атак. Понимая это, уже становится ясно, что для эффективного уровня обеспечения безопасности необходим комплекс мер и программных продуктов, а не один из них.
Однако именно из минусов программных продуктов и рождаются новые. Одним из минусов любого антивируса является то, что они не знают вредоносных программных кодов, которые еще не успели придумать и написать. А ведь новые вирусы появляются регулярно. Одним из последних распространившихся является Downadup, успевший заразить более 5 млн компьютеров за 4 дня. Это лишний раз подчеркивает, что разработчики антивирусов не успевают вовремя отслеживать и нейтрализовать все угрозы. А ведь не все могут позволить себе обновлять антивирусную базу ежедневно, так как не все имеют постоянное соединение с Интернет. Значит существует потенциальная возможность заражения системы пользователя, которую редко удается даже отследить вовремя. Disk Write Copy избавляет от подобных угроз, так как любой вирус, который проник и размножился на защищенной системе, будет обманут. Он проникнет на виртуальную систему и размножится на виртуальном диске, которые после выключения и перезагрузки будут стерты. Даже реестр останется в целости и сохранности. Наше приложение полностью избавляет не только от разрушительных последствий подобных проникновений, но и служит удобным средством защиты системы и данных, при работе на компьютере неопытных пользователей. Ведь родители могут оставлять компьютер детям, не беспокоясь, что те смогут что-то изменить или испортить к их приходу. Любые неосторожные действия компенсирует обычная перезагрузка. Расскажите про Ваших клиентов (самых крупных). Мы работаем с очень разными клиентами, которыми являются как конечные покупатели, так и компании – системные интеграторы, учебные учреждения и множество других, так или иначе связанных с ИТ-отраслью. К сожалению, мы не сможем перечислить всех, но и не хотим, чтобы внимание было уделено единицам, так как мы одинаково уважительно относимся ко всем нашим пользователям. Информация о наших партнерах и клиентах находится в свободном доступе в сети Интернет. Расскажите про планы на будущее. Какой функционал планируется и можно ли ожидать версий для nix и MacOS? В данный момент версий для nix и MacOS не существует, но их разработка ведётся. Вообще мы планируем создать удобный комплекс для системных администраторов, чтобы облегчить их, и без того тяжелую ношу J. Не хотелось бы раскрывать в данный момент всех своих планов, так как в процессе разработки, некоторые функциональности, изначально казавшиеся актуальными, становятся в наших глазах примитивными. И мы создаем более ёмкую систему, которая решает, в том числе, первоначальную задачу.
Свой бизнес в сети Cоздаем софтверную фирму Многие программисты мечтают о своей фирме по продаже собственного программного обеспечения и, к счастью, сейчас для этого есть все возможности. Самым доступным способом заработка является продвижение и продажа продукта через интернет в специальных каталогах программного обеспечения. На английском языке это называется shareware-бизнес. В этой статье информация для начинающих. Автор и его программа в сети Итак, программа у Вас есть. Теперь дело за документацией к ней (файлы справки обязательны) и интернет-сайтом. Справку можно написать с помощью специальных редакторов (Help&Manual, Help Workshop, Help Development Studio), которые позволяют без каких-либо навыков создать справочные файлы. Обзоры этих и других утилит можно легко найти на просторах сети, и еще не забудь сделать инсталлятор к программе (например, с помощью InnoSetup), статья о которых была в одном из последних выпусков Vr-online. Сайт или домашняя страница – это одно из ключевых составляющих проекта. Домашняя страница должна быть расположена для солидности в домене второго уровня (например, www.mysoft.com), а вот зону размещения RU или COM рекомендую выбрать по простому принципу: если планируешь продавать только в России, то твоя зона ru, а если есть перспектива выхода на западный рынок, то однозначно com. Зарубежные пользователи больше доверяют сайтам этой зоны. Отдельно следует подумать о дизайне домашней страницы: тут 3 варианта – обойтись своими силами, заказать или сделать по аналогии. Некоторые хостинг-компании (фирмы, предлагающие места для твоего сайта) для клиентов предоставляют установленную систему управления контентом (CMS), которые позволяют просто и быстро создать интерактивный сайт даже неподготовленному человеку.
Вперед Допустим, все готово: программа, сайт есть, теперь надо продвигать свой продукт. Для организации продаж в России обрати внимание на каталоги www.allsoft.ru и www.softkey.ru. Здесь ты сможешь зарегистрироваться, после чего получишь бланк договора, который надо распечатать, заполнить и отправить по почте. После заключения договора собственные программы попадут в каталог этих фирм, при этом не надо беспокоиться о налогах: по договору эти компании выступают в роли налогового агента. Добавлю, что для заключения договора с Softkey необходим банковский счет, а вот для Allsoft достаточно указать кошелек WebMoney. Помимо вышеперечисленных каталогов программного обеспечения, существует большое количество других сайтов, где после бесплатной регистрации можно размещать описания своих программ (например, www.softforfree.ru, www.1001soft.ru, www.freesoft.ru и другие)
Немного о правах У начинающих часто возникают вопросы об авторских правах: важно ли иметь лицензию на среду разработки, от чьего имени продавать, требуется ли регистрация программы? Отвечу по порядку - лицензию на среду разработки и другие инструменты, включая операционную систему, в идеале надо иметь обязательно. Не беда если их нет, можно обойтись бесплатными аналогами, либо в случае успеха приобрести позднее, в России не все богатые. - Выбор имени продавца иногда ставит в тупик разработчика. Обычно все поступают просто: продают программы от имени фирмы (например, ZRD Labs), так как, во-первых, это звучит солидней, а во-вторых, пользователи доверяют больше компаниям. В случае удачи можно основать свою фирму и вперед. - Специальной регистрации программы не требуется, за разработчиком автоматически закрепляется авторское право.
Что еще? Теперь у тебя есть информация к размышлению, и если надумаешь создавать свой бизнес, то пожелаю удачи! И не медли – приступай сейчас!
Written by: Dimych E-mail: maldmig@bk.ru
Великий и могучий умирает? Не первый раз уже и в газетах, и на просторах Интернета доводится читать о том, что, оказывается, русский язык вымирает, мутирует в чудовищную смесь ругательств, а также "интернетного и SMS-жаргона". Наткнувшись еще на один подобный материал и ознакомившись с его "аргументированным" содержанием, не смог сдержаться и решил рассмотреть еще несколько моментов, которые почему-то умалчивались (и наверняка будут умалчиваться и в дальнейшем) участниками пресс-движения "за чистоту русского языка". Перечитывая классиков Не будем заглядывать в далекое прошлое, откроем, например, Шукшина. Лично я, впервые читая его рассказы, частенько спотыкался на многочисленных "ишшо", "итти" и особенно "што". Каких только я версий не строил - и опечатки редакторов, и намеренное искажение слов ради передачи манеры речи героев произведений. Ан нет, оказывается, в словарях того времени русским по белому было сказано, что именно так и нужно писать. Это что же - современные "еще", "идти" и "что" - это слова-уродцы в русском языке?
Мы учимся, на старших глядя Такая вот, немного искаженная грибоедовская строчка, пожалуй, как нельзя лучше может охарактеризовать обилие ругательств в лексиконе современной молодежи. Кстати, заметьте, далеко не всей. Пример: прогуляйтесь по двору какого-либо уважаемого ВУЗа и послушайте речь тамошних студентов. Конечно, речь эта не будет изобиловать вензелями вроде "сударыня, покорнейше прошу Вас...", но и матерной речи будет весьма немного, уверяю Вас. А теперь пройдитесь неподалеку от ПТУ - и Вы услышите совершенно другую речь и отличающийся от первого примера лексикон. Заметьте, возрастной порог примерно одинаков, отличие лишь в окружении. Но вернемся к истокам. Есть предположение, что речь молодого поколения зависит прежде всего от их окружения, но в большей части даже не от сверстников, а от семьи, от родителей. Да-да, уважаемые наши "отцы": это не вы ли в день получки стабильно приползаете домой "на бровях", а то и благополучно остаетесь отдыхать в вытрезвителе? А, может, это не вы в магазинах "общаетесь" с продавцами и вашими же товарищами по очереди на весьма повышенных тонах, ничуть не смущаясь того, что Ваш маленький внук держится своими крохотными ручонками за Вас и впитывает науку общения с людьми в публичном месте. Конечно, гораздо легче все списать на государство и телевидение, чем заглянуть в зеркало и, собравшись с духом, искренне признаться, что это по Вашей вине каждое второе слово, произносимое ребенком – нецензурное (первое, естественно, “мама”). Самим себе признаться да, это сложно!
Не нравится картонный век если - дорога скатертью в каменный. Теперь настала очередь Интернет-сленга. Лично мне, эта тема наиболее близка, поскольку и любимой работой, и хобби у меня является именно создание новых ресурсов в глобальной Сети. И что больше всего раздражает в "борцах за чистоту языка", так это, пожалуй, то, что люди критикуют, совершенно не разобравшись в предмете. Грубейшие ошибки, вроде "в
"Контакте"" вместо "ВКонтакте" или даже "ACQ" вместо "ICQ". А чего стоит отождествление понятий "хакер" и "киберпреступник", хотя ставить знак равенства между этими словами ни в коем случае нельзя. В Сети практически все вошедшие в широкое употребление слова и выражения имеют свою предысторию, а не появляется "из ничего". Опять же, стоит признать тот факт, что Интернет все плотнее входит в жизнь людей. Если знать, как пользоваться ресурсами Сети, то можно очень здорово облегчить получение нужной информации для себя, а информация в наше время - один из наиболее ценных ресурсов. Время идет все быстрее, нам уже нельзя ждать пару недель, пока почта соизволит доставить письмо со срочной информацией до адресата - нам быстрее написать ему в джаббер или аську (ICQ), отправить сообщение по мылу (e-mail) или созвониться по Skype. Информация двухнедельной давности сейчас интересна разве что историкам, современному человеку нужно самые свежие данные. Вывод прост: Интернет будет все теснее и теснее входить в нашу жизнь, использование Сети станет все более обыденным и повседневным. Значит, и Интернет-сленг - тоже. И, поверьте, мало кому нужен будет переводчик. Что же касается языка "падонкаф", я соглашусь с высказыванием "как дети придумывают свой тарабарский язык". Практически так и есть - "падонки" - это, в большинстве своем, подростки, этот язык уже теряет свою "модность" в Сети. Вот, пожалуй, и все, что я хотел Вам расказать, осталось лишь подвести итог. Да, я согласен с тем, что русский язык меняется. Вот только думаю, что это не "уродование" языка, а его трансформация с поправками на время, в котором мы живем. Когда-то и вальс считался вульгарным, а парики и пудра были нормой мужского туалета. Так может быть вся эта "борьба за великий и могучий" - всего лишь борьба с ветряными мельницами?
Written by ZeroXor WWW: http://zeroxor.ru
Inkscape: новый взгляд на векторную графику Когда говорят о работе с векторной графикой, обычно имеют в виду определенный круг задач, решаемых в процессе создания и редактирования векторного изображения. В данном случае, я преследую цель ознакомить не с приемами работы над векторными изображениями, а как верно сделать правильный выбор необходимого инструментария. Все остальное, Вы легко найдете в многочисленных самоучителях и руководствах.
Open Source Приятно наблюдать, как проекты с открытыми исходными кодами интенсивно набирают популярность, начинают повсеместно использоваться, отлично конкурируют с коммерческими, даже в чем-то опережая некоторые свои коммерческие аналоги. Это предоставляет сторонним разработчикам отличную «платформу» для реализации своих идей. Одним словом, open source, активно «вливается» в жизнь рядового пользователя и девелопера, привнося много различных новшеств и открытий в рынок программных средств в целом. Мир открытых исходников уже давно предложил нам опробовать веб-браузер Mozilla, почтовый клиент - Thunderbird, графический редактор - Gimp, текстовый редактор OpenOffice и т.д. Данные продукты прочно завоевали свою нишу и дальше продолжают завоевывать места в рейтинге часто используемых программных продуктов и большинство пользователей все чаще присматриваются к данным программам. Сегодня хочу поговорить об одном инструментарии, который способен облегчить жизнь вебдизайнерам, как начинающим, так и опытным специалистам. Речь пойдет об Inkscape. Как вы, наверное, догадались — это бесплатный, открытый (программа распространяется на условиях GNU «General Public License») векторный графический редактор, который удобен для создания как художественных, так и технических иллюстраций. Программа также может использоваться в качестве САПР (система автоматизированного проектирования). Я не зря завел о ней речь, потому как основным форматом, который использует данная программа, является «SVG», поэтому любой желающий (имеется в виду специалист, обладающий опытом программирования) имеет возможность написать плагины, модули и другие расширения для данного продукта. Помнится мне, мы уже поднимали тему о данном формате на страницах нашего журнала, так что, не ленись — поищи в своем электронном архиве (или скачивай майский журнал за 2009 г.), а я, вкратце, напомню немного, чем так примечателен и интересен данный формат.
Создателем является компания Adobe, и она же проводила активное продвижение этого формата в массы. В основу SVG легли языки разметки VML и PGML (язык прецизионного выделения и структурирования документов). Важной особенностью нового формата, являлось то, что поддерживалась как неподвижная, так и анимированная (декларативная) и интерактивная (скриптовая) графика. А это, так или иначе, должно было привлечь внимание «народа». Формат файлов был традиционно текстовый, и поэтому предполагалась возможность редактирования с помощью различных текстовых редакторов (большинство браузеров, тоже позволяют просматривать код svg-документа). SVG может включать в себя не только графику, которая, кстати, меньше по весу и иногда даже лучше по качеству JPEG/GIF/PNG изображений, но и java-код, который позволяет анимировать изображения. Отдельно стоит отметить возможность использования модификаторов, т.е. попросту фильтров (любителям различных эффектов посвящается), к примеру: размытие, выдавливание, сложные системы трансформации и др. При возможности в документы можно вставлять изображения (PNG, GIF или JPG), в качестве отдельных элементов. Кстати, в Google Map данная функция поддерживается опционально. Inkscape может достаточно серьезно конкурировать с другими векторными редакторами, такими как Adobe Illustrator, CorelDRAW, Xfig, Xara Xtreme и т.п. Векторная графика— это использование геометрических примитивов, таких как точки, линии, сплайны и многоугольники, для представления изображений в компьютерной графике. Термин используется в противоположность к растровой графике, которая представляет изображения как матрицу пикселей (точек). Мне хотелось бы еще сделать некоторый акцент, на том, за счет чего выражается экономичность векторных изображений. Как мы уже знаем, описание отрезка прямой происходит путем указания координат его концов (для окружности — координаты центра и радиус). Это служит для компьютера четкими указаниями как надо строить ту или иную фигуру, этот процесс можно ассоциировать с черчением. Поэтому хранить информацию о каждой точке не целесообразно. В растровых форматах, информация о каждой точке хранится отдельно. Интерфейс программы Inkscape практически ничем не отличается от аналогичных векторных редакторов. При первом ознакомлении, мне он чем-то напомнил Corel Draw, но в более упрощенном виде. По сравнению с последним Inkscape, новыя версия более «шустрая». Inkscape также поддерживает метаданные «Creative Commons», правку узлов, слои, сложные операции с контурами, векторизацию растровой графики, текст по контуру, завёрстанный в фигуру текст, редактирование XML-данных напрямую и многое другое. Последняя версия очень обрадовала новыми возможностями: автосохранение по таймеру, кривые Спиро, автоматические узлы, новый инструмент Ластик, новые режимы в инструменте Корректор, новая панель параметров прилипания и улучшенное прилипание, новые динамические контурные эффекты, более 200 предустановленных фильтров SVG, новые фильтры экспорта в PS и PDF на основе Cairo, встроенная проверка орфографии, множество новых расширений, оптимизированное сохранение SVG и это еще не все. Векторный редактор Inkscape (http://www.inkscape.org) является отличным инструментом, как для опытного дизайнера, так и для начинающего пользователя, и вполне может использоваться для обучения школьников. Кроме этого, редактор может использоваться для разработки макетов школьных газет, создания объявлений, визиток, листовок и грамот, чем с радостью я и пользуюсь. Имеется великолепный встроенный учебник на русском языке, особенностью которого является возможность редактировать примеры прямо в тексте учебника, который является документом Inkscape.
Как мы уже выяснили Inkscape, «заточен» для работы со стандартными svg-файлами версии 1.1, но разработчики пошли дальше и придумали свой формат документов. Рассмотрим его основные отличия от предшественника: • содержит ряд расширений для увеличения функциональности SVG v1.1; • документы Inkscape SVG можно сохранить как Plain SVG с возможностью изменять неподдерживаемые в обычном SVG элементы как контуры (что уже наводит на некоторые позитивные мысли); • документы можно сохранять и открывать в сжатом виде, с использованием алгоритма компрессии gzip; • использование групп SVG как слоёв, перемещение документов между слоями. Последний пункт примечателен тем, что с помощью Inkscape можно создавать достаточно насыщенные векторные изображения, при этом размер файла будет не так велик, по сравнению с растровыми. Несмотря на огромное многообразие векторных графических редакторов, основные приемы работы с векторными изображениями остаются неизменными. Поэтому, как бы ни выглядели пугающе программные новинки, сторониться их, не имеет никакого смысла. Ссылки по теме: Официальный сайт Inkscape - www.inkscape.org Примеры работ - www.inkscape.org/showcase/index.php?lang=ru Вики-сообщество — www.wiki.inkscape.org/wiki/index.php/Inkscape
Written by Jimmy Jonezz E-mail: ant.pet.koz@gmail.com
Программирование: поиск решений Альпинист забрался на гору. Высота её 100 метров. По каким-то причинам, альпинисту необходимо спуститься как можно быстрее. У него есть верёвка длинной 75 метров. Он нашёл место, куда можно было бы привязать верёвку - это дерево на краю отвесной вертикальной в этом месте скалы. Ниже него на 50 метров есть другое дерево, которое растёт прямо в скале горизонтально и на него можно спуститься, но до земли останется 50 метров. Как альпинисту выбраться из этой ситуации? Если вы смогли за несколько минут найти правильный подход к решению этой задачи, то я убеждён, что вы способны оценить всю прелесть задач, стоящих перед программистом. Если вам приходилось решать задачи повышенной сложности по физике, алгебре или геометрии, вы наверняка замечали, что нередко способов решения масса, но, к сожалению не все из них могут быть восприняты как правильные, в силу своей необычности. Однако эти точные науки просто меркнут на фоне программирования, ведь это наука, которая тесно переплетается с любой точной наукой в зависимости от поставленной задачи. Способов решения не то, что много. В идеале нужно находить наилучшее, самое рациональное. Но количество решений действительно огромное, и находить нужное и есть задача хорошего программиста. Изначально, программирование - это область математики. С развитием технологий, простые расчёты на бумаге удалось спроецировать на обобщенные формулы, идеи, кремний... Но программирование не стояло на месте. Необходимость в новых программах, в их качестве росло столь быстро, что стали, появляется новые парадигмы, новые технологии программирования. Программирование стало разделяться на две составные части: программирование в исходном виде - математика, выраженная в командах процессора (по моему мнению, прикладная наука в чистейшем виде) и кодирование - использование существующих технологий для решения прикладных задач. К счастью, полное их разделение в качественных проектах невозможно. Посему, если вы хотите качественно решить задачу, вам всё равно придётся прибегнуть к математике. Видна аналогия? Программирование (в широком смысле) - это те же задачки, но с прикладным назначением. Решение задач можно условно разбить на несколько частей: грамотная постановка задачи, поиск решения, реализация в коде (что, по сути, и является кодированием) и проверка программы на корректность её работы. Первое математика. Третье - использование отработанных технологий. А вот второе крайне интересно. Вам надлежит абстрагироваться от окружающей действительности, что бы представить себе задачу, варианты её решений. На решение задачи, представленной в самом начале, мне потребовалось три минуты, и ещё две я слушал условия задачи. Две минуты из трёх я потратил на корректную постановку задачи, а именно, поиск того, что требуется найти. А затем уже искал способ решения меньше минуты – секунды :-). Важный момент, который необходим при решении – правильная постановка задачи. Чем точнее задача поставлена, тем очевиднее становятся решения. Лично я, после подстановки, представляю задачу "графически" и ищу решение, которое мне больше всего подходит. Поиск решения трудно красиво описать, но это и есть самый увлекательный и интересный момент в решении задачи, то для чего вообще стоит этим заниматься. К счастью, в современных условиях программирование как таковое, не такое уж и простое, каким я его описал. Интеграция - важный этап развития любой науки. Опытный программист тоже непременно интегрирует многое во многое :) Парадигмы, технологии, подходы... Самый
смелый получает хороший проект и является лидером. К счастью, необходимость такого смешения означает, что программирование не умрёт, потому что для задач найдутся все решения, а будет постоянно развиваться. Прикладное ПО всегда будет изменяться, в силу нового аппаратного обеспечения и системного ПО. То же самое верно и для инструментального ПО. Однако нужно выделить ещё и Malware и технологии взлома - важную часть того, что вертится на наших компьютерах. Оно тянет за собой и качество прикладного и системного ПО, а следовательно и технологии их разработки. В одном из последних проектов я так извращался - иные преподы в универе меня бы побили, если бы им было нужно вникнуть в смысл того что я пишу - потому что некоторые моменты на первый взгляд не очень логичны. Приходится использовать смелые идеи, что бы защитить программу, повысить её рабочие характеристики. И мне кажется, что такая необходимость только к лучшему. Развитие всегда к лучшему. Пока что я рад, что я разработчик. Живу той жизнью, что хотел. У меня нет своего авто бизнес класса, но я получаю удовольствие от работы, от процесса, и пока считаю, что даже если это не будет приносить мне достаточно денег, я всё равно не променяю это ни на что другое. Ни на врача, ни на учителя рисования, ни на юриста, ни на менеджера - всё это скучно и ни в чём не полезно как я думаю, а значит в моей жизни этому не место.
Written by Войтов Евгений aka Ekstrem
Кристальная музыка – обзор Kristal Я, будучи наивным молодым человеком, верю, что существуют бесплатные программы, в которых можно создавать музыку не хуже, чем в коммерческих продуктах. Сегодня под моим пристальным взглядом еще один продукт – Kristal. Эта разработка выросла из дипломной работы одного молодого человека по имени Matthias, и она бесплатна для некоммерческого использования, и стоит 24.90 евро для коммерческого, соответственно. Посмотрим, что нам предлагает автор в своей программе (взято с сайта): 16 audio tracks 32 Bit floating point audio engine 44.1 to 192 kHz sample rate Downmix to 16/24/32 Bit audio files 3-band parametric EQ & 2 VST insert slots per channel 3 VST master effect slots ASIO low latency audio driver support 4 KRISTAL Plug-In slots Load/Save KRISTAL project files Supported file formats: WAVE, AIFF, FLAC, OGG Vorbis Моменты насторожившие, меня выделены красным цветом, порадовавшие – зеленым. Несколько пугает возможность добавления только лишь 2х VST плагинов на канал и 3х на мастер-шину – просто преступно мало, 16 треков тоже довольно настораживают, но для домашних демо-записей должно хватить… Вес программы – порядка 4мб – легко скачать, но какие возможности за этим кроются? Разрываемый сомнениями, я установил и запустил программу. Взглянем на интерфейс:
Минималистично, но дружественно, на мой взгляд. Программа выглядит довольно функционально и представляет собой модульную DAW. Поэтому рассмотрим каждый модуль отдельно.
KRISTAL Waver
Это сердце программы – секвенсор. Представляет собой привычный многодорожечный рекордер, аналогичный другим программам. Приятно удивлен: нет ничего лишнего, и довольно функционально: возможность добавления клипам fade-in/fade-out/crossfade, можно «разрезать», «склеить» клип. Удобная кнопка импорта файлов на каждый трек. Переключатель моно/стерео, мониторинг уровня, возможность выбрать вход для записи и тд. – словом очень неплохо и довольно продуманно! До коммерческих программ конечно еще очень далеко, но с другой стороны и немногие аналогичные приложения могут похвастаться подобной эргономикой! Не отлично, но я думаю, что четверку с небольшим минусом поставить можно вполне справедливо!
Transport Панель транспорта довольно удобна и также функциональна. Автор явно хорошо знаком с ведущими программами в этой области, так как видно, что стремился взять самое лучшее!
Что мы здесь имеем: стандартные кнопки управления (обидно, что кнопка записи не назначена ни на одну из клавиш и как это сделать я не нашел), есть метроном, причем можно отрегулировать темп, размер и громкость, можно включить предварительный отсчет, с возможностью выбора количества ударов – очень удобно, когда все в одном месте! Пятерка однозначно!
Mixer Часть любой программы, к которой я отношусь наиболее внимательно, так как именно за ней приходится проводить наибольшее количество времени. Для глаз он не очень приятен, с точки зрения дизайна, но, это меня мало волнует.
Микшер, самый обычный – mute, solo, панорама… Но действительно, только два слота под внешние плагины – большущий минус, зато есть уже встроенный 3х полосный эквалайзер:
Надо сказать он относительно неплох, но конечно, как универсальную замену сторонним продуктам его нельзя рассматривать. Кратко и о том, какие еще плагины идут в комплекте: KristalMultiDelay – шикарный дилей, можно сделать много интересных эффектов.
KristalChorus – эффект хоруса, все нужные настройки на месте, претензий нет.
Kristalizer – Компрессор/Лимитер, у которого отсутствуют ручки атаки и релиза, но есть интересная ручка drive.
KristalReverb – простой ревербератор.
KRISTAL LiveIN
Последний модуль, позволяющий, играть в реальном времени с VST-плагинами, подключив гитару или микрофон, к звуковой карте.
Выводы Глупо ждать профессионализма от подобного софта, но на данный момент программа уже смотрится (хотя бы смотрится – это уже важно) серьезно. По всей видимости, автор забросил развитие этой программы, ударившись в разработку коммерческого софта (его можно понять, тем более, что он явно знает толк в деле), либо же развивает её крайне медленно. Хотелось бы поддержки midi, хотелось бы большей свободы с VST плагинами, и еще много мелких замечаний. НО! Со всеми функциями, заявленными, разработчиком программа справляется довольно хорошо, и это радует. Не зря компания Behringer включает её в поставку, с некоторыми своими продуктами. Kristal не станет вашей основной DAW. Тем не менее это очень удобный инструмент для быстрой записи демок, и обмена идеями с товарищами по Интернету. Эта программа может прижиться и в арсенале у не слишком придирчивого подкастера, а так же составит хорошую порта-студию вместе с маленьким нетбуком. Одним словом – там где не стоит большая планка качества, но критичны быстрота и удобство эту программу стоит попробовать, быть может для вас на станет самым подходящим вариантом.
Written by Овчинников Михаил Night_Storm WWW: http://nstorm.3dn.ru/
Fuzzing. Технология охоты за багами Современные приложения просто кишат уязвимостями различного рода: переполнение буфера, утечки памяти, плохое шифрование, недостаточная проверка входных данных и прочее. И это неудивительно, ведь большое число программного обеспечения пишется для заработка денег, при чем мало кто заботится о безопасности своего детища, выпуская на рынок дырявые приложения. Самое парадоксальное то, что затраты на постоянные обновления этих самых ошибок приравниваются почти к одной третьей дохода от продаж, а иногда и больше, не говоря фуже об испорченной репутации. Взять ту же Microsoft. Посмотрите на любые bug-траки, там можно найти кучу самых разнообразных багов, их описания и эксплоиты к ним. И недобросовестные дяди этим пользуются, получая возможность эксплуатировать эти самые недоработки разработчиков для написания вредоносного кода. Чтобы не допустить подобного безобразия на нашей Родине я хочу в рамках этой статьи рассмотреть давно известную на Западе и перспективную технологию поиска ошибок - фаззинг. О ней, кстати, как об одном из этапов SDL говорилось на недавно прошедшей конференции Microsoft, отчет о котором можно почитать в в одном из предыдущих номеров компьютерной газеты.
Интро Прежде всего посетим Википедию, чтобы определится с теорией. Итак, фаззинг (Fuzzing) технология тестирования программного обеспечения, когда вместо ожидаемых входных данных программе передаются случайные или специально сформированные данные. В большинстве своем это некорректно составленные данные. Смысл такой проверки сводится к тому, что программист не знает, какие данные будут переданы приложению/протоколу/функции, поэтому его задача предусмотреть и проверить как можно больше вариантов. Данные передаются на вход программным интерфейсам, включающим: – Файлы – Сетевые порты – API В случае если программа зависает или аварийно завершает работу, это считается нахождением дефекта в программе, который может привести к обнаружению определенной уязвимости. Самым простым примером может служить переполнение буфера. Умный злоумышленник может составить грамотный запрос, содержащий вредоносный код и данные, которые вызовут переполнение. Причем приложение может и не завершить свою работу, но обязательно выполнит код. Та же самая ситуация складывается и с обработкой данных из файлов и протоколов, обработкой передаваемых параметров функции и прочим. Примером неверной обработки файлов служит найденные мелко-мягкими с помощью фаззинга ошибки в файлах XLS, PPT, DOC и BMP. И это неудивительно, ведь синтаксический анализ сложных структур данных – это сложная задача, сложный код будет иметь ошибки, и некоторые из этих ошибок могут выявить уязвимости безопасности. Именно такие участки кода, занимающиеся анализом каких либо данных, должны быть проверены в первую очередь. Хотите живой пример? Ок, тогда посмотрим баг-трак за 08.10.2009 на xakep.ru. Находим первую уязвимость (http://www.xakep.ru/post/49703) и читаем ее описание: «Уязвимость позволяет удаленному злоумышленнику выполнить произвольный код на целевой системе. Уязвимость существует из-за ошибки в проверке входных данных при обработке содержимого AVI файлов и заголовков AVI файлов. Атакующий может передать специально
сформированные файлы, что приведет к выполнению произвольного кода». Вот и наглядный пример такой ошибки, которую теоретически можно было устранить путем фаззинга. Что же там неправильно обрабатывается можно посмотреть в эксплоите, который есть на страничке с описанием уязвимости (смотрим ссыль выше). Фаззинг по своей сути является динамической технологией тестирования безопасности. Под статической технологией я подразумеваю любые программные средства, которые производят тестирование кода по каким-то определенным шаблонам. Средства статического анализа кода позволяют обрабатывать большее количество кода благодаря автоматизации, но результаты строго ограничены и могут быть ложными, что не есть гуд. Фаззинг же динамичен, он не имеет строгих шаблонов и критериев и может быть просто автоматизирован, выполняясь непрерывно, но он работает случайным образом и может иметь проблемы при работе с более глубокими частями кода. Поэтому наилучшим решением проблемы будет сочетание нескольких этапов проверки исходного кода: 1. Проверка на наличие багов человеком 2. Проверка средствами статического анализатора 3. Фаззинг Такой анализ позволит достичь наиболее качественного результата, но не гарантирует 100% отсутствие ошибок в коде. «Зачем тогда производить такую сложную проверку, если она не дает требуемого результата?» - спросят некоторые. Затем, чтобы не тратить свое время, средства и нервы на закрытие найденных кем-то багов в нашем продукте в будущем. И как говорил мой преподаватель по программированию «Любая программа содержит хотя бы одну ошибку» ;). Что касается преимуществ фаззинга, то их довольно-таки много: • Легко автоматизируется • Вызывает выполнения большинства проверок в приложении • Находит очень много ошибок • Большой объем тестирования с множеством вариаций • Находит множество проблем связанных с надежностью (многие из них являются и потенциальными проблемами безопасности) На постсоветской территории фаззинг пока широко не практикуется, поэтому специалистов в данном направлении очень мало. Это связано с тем, что у нас не хватает литературы на русском по данной тематике. В конце статьи я приведу названия некоторых книг, которые можно найти на прилавках книжных магазинов или заказать в Интернете. Именно они повысят вашу осведомленность по данной тематике, а она поверьте, заслуживает не одной книги. А пока приступим к рассмотрению фаззеров.
Программы для фаззинга Фаззер – средство (приложение или фреймворк), позволяющее проводить автоматизированный фаззинг исходного кода, файлов, приложений и прочего. Проведенный мной поиск в сети показал, что на момент написания статьи существует не так уж и много фаззеров, доступных для обычных пользователей. В основном существующие фаззеры предназначены для работы с UNIX системами и приложениями, но и Windows не обошли стороной. Рассмотрим самые востребованные из них: 1. OWASP JBroFuzz
OWASP JBroFuzz – фаззер уязвимостей, работающий с HTTP, SOAP, XML, LDAP и прочими сетевыми протоколами. Данный фаззер поддерживает довольно большое количество самых разнообразных проверок на: 1. 2. 3. 4. 5. 6.
Межсайтовый скриптинг (Cross Site Scripting - XSS) SQL инъекции (SQL-inj) Переполнения буфера (buffer overflows - BFO) Ошибки форматной строки (format string errors - FSE) Целочисленное переполнение (integer overflows - INT) и многие другие уязвимости крайне нестандартными методами.
Отличительной особенностью этого фаззера является возможность редактировать содержимое так называемых «генераторов», на основе которых и производится анализ. Скачать и попробовать его в работе можно по ссылке http://www.owasp.org/index.php/Category:OWASP_JBroFuzz 2. Bunny the Fuzzer На небезызвестном среди ИТ-специалистов проекте Google Code можно найти еще один фаззер - Bunny the Fuzzer . Он предназначен для анализа приложений, написанных на C. Работает на уровне компилятора, устанавливая «ловушки» на вызываемые функции, имея возможность исследовать передаваемые параметры и результаты работы. Такой подход позволяет проводить глубокий и последовательный анализ, что положительно отражается на результатах тестирования. Работает под Linux, FreeBSD, OpenBSD и Cygwin. Скачать можно тут http://code.google.com/p/bunny-the-fuzzer 3. SPIKE Проект SPIKE - это попытка написать удобный и универсальный фаззер , предназначенный для тестирования новых и неизвестных сетевых протоколов. Включает в себя тестирование NTLM аутентификации методом грубой силы, проверку на переполнение буфера, парсер web приложений и DCE-RPC (MSRPC), а так же много другого полезного функционала для профессионального специалиста по тестированию безопасности. Работает только под управление Linux. Скачать можно по ссылке http://www.immunitysec.com/downloads/SPIKE2.9.tgz 4. PFF (Php Fuzzing Framework) Данная маленькая утилита была разработана с целью поиска ошибок в PHP коде. Написана на C, работает под управлением unix-based систем. Линк - http://setec.org/~calcite 5. ProxyFuzz Данный фаззер, написанный на Python, предназначен для случайного изменения сетевого трафика., что позволяет тестировать сетевые протоколы. Работает по принципу man-in-themiddle, поддерживает TCP и UDP протоколы (причем можно настроить на фаззнг только опредеденного протокола). Пример его работы можно найти на http://theartoffuzzing.com/demo4, а скачать и самоу проверить в работе http://theartoffuzzing.com/joomla/index.php?option=com_content&task=view&id=21&Itemid=40. Существуют и другие фаззеры, например для анализу XML файлов или Oracle. Найти их можно по следующим адресам, там же есть и описание, зачем, как и что именно они тестируют:
http://www.threatmind.net/secwiki/FuzzingTools http://www2.packetstormsecurity.org/cgibin/search/search.cgi?searchtype=archives&counts=50&searchvalue=fuzz++
Заключение Вот я и закончил рассмотрение самых основных понятий, связанных с процессом фаззинга. Если вас заинтересовало эта технология тестирование программного обеспечения, то советую почитать некоторые книги, посвященные ей. Это: «The Security Development Lifecycle» (авторы Michael Howard и Steve Lipner) рассматриваются способы фаззинга исходного кода на C++, средства фаззинга файлов, методику исследования безопасности и прочее;
«Искусство взлома и защиты систем» (Козиол Дж. Личфилд Д. Эйтэл Д. и другие) – рассмотрены различные способы тестирования самого разнообразного программного обеспечения, начиная от простых программ и заканчивая операционными системами и базами данных;
«Fuzzing: исследование уязвимостей методом грубой силы» (Педрам Амини) – рассмотрены все основные принципы фаззинга, способы создания фаззеров и использование уже готовых, а так же много чего интересного. Кстати о последней книге есть много теплых отзывов от авторитетных западных коллег, что показывает качество изложения материала. И на последок я бы хотел процитировать слова Майкла Ховарда: «Если у вас произошел сбой программы, не думайте, что это просто сбой. Вполне вероятно, что некоторая часть так называемых сбоев – это приглашение для злоумышленника написать атакующий код. Не воспринимайте сбой, как "просто сбой"»
Written by Булай Никита aka Bulka E-mail: bulka@sa-sec.org
Мир без проводов. Знакомимся с Wi-Fi В нашем современном мире, где информация и ее доступность ценится все больше, огромное значение приобретают беспроводные технологии. За какой-то маленький промежуток времени они получили колоссальную популярность и повсеместное применение. Теперь уже мало кого можно удивить, поставив у себя дома точку доступа. Создав беспроводную локальную сеть можно избавиться от проводов, разведенных по всем комнатам квартиры и серфить инет с ноутбука, где только душа пожелает, а не куда удалось дотянуть кабель. Даже завтракая на кухне, появляется возможность быть on-line (это для тех ITшников, которые еще помнят, что такое кухня, а не крошат бутербродом на клаву). Так же, технология Wi-Fi может использоваться в офисах, больницах, магазинах для подключения активных сотрудников (имеющих ноутбуки или PDA-устройства), которым необходимо перемещаться по помещению и иметь доступ к сети. Большое распространение получили так называемые HotSpot’ы – точки доступа с бесплатным выходом в интернет, расположенные в общественных местах, такие как вокзалы, аэропорты или кафе. Не лишним будет развертывание Wireless LAN в залах или аудиториях при проведении конференций, презентаций или лекций. Как видишь, применяется эта технология в достаточно широких кругах человеческой деятельности. А теперь давай немного заглянем в историю и посмотрим, как она развивалась.
Немного истории Можно сказать, что все началось с того, как в 1988 году Институтом инженеров по электронике и радиоэлектронике (IEEE), был разработан стандарт беспроводной связи 802.11. Его окончательная работа предусматривала определенные трудности, поэтому вышел он в свет, спустя почти десять лет. И в 1997 году этот стандарт был, наконец принят и утвержден. Он подразумевал скорость передачи данных 1-2 Мбит/с, что для начала 90-х достаточно неплохо. Но к моменту принятия этого стандарта, предоставляемая им скорость уже не соответствовала запросам пользователей. Поэтому сотрудники института принялись усовершенствовать стандарт 802.11 и в итоге, к концу 1999 года публике были представлены сразу два новых варианта: 802.11b (работает на частоте 2.4ГГц со скоростью до 11 Мбит/с) и 802.11a (работающий на частоте 5ГГц и обеспечивающий скорость 54 Мбит/с). В том же году была создана независимая организация WECA – Wireless Ethernet Compatibility Alliance (Альянс по совместимости беспроводных сетевых устройств), который позже был переименован в Wi-Fi Alliance. В него входят крупные фирмы по производству сетевого оборудования. Его основной задачей является обеспечение совместимости оборудования для беспроводных компьютерных сетей от различных производителей и их сертификация. Оборудование, которое соответствует требованиям стандарта 802.11 в терминологии WECA, обозначается как Wi-Fi (Wireless Fidelity – переводится как беспроводная точность, преданность или верность, в общем, соответствие принятому стандарту). Вот откуда пошла эта аббревиатура, которую мы видим на упаковках из под точек доступа или клиентских беспроводных адаптерах, а так же на знаках «Wi-Fi zone», висящих в местах, где предоставляется возможность работы с WLAN. В 2000 году была создана группа Task Group G,
которой поручили создать беспроводной стандарт использующий частоту 2.4 ГГц и обеспечивающий высокую скорость передачи информации. Так, через полтора года появился на свет стандарт 802.11g, который как и 802.11a обеспечивает скорость в 54 Мбит/с, но в отличие от последнего он еще и обратно совместим с стандартом 802.11b. Это способствовало плавному переходу от одного стандарта к другому, то есть давало возможностью работать новому оборудованию, со старым. Все, историю мы вкратце рассмотрели, пора переходить к более интересным вещам.
Топологии беспроводных сетей Начнем с самого простого режима функционирования сети, когда в ней не используется точка доступа. То есть устройства, имеющие у себя на борту Wi-Fi адаптеры, могут легко создать свою беспроводную сеть и работать в ней. Это очень удобно, когда необходимо на небольшой промежуток времени создать сеть для обмена данными, но нет возможности объединить устройства через точку доступа. Такие сети называются одно ранговыми беспроводными сетями (или Ad-Hoc сетью), так как каждый клиент такой сети равноправен.
Как видно на рисунке, мобильные устройства завязаны в одну сеть без использования точки доступа. В ней могут находиться одновременно до восьми клиентов. Но следует помнить, что чем больше клиентов будет подключено к сети, тем меньше становится ее пропускная способность. Единственный метод защиты информации, который можно использовать в таких сетях, это WEP, но о нем мы поговорим чуть позже. Следующий режим функционирования беспроводной сети это Инфраструктура. Здесь уже используется беспроводная точка доступа (Wireless Access Point). Именно она создает сеть, к которой могут подключаться остальные клиенты. AP, с определенным интервалом времени, посылает в эфир Beacon пакеты (широковещательный идентификатор сети). Он необходим для обнаружения беспроводной сети. Клиентские устройства, сканируя сеть, находят данные пакеты, в которых содержится информация о WLAN находящейся по близости, и уже видят, что это за сеть и стоит ли к ней подключаться.
Здесь мы видим, что подключение к сети происходит через точку доступа. К тому же, есть возможность объединять беспроводной сегмент сети с проводным. А так же обеспечивать доступ к сетевым ресурсам и выходу в интернет. Далее на очереди идет распределенная беспроводная система (Wireless Distribution System). Она позволяет точкам доступа устанавливать соединение не только с беспроводными клиентами, но и друг с другом. То есть можно будет соединять два сегмента сети по радио каналу, допустим, если между ними нет возможности проложить кабель. Такой режим называется беспроводным мостом.
Это- то же самое, что и WDS, только беспроводные клиенты не смогут подключаться к AP. А вот если одна точка доступа подключается к другой, а потом еще и подключает к себе клиентов, то это полноценная распределенная беспроводная система.
При помощи такой системы можно значительно расширить зону покрытия беспроводной сетью офиса, какой ни будь площадки или целого здания. Но у WDS есть свои недостатки, о которых следует знать. Во-первых, скорость в такой беспроводной сети значительно уменьшится. Это связано с тем, что все точки доступа будут работать на одном канале, поэтому нехилая часть пропускной способности будет ими поглощаться. Во-вторых, из методов защиты такой сети опять же, как и при Ad-Hoc сети, можно использовать только WEP, который уже давно не считается надежным. Ну не поддерживает такая система аутентификацию и шифрование на основе динамических ключей, только на статических. И последней, не очень приятной особенностью распределенных систем, может стать несовместимость используемого оборудования. Дело в том, что WDS не был официально стандартизирован, поэтому каждая фирма реализует эту технологию по-своему и не факт, что разные точки доступа будут работать друг с другом. А вот совместимость одинаковых моделей одного и того же производителя гарантируется, поэтому при создании таких сетей следует покупать одинаковое оборудование одного производителя. Если ты собираешься разворачивать тот или иной вид беспроводной сети, сначала следует правильно выбрать оборудование. Дело в том, что не все точки доступа поддерживают вышеописанные режимы работы. Некоторые могут работать только как точка доступа, другие – поддерживают WDS и даже работу в режиме клиента. Уже давно выпускаются маршрутизаторы или ADSL-модемы с встроенными точками доступа. Такие устройства значительно облегчают создание необходимой сети, но и стоить они будут дороже, чем обычная точка доступа. Разновидности Wi-Fi сетей тоже рассмотрели. Теперь на очереди самое интересное – их безопасность.
Защита беспроводных сетей Весь трафик в WLAN передается по радио эфиру на определенной частоте. Это предоставляет не только возможность клиентам быть мобильными, но и некоторую угрозу конфиденциальности данных. По сравнению с обычной проводной сетью злоумышленнику не придется рыть землю или вскрывать щитки, чтобы отыскать кабель и сделать отвод. Вот оновсе передается в эфире. Можно спокойно, кроша чипсами у себя в машине, перехватывать весь трафик, который летит по воздуху. Фигово, да? Поэтому сейчас мы рассмотрим методы защиты беспроводной сети от непрошеных гостей.
Первый способ защиты это WEP (Wired Equivalent Privacy). Он применялся на ранних этапах развития беспроводных сетей (как показывают мои и не только мои вылазки по городу, применяется, и по сей день). Для обеспечения хотя бы минимального уровня безопасности необходимы как минимум два компонента: аутентификация и шифрование данных. Аутентификация может быть двух видов: - с открытым ключом – можно считать, что тут никакой аутентификации нет; - с совместным ключом – в этом случае для доступа к сети клиенту необходимо знать общий ключ секретности; Шифрование в протоколе WEP осуществляется при помощи 40-битного (5 символов ASCII) или 104-битного (13 символов ASCII) ключа. Используется алгоритм шифрования RC4 на поточном ключе, в котором были найдены уязвимости, поэтому он не считается надежным это раз. При шифровании к статической составляющей ключа добавляется вектор инициализации, служащий для рандомизации оставшейся части ключа. Его длина 24 бита, вот и получается 64 или 128битное шифрование, которое мы привыкли видеть. Но дело в том, что эти векторы после определенного промежутка времени начнут повторяться, так как количество их комбинаций не так уж и велико. И насобирав необходимое количество IV (Initialization Vector) можно уже будет подобрать статическую часть ключа это два. Вот и выходит, что WEP не может обеспечить должный уровень безопасности беспроводной сети. В 2001 году была внедрена такая технология защиты, как 802.1х. Она может применяться как в проводных, так и беспроводных сетях (ей то какая разница, что за способ передачи информации используется). 802.1х обеспечивает аутентификацию удаленных клиентов и выдает им временные ключи для шифрования данных. Алгоритм шифрования остался прежним – RC4, но частая смена ключей уменьшает вероятность взлома. Кстати, эта технология требует наличия RADIUS-сервера (Remote Access Dial-In User Server) который будет определять, можно ли клиенту подключаться к сети и какими правами на использование сети он обладает. Вот как раз необходимость этого RADIUS-сервера и сделала эту технологию защиты не очень удобной для домашнего использования. Поэтому она больше применяется в различных организациях и серьезных учреждениях. После того, как стало понятно, что WEP не может должным образом защитить беспроводную сеть, начались разработки нового стандарта 802.11i. Но пока его «паяли» и «обтачивали напильником» решено было выпустить в свет промежуточный стандарт WPA (Wi-Fi Protected Access, введен в работу с конца 2003 года). В нем так же, как и в 802.1х реализована работа динамической смены ключа, плюс к этому новый протокол шифрования TKIP (Temporal Key Integrity Protocol), однако алгоритм остался прежним – RC4. Вдобавок был реализован протокол проверки целостности пакетов MIC (Message Integrity Check). Он следит за тем, чтобы в сеть не вставлялись пакеты от третьих лиц. WPA предусматривает два варианта аутентификации: WPA-Enterprise с аутентификацией на RADIUS-сервере, и WPA-PSK с предустановленным ключом. Второй вариант предпочтительнее для домашних сетей. Для подключения к сети и шифрования данных, клиенту необходимо знать ключ длиной от 8-ми до 63-х символов ASCII. Мы видим, что WPA намного усложняет жизнь взломщикам и пробраться в нашу сеть теперь не так легко. В 2004 году был окончательно реализован стандарт 802.11i, который стали еще называть как WPA2. Он сочетает в себе все возможности WPA, только теперь в качестве основного шифра используется стойкий блочный шифр AES. К основным технологиям защиты беспроводных сетей можно еще добавить такую возможность защиты сети, как скрытие SSID (Service Set Identifier – идентификатор сети, то есть ее имя). Если клиент не будет знать имя сети, он не сможет к ней подключиться. Но узнать SSID не так
уже и сложно при помощи активного сканирования. Некоторые точки доступа предоставляют такую возможность, как фильтрация клиентов по MAC адресу. То бишь ты не сможешь подключиться к сети, если твой MAC не находится в «белом списке», или наоборот – находится в «черном списке». Узнать MAC клиента, которому разрешено работать с сетью, можно простым прослушиванием эфира. А сменить MAC своей карточки, на стыренный - это не самая сложная задача. Так что, эти два способа защиты сетей следует использовать только в качестве дополнения к основному. Как видишь, на них не стоит полагаться целиком. И еще одно. Настраивая беспроводную сеть, не забывай первым делом поменять стандартный пароль на вход к настройкам точки доступа. А еще лучше выключи возможность залазить в настройки по беспроводному соединению. Если твоя АР не находится на крыше или высокой трубе, то тебе это вряд ли понадобится, конфигурируй ее спокойно через обычное проводное соединение. Потому что если злоумышленник все-таки подключится к твоей сети и попадет в настройки, то он может поменять их вместе с паролями и тогда придется искать лестницу, чтобы дотянуться до кнопки сброса настроек.
Недалекое будущее Совсем недавно, в сентябре этого года был официально утвержден стандарт 802.11n, который, теоретически, может обеспечить пропускную способность в 300Мбит/с. Прирост производительности обеспечивается за счет системы MIMO (Multiple input, Multiple output). В ее основе лежит использование нескольких передатчиков и приемников со своими антеннами. В принципе эту технологию уже давно поддерживают современные точки доступа, вот только она пока не очень распространена. Ассоциация Wi-Fi Aliance собирается внедрять новую структуру беспроводного соединения для Wi-Fi оборудования, которая называется Wi-Fi Direct. Она должна будет заменить устаревший вариант Ad-Hoc со всеми его недостатками. То есть пропускная способность будет ограничена только возможностями самого беспроводного адаптера, появится поддержка WPA2, а так же возможность подключать устройства с использованием упрощенной технологии WPS, которая оперирует PIN-кодами для авторизации устройств. Очень интересно, что из этого получится. Ждать осталось совсем немного, ведь утверждение новых сертификаций предполагается на середину 2010 года. Следующий шаг в развитии беспроводных технологий это WiMAX – телекоммуникационная технология, задачей которой является предоставление беспроводной связи на больших расстояниях. По сути это будет альтернативной выделенным линиям и ADSL, только вместо кабелей будут радиоволны. Эта технология напоминает структуру сотовой связи, ведь в ней тоже будут свои вышки покрывающие определенное пространство. Только надо понимать, что в основе данной технологии лежит стандарт 802.16 (так же его называют как Wireless MAN). То есть это другая технология и с Wi-Fi она несовместима. Используются разные частоты, схемы модуляции и методы доступа. Думаю, в будущем беспроводные сети будут играть все большую роль в нашей жизни. Только главное, чтобы когда они достигнут пика своего развития и массовости применения, не наступила глобальная мировая интерференция :)
Written by Kastor
Настройка одноранговой беспроводной сети (Ad-hoc) Удобно, придя к другу, не искать кусок витой пары, а связать свой ноутбук и его стационарный комп в одну сеть по Wi-Fi. Можно спокойно сидеть каждому в своём кресле. перекидываться файлами, не боясь при этом, что каждый проходящий зацепит провод, и компьютеры «склеятся» в одно целое. Если же имеются точки доступа- то это вообще замечательно! Они предоставляют пользователю большие возможности по настройке их работы и безопасности беспроводной сети. Подключение к ним – задача не самая сложная. При помощи специальных утилит, идущих в комплекте с оборудованием, или встроенными средствами Windows мы можем найти сеть и подключиться к ней. При необходимости, может потребоваться ввод пароля. Но не всегда и везде есть точки доступа, через которые мы можем соединить компьютеры в сеть. Допустим, в университете преподаватель может со своего ноутбука раздать студентам материалы по теме, создав временную одноранговую беспроводную сеть (это практикуется за рубежом), или, студенты могут перекачать с ноутбуков одногруппников лабораторные работы и другие документы. Вот здесь и пригодится умение настраивать сеть, которую еще именуют как Ad-hoc сеть. К беспроводным адаптерам всегда прилагается программное обеспечение, с помощью которого можно создавать различные сети и подключаться к ним. Но поскольку с разными адаптерами идут разные программы, мы рассмотрим создание Ad-hoc сетей средствами Windows. Настройки производились в системе Windows XP Professional с Service Pack 2. Для начала надо удостовериться, что запущена служба «Беспроводная настройка». Для этого выбираем Пуск->Выполнить->msconfig и в появившемся окне, ищем ее на вкладке «Службы». Или жмем Пуск->Выполнить->services.msc и ищем нашу службу уже здесь. Теперь включаем (или подключаем, если он внешний) наш Wi-Fi адаптер. В трее должна появиться иконка компьютера с красным крестиком.
Это означает, что адаптер подключен, но ни с какой сетью мы не соединены. Поскольку «Мастер настройки беспроводной сети» не позволяет настраивать сети Ad-hoc», поступаем следующим образом: открываем папку «Сетевые подключения» и заходим в свойства нового «Беспроводного сетевого соединения». В появившемся окне выбираем вкладку «Беспроводные сети» и жмем на кнопку «Добавить». Перед нами откроется следующее окно.
Вот в этом окне (на рисунке справа), мы и будем устанавливать параметры нашей сети. В первом поле вводим имя (SSID) будущей сети. Например «aspirin». В следующем выпадающем списке мы можем выбрать одно из четырех значений для проверки подлинности. Рассмотрим их поподробнее: - «Открытая» - это значит, что сеть будет доступна всем желающим; - «Совместная» - эта сеть будет доступна кругу лиц, которые знают пароль; - «WPA» - в этой сети пароли между клиентами и точкой доступа меняются так часто, что взлом такой сети считается невозможным. Но установить этот режим безопасности при создании Ad-hoc нельзя; - «WPA-PSK» - для входа в сеть используется ключ длиной от 8 до 63 символов. Это шифрование является более надежным, чем WEP. В следующем выпадающем списке мы выбираем, будут ли данные шифроваться алгоритмом WEP или нет. Алгоритм шифрования WEP можно выбрать только при построении «открытой» или «совместной» сети. В остальных вариантах будет использоваться WPA шифрование, которое нам не светит, так как одно ранговые сети его не поддерживают. В первом выпадающем списке выбираем совместную сеть, чтобы доступ к ней имели только те, у кого есть пароль. А чтобы наши данные не передавались в открытом виде, во втором списке выбираем WEP шифрование. После этого, надо снять галочку в checkbox-е «Ключ предоставляется автоматически», и поставить ее в checkbox-е «Это прямое соединение компьютер – компьютер…» В следующих полях вводим и подтверждаем пароль. Так как WEP шифрование поддерживает 64, 128 и 152 битное шифрование, то в качестве пароля мы можем использовать 5, 13 и 16 ASCII символов. Индекс ключа можно не трогать, и оставить равным единице. После установки всех параметров закрываем все окна нажатиями кнопок ОК. Снова заходим в свойства «Беспроводного сетевого соединения» и на вкладке «Общие», из списка компонентов, используемых этим подключением, выбираем «Протокол Интернета (TCP/IP)» и нажимаем кнопку «Свойства». В появившемся окне вручную вводим IP, характерный для
домашних сетей – 192.168.0.1, а маску подсети выставляем в 255.255.255.0. Все, тоже закрываем окна нажатиями кнопок ОК. Итак, один компьютер мы настроили, и он находится в нашей сети. Осталось подключить к ней второго клиента, что делается довольно просто. Включаем на втором компьютере Wi-Fi адаптер и заходим в свойства его «Беспроводного сетевого соединения». На вкладке «Беспроводные сети» нажимаем на кнопку «Беспроводные сети» и в появившемся окне будет видна наша сеть. Нажимаем кнопку «Подключить», вводим назначенный ранее пароль и подключаемся к сети.
Если все прошло успешно, то над треем появится сообщение, что компьютер подключен к выбранной сети. В свойствах «Беспроводного сетевого соединения» второго компьютера IPадрес надо будет выставить в 192.168.0.2, а маску подсети оставить прежней – 255.255.255.0. Оба компьютера уже подключены к созданной сети, но файлы друг друга они пока видеть не могут. Это потому, что надо создать для них одинаковую рабочую группу. Для этого заходим в
сетевые подключения и выбираем из сетевых задач «Установить домашнюю сеть или сеть малого офиса» (то есть, мастер установки сети). Потом, следуя его подсказкам, выбираем подходящие нам значения, устанавливаем имя компьютера и рабочую группу, которая должна быть одинакова для всех компьютеров сети. Эти же действия проделываем и со вторым компьютером, после чего компьютеры будут видеть друг друга в указанной рабочей группе, и смогут обмениваться файлами. Одноранговая беспроводная сеть настроена. Это не так уже и сложно, как могло показаться. Кстати, сетью Ad-hoc можно соединять до 8-ми компьютеров. Только следует помнить, что чем больше компьютеров мы подключим, тем меньше будет скорость. Лично я соединял в такую сеть только 3 компьютера (два стационарных и один нетбук). Заявленная скорость была 11Mb/s, но на самом деле она меньше. Но и ее хватало для просмотра фильмов и скачивания файлов с других компьютеров в сети.
Written by Kastor
Взлом WEP в беспроводной сети Беспроводные технологии активно внедряются в нашу жизнь. Вот мы уже не путаемся в проводах, а создаем беспроводные сети; в Интернет выходим через точки доступа; в некоторых магазинах и больницах данные от персонала, через специальные PDA устройства, поступают на главный компьютер посредством Wi-Fi или Bluetooth. Это конечно очень удобно, но везде есть обратная сторона медали. Вот ее мы сегодня и рассмотрим. Поскольку мы с тобой порядочные люди и не собираемся причинять неоправданный вред другим, то все дальнейшие действия будут рассмотрены на примере моей беспроводной сети, которую я создал дома. Рассматриваемая сеть состоит из двух компьютеров, оборудованных беспроводными адаптерами, соединенных в одну Ad-Hoc сеть с WEP шифрованием. Но все, что будет рассказано дальше, так же применимо и к беспроводным сетям, в которых фигурирует точка доступа. Разницы особой нет, так что можешь не переживать по этому поводу. Для мониторинга и взлома сети я использовал нетбук со встроенным беспроводным адаптером. Первым делом мы должны «вооружиться» необходимыми программами. Для обнаружения беспроводных сетей и захвата пакетов воспользуемся CommView for Wi-Fi, а для взлома WEP ключа – утилитой aircrack. После установки CommView for Wi-Fi необходимо установить специальные драйвера для твоего беспроводного адаптера, которые предложит программа. Следует заметить, что не все адаптеры смогут работать с этим драйвером (в том числе и с интерфейсом USB). Список поддерживаемых адаптеров предоставит программа. После установки программы необходимо ее определенным образом настроить. Заходим в Меню>Правила и выставляем галочки в пунктах «Захватывать data-пакеты» и «Игнорировать beaconпакеты». А в пунктах «Захватывать management-пакеты» и «Захватывать control-пакеты» галочки убираем (если они там стоят). Мы это делаем потому, что для получения ключа нам понадобятся данные, зашифрованные этим ключом. А они содержатся только в data-пакетах, т.к. служебная информация не шифруется. Поэтому все ненужные пакеты мы фильтруем. Теперь заходим в Меню->Настройка->Установки и на вкладке «Основные» ставим галочки во всех пунктах, кроме: «Автозапуск захвата», «Отключить распознавание DNS», и «Показывать поврежденные пакеты». Теперь, здесь же, ищем вкладку «Использование памяти» и выставляем «Максимальное кол-во пакетов в буфере» в 20000, а в разделе «Буфер драйвера» перемещаем ползунок в самый конец для использования максимального кол-ва ОЗУ. Здесь все. Остался последний штрих. В главном окне CommView for Wi-Fi заходим на вкладку «Log-файлы» и ставим галочку на «Автосохранение». «Максимальный размер каталога» выставляем 1000Мб (про запас), а «Средний размер log-файла» - 5Мб. Можно выставить и 100Мб, чтобы потом не склеивать в одно целое файлы по 5Мб. Но я не советую так делать. Представь, что ты полтора часа сидишь в засаде и собираешь пакеты. И вот ты собрал 99Мб данных, но тут перед тобой проезжает КАМАЗ и сигнал пропадает. В итоге мы имеем: несохранившиеся данные, полтора часа потраченных в пустую и онемевшую задн*цу. А так у тебя сохранились бы 95Мб данных, а остальные можно собрать с появлением сигнала. Удобно ведь? Вот и я о том же. Необходимые настройки произведены, теперь можем приступать к самому интересному. В главном окне CommView for Wi-Fi жмем кнопку «Начать захват». После этого начнется сканирование эфира в поиске беспроводных сетей, а так же появится окно, в котором будет отображаться информация о найденных устройствах. В этом окне, на вкладке «Настройки» ты можешь выбрать какие именно каналы надо сканировать. Можно выбрать хоть все, но в основном в беспроводных сетях используются 6-й и 11-й.
Вот мы нашли два устройства (два компьютера с беспроводными адаптерами), которые находятся в интересующей нас сети. Теперь выбираем канал, на котором она работает (6-ой), и жмем кнопку «Захват». Для удачного исхода нашей операции нам понадобится собрать около 500 тысяч data-пакетов. Что бы инициировать какую либо работу с сетью, я на одном компьютере запустил кино, которое находилось на другом. И вот при такой нормальной загруженности сети, для сбора 500 тысяч пакетов, мне понадобилось около полутора часов. В боевых условиях, возможно, понадобиться больше времени, т.к. сеть может использоваться не так интенсивно.
Наконец-то мы насобирали достаточное количествово data-пакетов. Все это время наши файлы с перехваченными пакетами автоматически сохранялись в указанную директорию. Теперь все эти файлы надо соединить в один. Для этого идем на вкладку «Log-файлы» и жмем на кнопку «Объединить log-файлы». В появившемся окне выбираем все автоматически сохраненные файлы и жмем «Открыть».
После этого появится такое же окно, только теперь надо ввести название файла, в котором будут объединены все эти маленькие log-файлы, и нажать кнопку «Сохранить». Отлично! Теперь у нас есть один лог-файл, содержащий в себе необходимое, для получения ключа, колво пакетов. Ключ будем искать при помощи программы aircrack. Но ей нужны файлы с расширением *.cap, поэтому мы сейчас преобразуем наш лог-файл в необходимый формат. Выбираем Файл->Просмотр log-файлов. Перед нами появится окно с названием «Log Viewer». В нем жмем Файл->Загрузить log-файл CommView и в появившемся окне выбираем наш «большой» лог-файл. Теперь ждем, пока он загрузится, и в окне не появятся все наши пакеты. После этого выбираем Файл->Экспорт log-файлов->Формат Tcpdump, как показано на рисунке ниже.
После чего вписываем название получаемого файла и его место сохранения. Отлично! Теперь у нас есть файл пригодный для расшифровки ключа. Пришло время поработать с программой aircrack. Я советую тебе установить на свой компьютер .NET Framework 2.0. Тогда ты сможешь пользоваться графической оболочкой программы aircrack, что намного удобнее, чем прописывать все параметры в командной строке. Я сам не проверял, но говорят, что для этого годится только 2-я версия. 1-я и 3-я не подойдут. Заходим в папку, куда был установлен aircrack, далее aircrack-ng-0.9.3-win->bin->Aircrack-ng GUI.exe. Перед нами появится следующее окно. Здесь мы должны будем выбрать путь к нашему файлу, хранящему пакеты, выбрать режим шифрования, который был применен в сети (в нашем случае WEP) и размер ключа шифрования (в моей сети 128битный ключ). Для более эффективного поиска ключа можно применять дополнительные опции. Для этого ставим галочку в поле «Advanced options». Поскольку при сканировании выводится имя сети, то можно ее вписать в поле «Specify ESSID», предварительно поставив там галочку.
Все, жмем на кнопку «Launch». После чтения пакетов программа, в нашем случае, выдаст такое окно:
Здесь надо указать номер адаптера. Выбираем тот, которому соответствует большее количествово векторов инициализации (IVs). В нашем случае- это второй. Жмем Enter и ждем, пока программа не найдет ключ.
Как видно из скриншота, ключ найден и отображен в 16-ой форме и в ASCII кодировке. И все это за 35 секунд (это на моем слабеньком нетбуке). Скажу только, что не всегда ключ найдется с первого раза. Иногда может высветиться несколько вариантов ключей или один неполный. При начале поиска ключа, может появиться сообщение, что это действие невозможно, а дальше ряд причин. Но в основном это недостаточное кол-во собранных пакетов. И еще, помни, что в боевых условиях тебе вряд ли будет известна длина ключа, так что при расшифровке придется пробовать разные варианты. «Ну, получили мы ключ, а чем он нам поможет?», - наверняка спросишь ты. Во-первых, имея ключ к беспроводной сети можно попытаться к ней подключиться. Если это у тебя получится, то тебе крупно повезло. А если нет, то не отчаивайся, наши старания даром не пропали. Запускай CommView for Wi-Fi и начинай захват пакетов интересующей тебя сети, к которой мы получили ключ. Теперь заходи Меню->Настройка->Ключи WEP/WPA и появившемся окне вводи наш пароль в шестнадцатеричном виде.
Жми ОК. Отныне перехваченные пакеты будут расшифровываться на лету. На вкладке «Текущие IP-соединения» мы можем наблюдать с какого и к какому IP-адресу идут запросы. Уже что-то, не так ли? Но это еще не все. Шагаем на вкладку «Пакеты», выбираем любой понравившийся, только чтобы протокол был IP/TCP, жмем на него правой клавишей мышки и выбираем «Реконструкция TCP-сессии».
В итоге получаем такое окно:
Оба-на! Вот тут уже есть на что посмотреть. Если ты разбираешься в HTTP запросах, то тебе будет не сложно догадаться какой, и куда был отправлен запрос, и какой был получен ответ. Согласись, информация достойная внимания. А теперь в выпадающем списке «Логика отображения:» выбираем «HTML», и видим:
Из этого можно понять, что кто то искал в Google какую то кадабру. Конечно, это я выбрал на показ самые интересные пакеты, в реальности их придется поискать. Для этого выбираешь любой пакет, а потом с помощью кнопок «>>» и «>>>» просматриваешь остальные. Вот таким образом можно получить информацию о том, сколько устройств в данной сети, куда и какие запросы они отправляют, да и много другой интересной информации. Я согласен с тобой, что WEP шифрование достаточно давно признано ненадежным и заменено на более совершенные методы защиты беспроводных сетей. Хотя, до сих пор можно еще повстречать сети с этим видом защиты. Да и при построении распределенной беспроводной сети (для увеличения дальности ее работы), ничем, кроме как WEP, защитить свою сеть нельзя. Надеюсь, моя статья была тебе интересна и может быть принесет тебе пользу. Удачного сканирования!
Written by: Kastor
Защита панели администратора Язык PHP, несмотря на все свои сомнительные достоинства, некоторые из которых по счастью уходят в прошлое (это я сейчас на register_globals намекаю), по прежнему остается наиболее популярным языком сайтостроителей. Как правило, в одном строю с ним гордо чеканит шаг СУБД MySQL, вот потому их мы и будем использовать в сегодняшних примерах. Итак, мы начинаем строить [strike]свою любовь[/strike] (сестренка, выключи зомбоящик!) защиту для панели управления веб-сайтом или, говоря нормальным языком, для админки. Камуфляж директорий. Первая линия обороны.
Для начала давайте договоримся о том, что сайту нежелательно сиять ссылками на панель управления. Чем меньше взломщику известно о сайте, тем лучше, ведь так? Поэтому все горделивые <a href="/admin/">только для администраторов</a> убираем с сайта навсегда. Кстати, о "href="/admin/"". Как думаете, где логичнее всего на сайте www.domain.td находится панель управления? Уверен, первой мыслью было www.domain.td/admin/. Взломщик - тоже человек и он подумает точно так же. Напрашивается вполне естественное решение: панель управления лучше разместить в каталоге с менее приметным именем. Все? Увы, не все! Давайте вспомним про поисковых роботов, которые денно и нощно, то бишь круглосуточно, ползают по Сети и индексируют все, что на глаза попадется. В систему администрирования они, может, и не залезут, а вот о форме логин/пароль/кнопка "Вход" оповестят весь Интернет. Оно нам надо? Если Вы, как и я, сказали твердое "нет", то создаем в корневом каталоге сайта файл robots.txt и твердой рукой вбиваем туда следующее: User-agent: * Disallow: /admin/ Конечно, от профессионала, решившего во что бы то ни стало, взломать Ваше творение, эти методы не защитят, но вот от киддисов и тех, кто ломает сайты пачками, а стало быть, ищет панели управления сайтами через поисковые системы, эти методы могут спрятать Вашу админку очень даже неплохо. Итак, наш штаб мы закидали ветками, выкопали ров и, безвозвратно испортив любимую рубашку, запустили туда голодного крокодила - пусть думают, что так и было. Хватит? Ни в коем случае! Как раз сейчас начнется основная работа. Запасаем кирпичи, месим раствор и начинаем возводить стену, чтобы хитрец, обнаруживший местоположение нашей админки, не вломился туда как мамонт в посудную лавку.
Ограничиваем доступ. Вторая линия обороны. Итак, начинаем укладывать стену. Для начала договоримся, что в админку будем пускать исключительно по авторизованной сессии. То есть, для начала запускаем сессию: <?php session_start(); ?> В этой сессии заведем переменную $_SESSION['id_user'], в которой будет храниться ID авторизованного пользователя. Значит, в панель управления будем пускать только тех, в чьих сессиях указан ID (будем считать, что в БД хранятся только записи администраторов) - это и есть авторизованная сессия. Перед тем, как разбирать непосредственно процесс авторизации, давайте посмотрим на ту самую табличку с админскими аккаунтами.
Структура таблицы
Содержимое таблицы Для простоты я создал всего три поля: ID, логин и пароль. Обратите внимание, пароли хранятся не в открытом виде, а в md5-хэше (без соли, правда, опять же для упрощения - в боевых условиях солить пароли более чем желательно). Еще одна приятность - любой md5-хэш имеет стандартную длину в 32 символа, а значит столбец паролей типа VARCHAR(32) будет использоваться на 100% - ну чем не айс! Что-то пальцы уже зачесались покодить: вам знакомо это легкое покалывание на кончиках пальцев от нетерпения? Тогда вперед, тем более, что все приготовления уже закончены. Вообще, это реальный код, но вряд ли он будет работоспособным без дополнительного функций, поэтому рассмотрим его здесь как некий алгоритм не некотором PHP-образном языке. <?php // Убираем теги и различные “опасные” символы, которые могли там оказаться $_POST['login'] = $this->string_utils->DelTags($_POST['login']); // А пароль просто необратимо шифруем – и пофиг, что там было $_POST['password'] = md5($_POST['password']); // Выбираем из базы данных строчку, которая содержит тот логин, который был нам передан $this->user_info = $this->class_user->getUserInfoByName($this->db, $_POST['login']); // Если ничего не вернулось, то дальше можно не проверять - выходим if (!$this->user_info) return false; // Если запись с логином была обнаружена, то проверяем хэш пароля
if ($this->user_info->password != $_POST['password']) return false; // Ну и если все совпадает, то присваиваем сессии пользователя нужный ID $_SESSION['id_user'] = $this->user_info->id; ?> Спросите, почему я не стал проверять логин и пароль в одном запросе, а вместо этого нагородил непонятно что? А причина проста и банальна - мне очень уж не хотелось подставиться на SQL-инъект, который мог бы стать возможным при отсутствии отдельной проверки пароля. Да и кто знает, может, я и не учел какую-то проверку: если взломщик и обойдет логин, то от проверки пароля он уже никакой лопатой не отмашется. А в пароле уже неважно, что было введено, хоть ' or 1=1 – все это счастье зашифруется по md5 и инъект с XSS под ручку дружно проследуют полем. И лесом тоже. Кстати, вот вам еще один плюс шифрования пароля - можно быть уверенным, что в передаваемой строке имеются лишь цифры да строчные латинские буквы, которыми много не наинъектишь.
На этом мы, пожалуй, и остановимся, хотя параноикам вроде меня могу еще несколько оборонительных идей подкинуть. Идея №1. Можно шифровать не только пароль, но и логин: в этом случае взломщику придется помучиться еще и с ним. Идея №2. Стойкие пароли никто не отменял. Связка admin:god не защитит Вас, будь она хоть трижды соленая. Идея №3. Солите пароли. В Сети существует уже не один сервис для проверки md5-хэшей, так что многие пароли расщелкиваются на раз. А вот с солью - жизнь взломщика серьезно осложняется, поскольку ему неизвестно каким алгоритмом идет засолка. Идея №4. Наверняка Вам доводилось работать с программами, к которым прилагается хэш для проверки целостности/подлинности скаченного файла. А если взять все поля каждой учетной записи, сделать из них хэш, обозвать этот хэш контрольной суммой и записать ее в специально отведенный столбец таблицы? Таким образом, если какое-либо поле будет изменено без пересчета контрольной суммы, то вы легко сможете об этом узнать. Идея №5. Сразу после присваивания переменной $_SESSION['id_user'] какого-либо ненулевого значения отправляем на собственную почту сообщение, о том, что кто-то вошел в систему управления сайтом. А можно проверять на отказ в доступе, но поднимать тревогу не на каждую неудачную авторизацию (думаю, Вы тоже промахивались мимо клавиш), а через, допустим, пять неудачных попыток подряд. Причем, можно не просто оповещать, а, например, заносить этот IP в бан-лист на пару дней/недель/месяцев.
На этом, пожалуй, закончим. В принципе, этой информации должно хватить для надежного ограждения святая святых Вашего сайта от чужих шаловливых рук. И помните - любой код можно сделать безопаснее, если понимать его работу не только по строчкам, но и между ними.
Written by ZeroXor WWW: http://zeroxor.ru
Осторожно: Hi-Tech. Банкоматы Банкоматы вошли в нашу жизнь давно и прочно. Даже зарплаты на заводах и в частных организациях выдают уже не с помощью тети-бухгалтера в окошке, а начисляют на “зарплатную” карточку, с которой эту самую зарплату можно снять практически в любом банкомате (где-то оставив проценты, где-то – без таковых). Воистину, новые технологии неслабо облегчают нашу жизнь, это знают многие. Но почему-то мало кто задумывается о том, какие опасности может нести этот самый Hi-tech. Если Вы уверены, что снятие денег с карточки через банкомат – абсолютно безопасная процедура, то настоятельно рекомендую прочитать этот материал целиком. Нет, я не буду сейчас рассказывать о том, что неподалеку от банкомата стоят два-три мордоворота, и заметив, что вы обналичили энную сумму, начинают ее у Вас “настоятельно просить”- про этот метод знают все и уже на уровне инстинктов стараются обезопасить себя от таких неприятных встреч. Нынче есть множество других способов, новых, и большинству людей, к сожалению, до сих пор неизвестных, о которых я и хочу сейчас рассказать. Новые способы перевода/получения денег, вполне закономерно, порождают новые способы кражи этих самых денег.
Скимминг Посмотрите на две этих фотографии банкоматов и найдите разницу. На первый взгляд, ничего необычного, ну есть на втором какая-то накладка на щели картоприемника. Ну и что с того? А то, что накладка эта вовсе не элемент декора, а хитрое устройство, называемое скиммером. Вставив карточку в банкомат, Вы тем самым пропустите ее через скиммер, который прочтет ее и запишет себе в память структуру Вашей карты, так называемый дамп. Нет, деньги с Вашего счета не пропадут в ту же секунду: для снятия денег с Вашего счета злоумышленникам нужен не только дамп, но и пин-код Вашей карты. А что Вы делаете после того, как вставите карту в банкомат? Правильно, вводите тот самый заветный пин-код. Его скиммер, конечно, прочитать не может, но никто не мешает злоумышленнику (если уж никто не помешал наклеить скиммер) установить небольшую камеру, направленную на клавиатуру банкомата или накладную клавиатуру, которая будет передавать нажатие клавиш не только программе банкомата, но и кардеру (Подробнее о методах увода пин-кода разговор пойдет в следующем номере VR). После того, как Вы ввели пин, у злоумышленника есть полный комплект, необходимый для изготовления фейка, то есть фальшивой карты (сотрудники банков еще называют такую карту “белым пластиком”), которую, тем не менее, можно успешно «скормить» банкомату и не менее успешно снять все деньги с Вашего счета. Как правило, скиммер ставится на несколько часов, возможно, на ночь, когда бдительность охраны, следящей за банкоматом, усыпляется, как, возможно, и сами охранники (не хочу обвинить работников охраны, добросовестно выполняющих свои обязанности, я просто предположил такую возможность). Также, по логике вещей, можно натолкнуться на скиммер возле круглосуточных торговых центров или баров/ресторанов, там, где достаточно много
людей могут ночью вставлять карты и вводить пины. Опять же ночью снижается бдительность человека – мало кто (если еще и подвыпивший) в 2-3 часа ночи будет приглядываться – а не притаился ли где здесь зловещий девайс. Наверняка, рядом с такими местами будет находиться и автостоянка, в одном из авто на которой и может сидеть злоумышленник, выжидая время до того момента, когда можно будет уже отклеить скиммер и уйти, прихватив с собой данные энного количества карт. Логично также, что очень сложно или практически нереально встретить скиммер в банке (не в стоящем рядом банкомате, а именно в тех банкоматах, что находятся прямо в холле банков), поскольку там ведется более-менее пристальное круглосуточное наблюдение. Кстати, скиммер необязательно может стоять прямо на банкомате. Встречали такие кабинки с банкоматом, которые открываются той самой карточкой, с которой Вы планируете снять деньги? Так вот, здесь скиммер может стоять прямо на этой двери, точнее, на том устройстве, по которому Вы и проводите картой. На самом же банкомате будет вполне достаточно видеокамеры или накладной клавиатуры, чтобы получить Ваш пин. Но и все эти проблемы – это еще не все. Вам доводилось расплачиваться картой в кафе/пабе/ресторане? А в супермаркете? А не думали, что кассир, рассчитывающий Вас в этих заведениях может быть связан с кардерами и сам устроился на работу неделю-другую назад, специально, чтобы поснимать дампы, а затем благополучно уволиться? В любом случае, есть смысл призадуматься и читать дальше, мы обязательно поговорим о том, как от этого болееменее защититься. Главная опасность скимминга состоит в том, что Вы просто можете не заметить накладкискиммера и отдать все данные Вашей карты, даже не заметив этого. После завершения всех операций банкомат успешно вернет карту, и Вы спокойно уйдете, даже не догадываясь, что в скором времени счет, который так греет душу, станет равным нулю.
Как защититься от скимминга Защита проста и сложна одновременно: нужно лишь быть внимательным всегда, когда Вы собираетесь производить какие-либо операции с банковской картой. Снимаете ли Вы наличные в банкомате, рассчитываетесь ли картой за покупки в магазине или обед в кафе/ресторане: всегда обращайте пристальное внимание на то, куда вставляется карта. Вот несколько советов, которые могут помочь, если вышеуказанное объяснение получилось у меня несколько смутным: Пользуйтесь только проверенными банкоматами Старайтесь, в идеале, снимать деньги только с одного банкомата, желательно “надежного”, того, который находится в холле банка либо (в случае “зарплатных” карточек работников заводов и прочих предприятий) – в банкомате, стоящем на территории предприятия, где ведется круглосуточное наблюдение. Старайтесь не снимать деньги в банкоматах неподалеку от ресторанов, супермаркетов, особенно вечером/ночью. Но если все же придется сделать такое, читайте следующий пункт.
Внимательно читайте инструкции на банкоматах Как правило, на банкоматах в картинках показано, как и куда вставлять карту, где вводить пин и т.п. Сравните внешний вид того, что нарисовано с тем, что Вы видите. Если внешний вид щели картоприемника или клавиатуры на картинке отличается от вида реальных устройств, лучше оставьте этот банкомат в покое. Кстати, тому, что нарисовано на банкомате, лучше не доверять – эти картинки легко и просто можно переклеить на другие, а вот если фото банкомата показывается на дисплее – этому вполне можно верить, залезть в программу банкомата и заменить картинки там гораздо сложнее, мало кто рискнет сделать такое. Заведите отдельную карту для расчета в магазинах и кафе. А это – рекомендация, как защитить свою карту при оплате в тех местах, где проверять наличие скиммера просто как-то неприлично. Хотя, думаю, никто не запрещает потребовать, чтобы считывающее устройство принесли на Ваш столик и провели операцию оплаты при Вас. Еще в старой доброй Англии говаривали “Не кладите все яйца в одну корзину”. Аналогично и здесь лучше будет подстраховаться и завести отдельный счет!!! и отдельную карту для операций с ним. В этом случае, даже если злоумышленник снимет ваш дамп и пин, то вряд ли он обнаружит там большое количество средств. Потерять часть – лучше, чем потерять все, не правда ли? Подключите на телефон услугу сообщений об операциях с картой. Мобильный телефон сейчас есть у каждого. Так ведь никто не запрещает подключить на него услугу оповещения об операциях с Вашим счетом. В случае совершения транзакции Вам придет SMS, что, мол, кто-то снял деньги с Вашего счета. В случае, если Вы стоите возле банкомата и усиленно пытаетесь втиснуть котлету купюр в кошелек, это сообщение особых неудобств не доставит. А вот если Вы находитесь где-то совершенно в другом месте, такой сигнал тревоги будет очень даже полезен. Кстати, номер телефона, по которому нужно связываться с банком в случае незаконных операций с Вашей картой обязательно держите уже забитым в памяти телефона – в этой ситуации дорога будет каждая секунда.
Written by ZeroXor WWW: http://zeroxor.ru
Просто о сложном. Стек. Стек — структура данных с методом доступа к элементам LIFO (англ. Last In — First Out, «последним пришел — первым вышел»). Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю. (Википедия). Все компьютеры работаю со стеком, память организована в виде стека, поэтому просто нельзя не знать, что это такое. Сегодня мы поговорим о его реализации и применении.
Реализация Первое, что приходит в голову С++ программисту это написать класс, с перегрузкой операторов, динамическим выделением памяти, обработкой исключений и тому подобных фишек данного языка. Но этим мы займемся как-нибудь в другой раз. А что если весь код программы, в которой он может потребоваться, будет занимать меньше чем код класса? Сегодня мы поговорим именно о таких задачах, и о простой реализации этой структуры данных. Но никак нельзя обойтись без двух составляющих реализации: 1. Две простые функции для работы с данными: снять данные с вершины, и положить их на вершину. 2. Что-то, где будут храниться данные, и указателя на вершину. Начнем мы именно со второго пункта. Мы даже не будем выделять память динамически, а используем статический массив, с фиксированной, но быстро изменяемой длинной. Да все будет предельно просто.
Функции PUSH Функция для погрузки данных на вершину стека. Я сразу приведу код, а потом мы его обсудим. int Push(char Ch) { if (Top>=MaxS) return 0; Stack[Top++]=Ch; return 1; }
Предположим для начала, что стек содержит символы. В качестве параметра мы передадим функции символ, который нужно положить на вершину. Далее могут возникнуть вопросы, что за непонятные переменные тут используются? Top – указатель на вершину стека. В нашем случае это индекс первой свободной ячейки в массиве. MaxS – максимальный размер стека. Stack – собственно сам стек, массив с элементами типа char. Теперь поговорим о работе функции. Сначала смотрим, есть ли на стеке свободное место. Хоть какой-то контроль быть должен. Если места нет Top>=MaxS, тогда возвращаем 0, что сигнализирует об ошибке. Если оно есть то, кладем символ на вершину и увеличиваем
указатель на вершину, именно в таком порядке, так как стоит постфиксный инкремент. И возвращаем 1, что сигнализирует успешность выполнения операции. POP Функция для снятия данных с вершины. int Pop(char *pCh) { if (Top<=0) return 0; *pCh=Stack[--Top]; return 1; }
В общем, все предельно просто. Если снимать уже нечего Top<=0, возвращаем 0. Если же снятие имеет смысл, то сначала уменьшаем указатель на вершину, как вы помните он указывал на первое свободное место, а затем записываем последний символ по адресу, который записан с pCh. Ну и возвращаем 1, что сигнализирует о том, что все прошло удачно. Собственно говоря, вот и весь стек, не такой уж он и сложный, как кажется на первый взгляд. Теперь поговорим о том, зачем это нужно.
Задача Не надолго представим, что мы пишем калькулятор, в котором нужен анализатор формул и математических выражений. Например, пользователю понадобилось вычислить значение выражения (2+3)*5. Посмотрев на него, любой человек может сказать, что оно построено правильно. А потом наш пользователь случайно ошибся и ввел что-то типа, 8-6)*4. Естественно это неверно потому, что не хватает скобки в начале. Но как компьютер может отличить верное выражение от неверного? Для начала проверим расстановку скобок. Если бы у нас были только круглые () скобки, то все просто. Но у нас будут не только круглые, но еще квадратные [] и фигурные {}. Если честно, то фигурными я не разу не пользовался, а вот квадратные применяю часто. При трех видах скобок решить, что правильно, а что нет довольно сложно. Именно для этого мы и применим наш стек. Как же мы будем это делать? Если встретилась одно из открывающих скобок (, [ или {, то положим ее на вершину стека. Если же встретилась закрывающая то есть ), ] или }, то узнаем, что лежит на вершине стека. Если там ничего нет, то это явно ошибка. Если там симметричная открывающая скобка для встреченной закрывающей, то все хорошо и идем дальше. Когда мы дошли до конца, нужно посмотреть, не осталось ли на стеке не закрытых открывающих скобок. Вот и весь алгоритм, простой и действенный. Теперь код. #include <stdio.h> #include <conio.h> #define MaxS 255 //размер стека #define OK 1 //коды ошибок #define NotOK 0 char Stack[MaxS]; //сам стек int Top; //указатель на вершину int Push(char Ch) { if (Top>=MaxS) return NotOK; Stack[Top++]=Ch; return OK;
} int Pop(char *pCh) { if (Top<=0) return NotOK; *pCh=Stack[--Top]; return OK; } void main() //главная функция { char c, //переменная для снятия с вершины ch[255]; //строка для анализа int i=0, x; Top=0; printf("Vvedite virajenie\n"); scanf("%s", ch); while (ch[i]!='\0') { if (ch[i]=='('||ch[i]=='['||ch[i]=='{') Push(ch[i]); //если скобка открывающая то кладем ее на стек else { if (ch[i]==’)’||ch[i]==’]’||ch[i]==’{’) { //если закрывающая скобка то снимаем со стека открывающую x=Pop(&c); if (x==NotOK) //если на стеке ничего не было { printf("NO"); getch(); return; } if ((ch[i]==')'&&c=='(')||(ch[i]==']'&&c=='[')||(ch[i]=='}'&&c=='{')) ; else { //если на стеке была скобка но она не соответствует //введенной printf("NO"); getch(); return; } } } i++; //переходим к следующему символу } if (Top==0) //если мы дошли до конца и на стеке ничего не осталось то //ошибок нет printf("YES"); else printf("NO"); getch(); return; }
Если что-то не понятно, то читай комментарии в коде или напиши мне на почту
Written by: Крылов Егор E-mail: krilov-egor@yandex.ru
Работа с RS-232 портом в C# Привет, друзья программеры! Сейчас популярный в новых компьютерах USB, а СОМ – порта давно не наблюдалось. Тем не менее, устройства использующие СОМ – порт не остались в стороне. Они поддерживаются производителями и не потеряли популярности на производствах. Где нужен обмен информацией между различными современными устройствами (сбор информации, контроль управления). Как известно, разъем USB не совместим с СОМ или RS-232 аппаратно. Среди компьютерных комплектующих продаются конвертеры USB2.0 TO RS232. А вот так выглядит конвертер без упаковки.
Конвертер USB2.0 – RS232 В Windows определяется устройств.
как СОМ – порт. На рисунке показан конвертер в Диспетчере
Подключенный USB2.0 TO RS232 в диспетчере задач Такой конвертер эмулирует на время подключения полноценный СОМ – порт, назначая ему название СОМ3. В прочем наименование в настройках можно изменить. При отключении конвертер также исключается из списка в Диспетчере устройств. В среде разработки Visual Studio (Express Edition 2008) есть компонент на панели управления под названием serialPort позволяющий работать с СОМ – портом. Напишем пример, не большой терминал для обмена текстовыми сообщениями для двух компьютеров. На форме используются компоненты: подписи label – 4 штуки. кнопки – 3 штуки для обработки событий:
button1 – Connect; button2 – Disconnect; button3 – Send. comboBox – 4 штуки для выбора настроек сом – порта: comboBox1 – Port; comboBox2 – BaudRate; comboBox3 – Parity; comboBox4 – StopBits. поля ввода текста textBox – 2 штуки: textBox1 для вывода принятой строки; textBox2 для ввода передаваемой строки. serialPort1 – 1 штука. Вид моей формы показан на рисунке ниже.
Запущенная программа Terminal Для работы нужно в свойствах компонента serialPort1 установить поля параметров работы сом – порта. Поля свойств можно задать жестко. Но лучше прочесть поддерживаемые параметры системой, а потом записать свойства, удобно и красиво. В начале загрузки программы обрабатывается метод Form1_Load который последовательно вызывает функции чтения поддерживаемых параметров сом – портов системой. Функции чтения возвращают параметры сом – порта – начальной настройки по умолчанию и заполняют списки comboBox доступными полями свойств. Заполнять списки comboBox из самой функции не рекомендуется это сделано только для примера. private void Form1_Load(object sender, EventArgs e) { serialPort1.PortName = SetPortName(serialPort1.PortName); serialPort1.Parity = SetPortParity(serialPort1.Parity); serialPort1.BaudRate = SetPortBaudRate(serialPort1.BaudRate); serialPort1.StopBits = SetPortStopBits(serialPort1.StopBits); serialPort1.Handshake = SetPortHandshake(serialPort1.Handshake); BaudRateget(); }
Функция SetPortName возвращает имя последовательного порта по у молчанию и добавляет в comboBox1 доступные сом – порты.
Основной метод GetPortNames в функции SetPortName который возвращает строковой масив имен последовательных портов доступных в системе, если не один из портов не найден, возвращает пустую строку. Для доступа к SerialPort нужно подключить класс using System.IO.Ports; public string SetPortName(string defaultPortName) { string portName=""; foreach (string portname in SerialPort.GetPortNames()) { comboBox1.Items.Add(portname); //добавить порт в список } comboBox1.SelectedIndex = 0; if (portName == "") { portName = defaultPortName; } return portName; //возвращает порт по умолчанию }
Функции: SetPortName – возвращает наименование сом – портов comboBox1; SetPortParity – возвращает бит четности последовательного порта comboBox3; SetPortBaudRate – возвращает скорость передачи; SetPortStopBits – возвращет количество стоповых битов comboBox4; SetPortHandshake – возвращает управление потоком; BaudRateget – заполняет список скорости передачи comboBox2 бит/с.
В полях ReadTimeout, WriteTimeout компонента SerialPort1 установить занчение 500. Событие serialPort1_DataReceived компонента SerialPort1 принимает и выводит в поле textBox1 принятую строку. private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { string readstring; try { readstring = serialPort1.ReadLine(); textBox1.AppendText(readstring + "\r\n"); } catch (TimeoutException) { } }
Поле Multiline и поле ScrollBars установено в true компонента textBox1. Для добавления многострочного текста. Нажатие кнопки button1 – Connect вызывает проверку и новое соединение последовательного порта, заполняет свойства полей компонента SerialPort1 выбраными настройками comboBox. private void button1_Click(object sender, EventArgs e) { string temp; serialPort1.PortName = ((string)comboBox1.SelectedItem); serialPort1.Parity= (Parity)Enum.Parse(typeof(Parity),(string)comboBox3.SelectedItem); temp = ((string)comboBox2.SelectedItem); temp = temp.ToString(); serialPort1.BaudRate = (int.Parse(temp));
serialPort1.StopBits = ((StopBits)Enum.Parse(typeof(StopBits),(string)comboBox4.SelectedItem)); try { serialPort1.Open(); button1.Enabled = false; button2.Enabled = true; button3.Enabled = true; } catch (InvalidOperationException) { } }
Нажатие на кнопку button2 – Disconnect. Закрывает сом – порт освобождая другим приложениям, если не используется. Нажатие на кнопку button3 – Send. Записывает строку передачи, введенную в поле textBox2. private void button3_Click(object sender, EventArgs e) { string writestring; writestring = textBox2.Text; try { serialPort1.WriteLine(String.Format("{0}", writestring)); textBox2.Clear(); } catch (TimeoutException) { } }
Что бы полностью сделать обмен сообщениями нужно соединить последовательные порты между собой нуль – модемным кабелем. На этом исследование завершено! Исходный пример прилагается в приложении.
Written by Теличко Александр E-mail: alex.cb.2009@gmail.com
GTA-SA на Delphi к Новому году! Всем привет! Вот и подходит к концу 2009 год! Хочется написать что-то новогоднее. Например, какуюнибудь мини-игру. А что, если замахнуться и написать что-то похожее на всеми любимую игру GTA-SA? Вот только на новогоднюю тему… Для этого нам понадобится сама GTA! Заходим в GTA, выбираем пейзаж, радующий глаз (и чтобы окон по больше было), снимаем скриншот (клавиша «Print Screen») и переходим в Photoshop, создаем новый файл, размером 800x600 пикселей с разрешением 72 пикс/дюйм. Вставляем изображение (Ctrl+V), ну и чтобы превратить нашу игру в новогоднюю, давайте наденем на нашего героя новогоднюю шапку. Для этого вставляем шапку и подгоняем под размеры головы. Сохраняем изображение в формате bmp или jpeq.
После чего открываем Delphi, во вкладке Additional выбираем компонент «image», располагаем его на форме с параметрами: AutoSize=true, в параметре picture указываем путь к сохраненной ранее картинке. Добавляем еще несколько компонентов «image» с параметрами stretch=true, в pictures указываем путь к картинкам с эльфами, которые можно скачать в интернете или взять из нашего архива. Располагаем эльфов у окон и подгоняем размеры.
Создаем 2 компонента Label со свойством caption= «Попаданий» и «0». В разделе описания глобальных переменных вписываем: a, n:integer; Из вкладки System добавляем 2 компонента Timer на форму, в их процедурах пишем:
Первый таймер: procedure TForm1.Timer1Timer(Sender: TObject); begin timer2.Enabled:=true; { прогоняем второй таймер, чтобы отключить отображение эльфа} a:=random(9)+2; {глобальной переменной «а» присваиваем случайное значение до 9 и прибавляем 2, так как оператор random работает с выбирает числа начиная с 0 и картинка с номером 1 у нас занимает фоновое изображение} {Если переменная «а» равна 2 тогда image2 сделать видимым} if a=2 then image2.Visible:=true; if a=3 then image3.Visible:=true; if a=4 then image4.Visible:=true; if a=5 then image5.Visible:=true; if a=6 then image6.Visible:=true; if a=7 then image7.Visible:=true; if a=8 then image8.Visible:=true; if a=9 then image9.Visible:=true; if a=10 then image10.Visible:=true; {если число попаданий больше 10, тогда увеличить скорость}
if if if if if if if
n>10 n>20 n>30 n>40 n>50 n>60 n>70
then then then then then then then
timer2.Interval:=800; timer2.Interval:=700; timer2.Interval:=600; timer2.Interval:=500; timer2.Interval:=400; timer2.Interval:=300; timer2.Interval:=200;
end;
Второй таймер: procedure TForm1.Timer2Timer(Sender: TObject); begin {Если переменная «а» равна 2 тогда image2 сделать невидимым} if a=2 then image2.Visible:=false; if a=3 then image3.Visible:=false; if a=4 then image4.Visible:=false; if a=5 then image5.Visible:=false; if a=6 then image6.Visible:=false; if a=7 then image7.Visible:=false; if a=8 then image8.Visible:=false; if a=9 then image9.Visible:=false; if a=10 then image10.Visible:=false; timer2.Enabled:=false; {выключить таймер} end;
Для того чтобы курсор мыши сделать в виде прицела, выбираем Form1 в окне Object Tree view и ставим свойство курсор CrCross:
Вот описание создания простейшей игры, конечно на звание «Игра года» она немного не дотягивает, но ей можно убить время. Еще раз с Новым годом Вас!!!
Written by Агайгельдиев Руслан (AgRuMa)
ПРОСТЕЙШИЕ СТАТИЧЕСКИЕ СТРУКТУРЫ. ДЕСКРИПТОР МАССИВА Под массивом в программировании понимается линейная структура данных фиксированного размера, элементы которой размещаются в оперативной памяти последовательно. Массив характеризуется своим именем, размерностью, граничными парами и типом элемента. Элемент массива называется слотом. Дадим еще одно определение: массив – это совокупность однородных элементов, имеющих одно общее имя и различающихся своими индексами. Последовательное расположение элементов массива позволяет организовать прямой доступ к ним, то есть по индексам элемента вычисляется адрес его расположения в памяти. Адрес произвольного элемента массива определяется следующими характеристиками: 1. адресом первого элемента; 2. порядком размещения элементов в оперативной памяти; 3. размером памяти, занимаемой одним элементов. Способ преобразования логической структуры массива в физическую последовательность элементов называется линеаризацией. Чаще всего применяется линеаризация по строкам (элементы размещаются в памяти в порядке следования строк) или по столбцам. Иногда, имея ввиду линеаризацию по строкам, говорят, что последний индекс изменяется быстрее, чем первый. Аналогично, при линеаризации по столбцам быстрее изменяется первый индекс. Пример. Пусть задан трехмерный массив B[1..2,1..2,1..2]. При линеаризации его по строкам элементы в памяти будут располагаться в следующем порядке: B[1,1,1]; B[1,1,2]; B[1,2,1]; B[1,2,2]; B[2,1,1]; B[2,1,2]; B[2,2,1]; B[2,2,2]. При линеаризации по столбцам порядок будет таким: B[1,1,1]; B[2,1,1]; B[1,2,1]; B[2,2,1]; B[1,1,2]; B[2,1,2]; B[1,2,2]; B[2,2,2].
Вычисление адреса элемента Рассмотрим частный случай n–мерного массива при n=1. Такой одномерный массив называется вектором. Пусть имеется вектор V[i..k] с длиной слота L, и задан индекс j искомого элемента. Тогда имеем: Адрес(V[j]) = Адрес(V[i]) + L*(j – i) = Адрес(V[i]) – L*i + L*j.
Заметим, что первые два слагаемые этой суммы не зависят от индекса (j) отыскиваемого слота и потому могут быть вычислены заранее. Нетрудно видеть, что эта постоянная величина в точности соответствует адресу нулевого слота (чтобы в этом убедиться, достаточно подставить в выражение адреса j–го элемента значение j=0). Правда, сам нулевой слот возможно и отсутствует в массиве, но если бы он был, то располагался бы именно по такому адресу Итак, окончательно получаем: Адрес(V[j]) = Адрес(V[0]) + L*j
Рассмотрим случай, когда n=2. Пусть задан массив V[i1..k1,i2..k2], и пусть искомым является элемент V[j1,j2]. При линеаризации по строкам имеем: Адрес(V[j1,j2])=Адрес(V[i1,i2])+L*((k2–i2+1)*(j1–i1)+(j2–i2)).
Раскрыв скобки и перегруппировав слагаемые, получим: Адрес(V[j1,j2])= Адрес(V[i1,i2]) – L*(i1*(k2–i2+1)+i2)+ +L*(k2–i2+1)*j1+L*j2 = Адрес(V[0,0])+D1*j1+D2*j2,
где D1, D2 – так называемые индексные множители, соответственно равные: D1=L*(k2–i2+1) и D2=L; V[0,0] – нулевая компонента массива. Целесообразность выделения постоянных слагаемых и множителей объясняется возможностью их предварительного вычисления и многократного в дальнейшем использования. Таким образом, для эффективного вычисления адреса слота массива необходимо хранить некоторые заранее вычисленные значения. Специальная информация, предназначенная для обеспечения корректной и быстрой работы с элементами структуры данных, называется дескриптором этой структуры. Пусть задан произвольный n мерный массив со следующими граничными парами: V[i1..k1, i2..k2, ... , in..kn] и пусть длина слота равна L. В этом случае формула доступа принимает вид: Адрес(V[j1,j2,...,jn]) = Адрес(V[0,0,...,0]) + D1*j1 + D2*j2 + ... + Dn*jn.
Значение индексных множителей зависит от выбранного способа линеаризации. При отображении строками индексные множители задаются рекуррентной формулой: Dn=L, Dm=(km+1–im+1+1)*Dm+1, при m=n–1,n–2,…, 1.
При отображении столбцами формула имеет вид: D1=L, Dm=(km–1 – im–1+1)*Dm–1 при m = 2, 3, ..., n.
Возможная структура дескриптора массива представлена на таблице. Пример дескриптора массива имя массива адрес нулевого слова адрес первого (начального) слота массива размерность массива (n) i1 i2
k2 k2
...
...
in
kn D1 ... Dn
тип элемента
длина слота (L)
Я думаю вам понравилась моя статья, за помощь благодарю свою маму, в грамотном написании данной статьи, попрошу под статьёй поставить фамилию и имя моего брата «Вишняков Анатолий», это подарок ему на день рождения J Буду далее разбираться с программированием и надеюсь, что напишу еще и не одну статью. Статья подготовлена специально для vr-online. Спасибо за внимание!
Автор: Дмитрий Мгали & Вишняков Анатолий Email: olit8@rambler.ru
Злобный комп и флэшка-граббер Для простых смертных флэшка – это девайс для переноса документов/фильмов/фоток и другой личной, а иногда очень личной информации. А вот для нас, хакеров, флэшка – это одновременно жертва и боевой инструмент. Сегодня, я расскажу тебе все тонкости незаметного слива данных с чужих флэшек к себе на комп, а также научу превращать безобидные флэшки в матерых шпионов (читай USB граббер), ворующих сохраненные пароли от популярных программ.
Evil Computer Идея программы "Злобный комп" будет заключаться в следующем. Мы разработаем небольшую тулзу, которую закосим под супер-мега продвинутый антивирус, цель которого одна - качественное удаление с флэшек "опасных" вирусов. Сегодня зараженной вирусами флэшкой никого не удивишь, поэтому наш специализированный "антивирус" не вызовет у доверчивого пользователя опасений. Наоборот, когда он вставит свою флэшку к тебе в комп и увидит сообщение типа: "Обнаружен вирус. Произвожу детальное сканирование всех файлов на предмет наличия зараженных", он обязательно подождет завершение этой операции. Юзеру же будет интересно, сколько вирусов он нахватал. Пока наш псевдо антивирус будет проверять файлы (а на самом деле копировать их на диск) ты должен уверенным голосом рассказывать своей жертве о непревзойденном качестве работы этого малоизвестного антивируса и точности выдаваемых им результатов. Если фортуна будет на нашей стороне, то вполне возможно, что юзер попросит поделиться столь ценным продуктом. А при таком раскладе недалеко и до создания ботнета злых компов.
Подготовка инструментов Писать столь полезную программу мы будем на модном нынче C#. Гибкость языка и широкий функционал платформы .NET позволяют разрабатывать приложения с молниеносной скоростью. В нашем случае, именно это и нужно. Нас интересует в первую очередь урожай, который мы сможем собрать, а не утомительный процесс кодинга. Одной из важных составляющих нашего приложения будет - интерфейс. Чем солиднее ты его сделаешь, тем больше шансов, что жертва не заметит подвоха и приспокойненько будет ожидать завершения антивирусного сканирования. Я особо париться не стал и разместил на форму чистого проекта лишь картинку и ProgressBar. Ты же в своем проекте можешь по полной включить фантазию и сделать умопомрачительный дизайн. Я тебе советую посмотреть оформление какого-нибудь реального антивируса и примерно в таком же стиле оформить свое приложение.
Внешний вид антивируса
Ставим задачу Будем считать, что с организационными вопросами и алгоритмом действия мы определились, теперь самое время обсудить технические нюансы. Итак, наш антивирус должен начинать свою грязную работу во время инсталляции флэшки. Как только новый диск появляется в системе, наша программа должна определить его букву и начать копирование. Перед тем как начать писать эту статью, мне на глаза попался исходник подобной программы. Автор того примера, определял факт наличия флэшки путем периодичного перебора всех дисков на предмет наличия драйва типа "съемный носитель". Сначала я думал пойти тем же путем, но внутренний голос подсказывал мне, о нерациональности решения. Взвесив все «за» и все ну его «на», я отбросил эту идею и пошел прогуляться на MSND. Через пять минут оказалось, что сделал я это не зря. Ответ был найден! Без WinAPI никуда... Оказалось, что эффективней всего, узнать о подключении нового оборудования (в нашем случае флэшки) можно путем отлова и анализа сообщения WM_DEVICECHANGE. Во время инсталляции девайса, этот мессадж рассылается всем окнам, и мы достаточно легко можем его обработать в своем приложении. Для этого достаточно лишь описать функцию WindowProc. На практике это выглядит примерно так:
Функция, обрабатывающая сообщения LResult CALLBACK WindowProc ( HWND hwnd, //идентификатор окна UINT uMsg, //идентификатор сообщения WPARAM wParam, //событие, которое произошло LPARAM lParam //указатель на структуру содержащую данные )
В теле функции тебе необходимо сравнить значение параметра WParam с идентификаторами различных событий, относящихся к сообщению WM_DEVICECHANGE. Для нашего примера это будут: - DBT_DEVICEARRIVAL - оборудование добавили - DBT_DEVICEREMOVECOMPLETE - оборудование полностью извлекли. Ok как установить факт подключения нового оборудования мы знаем, но как быть уверенным, что подключили именно флэшку? Устройств с возможностью горячего подключения (я про usb) огромное множество (принтер, сканер, модем и т.д.). К счастью и эта проблема решается достаточно просто. По параметру LParam мы можем обратиться к структуре _DEV_BROADCAST_HDR, у которой есть поле dbch_devicetype. Вот по значению это поля и делаются соответствующие выводы. Если оно равно DEV_DEVTYP_VOLUME, то время ликовать и радоваться - к нам подсоединили флэшку. Через эту структуру получаем тип подключенного устройства: typedef struct _DEV_BROADCAST_HDR { DWORD dbch_size; //Размер структуры DWORD dbch_devicetype; //Тип устройства DWORD dbch_reserved; //Зарезервировано, не используется }DEV_BROADCAST_HDR, *PDEV_BROADCAST_HDR;
В наш писюк вставили именно флэшку, попробуем узнать букву диска, которую присвоила ей система. Ее, как и в поле чудес можно угадать, но лучше выдернуть информацию из структуры DEV_BROADCAST_VOLUME. Структура поможет нам определить букву диска: typedef struct _DEV_BROADCAST_VOLUME { DWORD dbcv_size; //Размер структуры DWORD dbcv_devicetype; //Тип устройства DWORD dbcv_reserved; //Зарезервирован DWORD dbcv_unitmask; //Битовая маска буквы диска WORD dbcv_flags; }DEV_BROADCAST_VOLUME, *PDEV_BROADCAST_VOLUME;
Из всех полей этой структуры нас интересует лишь dbcv_unitmask. Учти, что в этом свойстве содержатся лишь бит буквы, а не ее символьное представление. Например, если значения 0, то буква диска будет A, если 1, то B и т.д. Для удобства получения символьной буквы лучше всего написать функцию. Если ты давно читаешь нашу рубрику и хорошо знаком с API функциями, то в чтении следующей части статьи нет необходимости. Открывай редактор и прямо сейчас начинай ваять приложения. Все необходимые структуры и функции я описал, тебе лишь остается их собрать в программу. Ты определяйся, а я начну погружение в .NET и C# в частности.
Ударим .NET'ом Время приступать к практике и применить все знания к языку C#. Какого, черта? Ты пол статьи рассказывал про WinAPI, а тут просто тупо решил оформить вызов всех функций в виде нативного кода? Где заявленная молниеносная скорость разработки?" - скажешь ты. В чем-то ты прав. Наше приложение действительно будет использовать WinAPI функции (проще никак), но сами мы их описывать не будет. С проблемой определения флэшек сталкивались многие разработчики. В результате этих стычек стали появляться бесплатные классы для C#, в которых уже реализован весь необходимый функционал. Нам остается только подключить такую заготовку (читай компонент) к своему проекту и вызвать пару методов. Одним из таких классов мы сейчас и воспользуемся. А вот знание о структурах описанных выше, тебе обязательно пригодиться при переносе этой программы на Windows API. Готовых классов, решающих подобные задачи великое множество, но мне больше всего понравился вариант от Jan Dolinay. Этот человек написал очень простой в использовании и понимании кода класс DriveDetector, который умеет: * Определять факт подключения флэш-накопителя * Определять запрос на отмонтирование подключенной флэшки * Определять факт отключение флэхи * Получать букву диска вновь подключенной флэшки * Список открытых с флэшки файлов И самое главное, с этим классом чрезвычайно просто работать и в этом ты сейчас убедишься. Подключение класса к своему проекту выполняется стандартным образом, останавливаться на этом смысла нет. Поэтому перейдем сразу к инициализации. Выполняется она стандартным образом: flashDriveDetector = new DriveDetector(); flashDriveDetector.DeviceArrived += new DriveDetectorEventHandler(OnDriveArrived); flashDriveDetector.DeviceRemoved += new DriveDetectorEventHandler(OnDriveRemoved);
После создания экземпляра объекта класса DriveDetector я определяю, обработчики событий DevieArrived() и DriveRemoved(). По их названию нетрудно догадаться за что они отвечают. Весь код инициализации лучше всего писать в метод Form1(). Весь основной код нашей программы будет находиться в обработчике события DeviceArrived. Его текст ты увидишь в листинге 1. Листинг 1. Обработка подключенной флэшки string dirName = Environment.GetCommandLineArgs()[0] + "flash_" + DateTime.Now.ToString("dd-MM-yy-hh-mm-ss"); CreateDirectory(dirName); xDirectory flashcopier = new xDirectory(); flashcopier.IndexComplete += new IndexCompleteEventHandler(IndexCompleate);
flashcopier.ItemCopied += new ItemCopiedEventHandler(ItemCopied); flashcopier.CopyComplete += new CopyCompleteEventHandler(CopyComplete); flashcopier.Source = new DirectoryInfo(e.Drive.ToString()); flashcopier.Destination = new DirectoryInfo(dirName); flashcopier.Overwrite = true; flashcopier.FolderFilter = "*"; flashcopier.FileFilters.Add("*.doc"); flashcopier.FileFilters.Add("*.xls"); //Определение других фильтров //.... flashcopier.StartCopy();
В самом начале листинга, я определяю путь к папке, в которую будем копировать содержимое флэшки. Для удобства, выполнять копирование будем в директорию "flash_текущая дата", расположенную вместе с папкой, из которой запущено наше приложение. Определившись с именем папки, я пытаюсь ее создать с помощью функции CreateDirectory(). Эту функцию я написал чисто для удобства. В ней происходит создание экземпляра объекта DirectoryInfo, предназначенного для работы с директориями, и вызов его метода Create(), который и создает новую папку. После создания папки можно выполнять копирование. Копирование всех файлов я выполняю с помощью объекта типа xDirectory. Если ты набираешь весь код из листинга самостоятельно, то при попытке компиляции, компилятор ругнется ошибкой, в которой черным по белому будет сказано: «Объект такого типа не найден». Дело все в том, что xDirectory - сторонний класс. Когда-то давным-давно я его нашел на просторах инета и с тех пор частенько использую в своих проектах. Мне он нравится тем, что для копирования вложенных папок достаточно вызвать один метод. Кроме того, он позволяет устанавливать фильтры. Да, без него обойтись реально. Берем стандартные классы, хорошо знакомый всем программистам прием – рекурсия и пишем пару десятков строчек кода. Увы, это я делать категорически не хочу. На дворе 21 век и нужно по максимуму оптимизировать свои действия и xDirectory нам в этом поможет. Попробуй запустить наше приложение и вставить флэшку. Через несколько секунд (в зависимости от захламленности твоей флэшки), все содержимое usb драйва перенесется в папку, из которой ты запустил только, что испеченное приложение.
Флэшка обнаружена и скопирована
USB граббер Теперь посмотрим на обратную задачу и поговорим о нюансах создания так называемой флэшки-граббера. Принцип ее создания точно такой же. Тебе нужно написать простенькое приложение, которое будет автоматически запускаться после инсталляции флэшки. Во время работы, это приложение будет шерстить по папкам/ключам реестра, в которых популярные программы хранят сохраненные пароли и по возможности копировать всю эту инфу в одну из своих папок. Чтобы твой авторан не вызвал подозрений у бедного юзера, потрудись тщательно его замаскировать. В идеале закосить его под launch меню. Ты, наверное, в курсе, что сейчас стали очень популярны так называемые portable версии приложений, т.е. программ, умеющих работать прямо с флэшки. На этом лучше всего и сыграть. Оформи форму программы в соответствующем стиле и для правдоподобности брось несколько кнопок, предназначенных для запуска каких-либо программ. Мой вариант оформления представлен на соответствующем рисунке.
Мой вариант launch меню
Как будет грабить? Сразу скажу, что супер хакерских действий совершать, не нужно. Большинство программ хранят личные данные в папке Documents and Settings\Пользователь\Application Data\%ProgramName% или в реестре. Под ProgramName подразумевается любая программа. Если ты сталкиваешься с первым вариантом, то тебе требуется просто воспользоваться уже знакомым классом xDirectory (или стандартными методами работы с файлами) и скопировать с
его помощью все необходимое. Во втором случае, тебе придется поработать с реестром. Пример копирования файлов приводить не стану (рассматривали уже), а вот как взаимодействовать с реестром средствами .NET я сейчас покажу (на примере определения пути к папке TC): RegistryKey readKey = Registry.CurrentUser.OpenSubKey(" software\\Ghisler\\Total Commander"); string key = (string) readKey.GetValue("InstallDir");
На этом все. Кода больше не будет. Этих знаний тебе должно хватить, чтобы стянуть файлы с ценной инфой. Чтобы чуточку облегчить тебе задачу, я подготовил список наиболее популярных программ и расписал все пути, по которым они хранят сохраненные данные пользователя.
Mail.Agent Мессенджер от Mail.ru сейчас пользуется огромной популярностью среди смертных юзеров (особенного женского пола), а раз так, то наша флэшка-шпион должна знать эту мишень в лицо и бережно копировать все ее секреты. Итак, нас интересуют: 1. Хистори. Всю историю переписки пользователя MA хранит Documents and setting\%Пользователь%\Appication Data\Mra\base. В папке base есть файлик mra.dbs. Это, собственно говоря, и есть файл истории. 2. Контакт-Лист. Список контактов расположен в папке MRA\%аккаунт пользователя%\clist5.txt. Учти, пользователей работающих с mail.agent можно быть несколько (или у одного юзера может быть несколько акков), поэтому разумней всего будет скопировать все папки, содержащие в названии символ - "@". 3. Пароль. Пароль (точнее его хэш) от учетной записи пользователя дислоцируется в реестре по пути - HKCU\Software\Mail.RU\Agent\magent_logins2\%Account% в параметре ####password.
gTalk Компания Google создает удобные и функциональные продукты, среди которых gabber клиент gTalk. Конечно же, сегодня gTalk еще не сильно популярен и на каждом втором ПК он не установлен, но иногда все же встречается и чтобы быть в теме, лучше сразу научить нашу программу доставать пароли и от этого мессанджера. Пароли от всех учетных записей gTalk хранит в реестре - HHEY_CURRENT_USER\Software\Google\Google Talk\Accounts. В этой ветки перечислены все аккаунтами под которыми когда-либо был выполнен вход в gTalk. Пароли к аккаунту записаны в строковом параметре pw.
Total Commander Total Commander - сегодня, безусловно, самый популярный файловый менеджер (или его клон Unreal Commander). Функций в программе вагон и маленькая тележка и еще столько же можно на него навесить при помощи дополнительных плагинов. Нас интересует лишь встроенный в него FTP-клиент. Его используют многие и пароли, конечно же, сохраняют.
TC в отличии от многих других программ не хранит пароли в реестре, а использует старые добрые ini файлы. Пароли, а также все необходимые данные для подключения к серверам (ip, порт, имя пользователя и т.д.), Total Commander хранит в файле wcx_ftp.ini, который невинно располагается в папке с программой. Путь к директории, в которую установлен Total Commander ты можешь узнать из реестра. Загляни в ветку HKEY_CURRENT_USER\Software\Ghisler\Total Commander.
FireFox Сегодня браузер - это не просто программа для WEB-путешествий, а целый комбайн, который помимо разнообразных возможностей хранит очень много конфиденциальной ифны. Типичный тому пример - web формы. 99% современных сайтов требуют регистрации. Запомнить и постоянно держать в голове связку логин/пароль для каждого сайта - задача нереальная, особенно если ты продвинутый пользователь и серфинг интернета у тебя не ограничивается одними одноклассниками и "в контакте". Разработчики облегчили жизнь пользователям и встроили в свои программы так называемые "хранилища паролей". Зарегистрировался, зашел под своей учеткой, приказал браузеру запомнить твои учетные данные и забыл. При следующем посещении тебе останется только выполнить пару щелчков мышкой, и ты уже на сайте. Раз браузер сохраняет пароли, значит, у нас возможность утянуть всю его базу. 1. sessionstore.js - файл содержит в себе все сохраненные сессии. 2. signons3.txt - зашифрованные пароли (для третьей версии FF). 3. signons.sqlite - SQLite база, содержащая все зашифрованные пароли. 4. key3.db - база данных содержащая ключи для сертификатов. Все эти файлы расположены в уже знакомой тебе Document Settings\%UserName%\Application Data\Mozilla\FireFox\Profiles\%Имя профиля%.
and
Opera Opera - браузер, который очень популярен среди российских пользователей и естественно мы не можем оставить его без внимания. Итак, с Opera ситуация примерно такая же как и с FireFox. Все сохраненные в браузере пароли хранятся по адресу - Document and Settings\%UserName%\Application Data\Opera\profile в файле wand.dat. Получается, при обнаружении Opera будем действовать также как и в случае с FireFox.
Skype Популярность скайпа растет каждый день. Многие его используют не как средства совершения звонков, а для банального удобного чата. Все сокровенные данные, как и следует, ожидать, расположены в профиле пользователя (там же где хранит их опера или FF). Для их "приватизации" нужно скопировать профиль пользователя из Document and Settings\%userName%\Application Data\Skype\ и экспортировать ветку реестра HKEY_CURRENT_USER\Software\Skype\ProtectedStorage.
QIP Как и с большинством описанных ранее программ, QIP все сохраненные пароли также хранит в Application Data\qip.
Copying completed Слизать конфиденциальную инфу с чужого компа - дело не такое уж и трудное. Главное подойти к делу "творчески". Технология .NET сильно упростила нам задачу, и весь кодинг свелся к вызову нескольких методов. Ты, конечно, можешь сказать, что это не круто и такие штуки куда эффективней написать на WinAPI или ASM'e. В чем-то я с тобой соглашусь, но учти, на WinAPI и уж тем более на Асме написать такую программку также быстро не удастся. Пока другие пишут километровый код - мы будем с тобой собирать урожай. Удачи в программировании, а если возникли вопросы, то милости прошу, пиши – на мыло. НА ЗАМЕТКУ: Не забывай, что львиная доля пользователей очень "правильные" и хранят очень много интересной информации в папку "Мои документы". Как минимум там могут быть интересные рабочие документы, а иногда и целый файлики с паролями. Я в свое время (на бывшей работе) обнаружил на компе бухгалтера аккуратненько отформатированный файл с паролями к банк-клиентам. Выводы делай сам. На этом можно заработать На многих хакерских форумах много объявлений о продаже софта такого рода. Цены разные от 10$ до 100$. Доработав рассмотренные в статье примеры, возможно, заработать на корочку черного хлеба с икрой. Повторюсь, главное подойти к делу творчески и все обязательно получится.
Written by Игорь Антонов aka Spider_NET E-mail: antonov.igor.khv@gmail.com
Позови меня тихо по имени Shot through the heart And you're to blame You give love a bad name I play my part and you play your game You give love a bad name John Bon Jovi
Я уже достаточно давно программирую на Delphi и за всю практику передо мной ни разу не возникала необходимость выполнять инициализацию формы, зная лишь ее имя. Сразу хочу уточнить, что под инициализацией формы «по имени» я подразумеваю создание формы именно, зная только ее символьное название. Т.е. не банальный: var fMyForm: TMyForm; begin fMyForm := TMyForm.Create(nil); fMyForm.ShowModal(); …. End;
Грубо говоря, в качестве входных данных мне известно лишь имя типа моей формы – TMyForm (или какой-либо другой), а на выходе мне требуется получить созданную форму. Я уже говорил, но повторюсь. За всю практику, я ни разу не пробовал делать нечто подобное. Да, я писал приложения, в которых компоненты создаются в рантайме и т.д., но вот с такой «хитрой» инициализацией форм я столкнулся лицом к лицом впервые. Попробовав быстренько накидать пример, я, заработал себе шишку на голове. Все оказалось несколько сложнее, чем, то, что представил мой мозг. Набив себе шишку, я не стал отчаиваться и все-таки нашел решение данной задачки и вот сейчас, я хочу поделиться им с тобой. Вдруг, ты тоже столкнешься с чемто подобным.
Простота – залог хорошего начала Я понимаю, что ты не маленький и уже наверняка знаешь, что условно, все формы твоего проекта можно разделить на два вида: автосоздаваемые и создаваемые вручную. По умолчанию, когда ты добавляешь к своему проекту новую форму, она сразу же становиться автосоздаваемой – т.е. создается во время запуска твоего приложения. Тебе не нужно заботиться о выделении/освобождении для этой формы памяти, т.к все уже готово. При таком раскладе, твои действия сводятся к вызову одного из методов для ее отображения (например, ShowModal). Если же форма не является автосоздаваемой, то ее создание полностью лежит на твоей совести. Чтобы освежить весь процесс в памяти, давай попробуем создать новый проект и потренироваться. Итак, запускай дельфина, отдавай ему команду File -> New -> Application и сразу же засейв все это дело. На форму брось один компонент TEdit и кнопку. Поле ввода мы будем использовать для написания имя формы, которую будем инициализировать. Ну а кнопу, будем юзать непосредственно для выполнения кода инициализации. Мою форму ты можешь увидеть на рисунке 1.
Рисунок 1 (Созданная форма)
Перед тем как заняться разбором полетов с кодом, давай создадим несколько форм для пробы. Добавь к своему прожекту две новые формы. Сразу же присвой им имена (свойство name) и сохрани их модули. В своем варианте проекта, я дал им такие имена: FirstForm и SecondForm. Ты помнишь, что по умолчанию все вновь создаваемые формы становятся автосоздаваемыми. Для нашей сегодняшней задачи это неприемлемо, поэтому давай исправлять положение дел. Зайти в окно настроек проекта (Project -> Options). Перейди на закладку Forms и перенеси недавно созданные, нами в формы в список неиницилизируемых (рисунок 2).
Рисунок 2 (Список автосоздаваемых форм) Можно считать, что на этом, все основные приготовления завершены. Пора переходить к решению основной задачи.
А что нам надо? Перед тем как поглядеть на главный код, давай вспомним, как происходит стандартная инициализация формы. Делается оно так: var fMyForm: TFirstForm; begin fMyForm := TFirstForm.Create(nil); fMyForm.Caption := 'Эту форму я инициализировал в ручную!'; fMyForm.Label1.Caption := 'Пример ручной инициализации формы'; fMyForm.ShowModal; fMyForm.Free;
Как видишь, ничего сложного. Ok, вспомнили, едем дальше. Теперь рассказываю самое интересное. Для создания формы мы объявили форму типа TFirstForm. По сути, этот тип соответствуют классу создаваемой, формы. Получается, что для создания формы по ее имени,
нам необходимо знать название ее класса. «Так мы же его знаем!» - скажешь ты. Да, знаем, но перед тем как заюзать его в боевых условиях мы должны его зарегистрировать. После регистрации, мы сможем найти его (зарегистрированный класс) при помощи функции FindClass(). Принцип работы этой функции достаточно прост. Она пробегает по списку всех зарегистрированных классов и ищет класс, по символьному названию, переданному в качестве первого параметре. Если поиск завершиться успешно, то функция вернет ссылку на объект типа TPersistentClass. Эту ссылку, мы впоследствии сможем привести к объекту типа TFormClass() и уже с его помощью произвести инициализацию формы. На первый взгляд все кажется все слишком сложным, но не будем впадать в панику раньше времени, а попробуем во всем разобраться на практике. Итак, возвращайся к своему созданному проекту, перейди в редактор кода (сейчас нас будет интересовать модуль главной формы) и в разделе Private опиши новый метод: procedure RegisterAllFormClass();
В этом методе, мы напишем код, который будет производить регистрацию необходимых нам форм. Нажимай CTRL+SHIFT+C и дельфин в мгновение ока создаст шаблон пустой процедуры. В теле процедуры напиши следующий код: RegisterClass(TFirstForm); RegisterClass(TSecondForm);
С помощью метода RegisterClass мы производим регистрацию необходимого нам класса. В нашем случае, требуется выполнять инициализацию классов форм, т.е. TFirstForm и TSecondForm. Обрати внимание, что мы передаем именно тип наших форм, а не их имена. Название типа формируются из имени формы, но перед ним добавляется бука «T». Ok, здесь должно быть все понятно. После выполнения этого куска кода, в списке зарегистрированных классов появятся классы наших форм. Чтобы этот код выполнился, нам нужно где-то вызвать этот метод. Рекомендую, повесить вызов метода RegisterAllFormClass() на обработчик события OnCreate() нашей главной формы. В своем примере, я поступил именно так. А вот теперь настал момент истины – описание метода, который будет отвечать за непосредственное создание формы. Этот метод я вежливо обозвал CreateFormFromName. Полное описание метода выглядит так: procedure CreateFormFromName(FormName:String);
В теле этого метода тебе напиши этот код: var FormClass:TFormClass; Form:TForm; begin FormClass := TFormClass(FindClass(FormName)); Form := FormClass.Create(Application); Form.ShowModal; Form.Free;
Рассмотрим этот код немного подробней. В самой первой строчке кода, я привожу найденный класс с помощью метода FindClass() к классу TFormClass(). Как только класс будет получен, мы можем переходить к инициализации формы. Ее выполняем стандартным образом – путем вызова метода Create(), объета FormClass.
После выполнения метода Create(), можно оперировать формой привычными способами. Для примера, я вызвал метод ShowModal() и сразу же метод Free. Попробуем заюзать пример в действии. Создай обработчик события OnClick для нашей единственной кнопки и в нем напиши единственную строчку кода: CreateFormFromName(Edit1.Text);
Вот, собственно говоря, все и готово. Запускай приложений и попробуй ввести в поле ввода имя формы, например TFirstForm. Заметь, имя формы нужно вводить с буквой T. Как введешь название – клацай на кнопку и наслаждайся результатом. После закрытия формы, выделенная под нее память сразу же освободиться, т.к. в самом конце метода CreateFormFromName() я сразу же вызываю метод Free. Для наглядности, я бросил на каждую из создаваемых форм по одному компоненту TLabel и в свойстве caption указал название формы. Результат работы программы ты можешь увидеть на рисунке 3.
Рисунок 3 (Программа в действии)
Outro На этом хочу закончить свой небольшой рассказ. Надеюсь, эта информация тебе пригодится. Удачи!
Written by Антонов Игорь aka Spider_NET E-mail: Antonov.igor.khv@gmail.com
Админим по-хакерски Куем RDP и VNC клиентов На моей основной работе мне приходится заниматься администрированием серверов и рабочих станцией, работающих под управлением Windows/Linux. К серверам я привык подключаться через стандартный RDP, а для соединения с рабочими местами пользователей больше предпочитаю использовать одну из модификаций VNC. Функциональность RDP и VNC меня полностью удовлетворяют, за исключением одного НО. При интенсивной работе, мой рабочий стал захламляется копиями приложений TightVNC и mstsc. Бывает, работаешь с тремя серверами, а тут тебе звонит пользователь и слезно просит помочь. Хочется иль не хочется, а приходится сворачивать окна mstsc и запускать консоль TightVNC. В результате такой работы, рабочий стол быстро превращается в хаос, состоящий из открытых окон mstsc и TightVNC. Найти в таком бардаке окно с нужным сеансом крайне проблематично. Однажды, меня все это окончательно достало, и я решил, во что бы то не стало исправить положение дел. Что из этого получилось, ты узнаешь по ходу чтения этой статьи.
Путь смертного Пожалуй, самым простым способом решения выше озвученной проблемы будет поиск и внедрение готового клиента-комбайна, поддерживающего протоколы RDP и VNC. Способ, несомненно, хорош, а главное, времени на его реализацию практически не надо. Таких утилит пруд пруди, успевай только выбирать. Но, отдавая предпочтение готовому софту, ты автоматически становишься обладателем всех его плюсов и минусов. Среди основных минусов обычно выступает – цена. Продвинутый софт стоит денег, а бесплатный редко попадается со всеми необходимыми функциями. Оба эти минуса меня в свое время не устроили, и я решил пойти по нетоптаной тропинке. Путь Джедая Насупившись и сжав в руки в кулаки я решил во чтобы то не стало написать своего мегапродвинутого клиента. По задумке он должен был бы уметь поддерживать подключения по протоколам RDP и VNC. Решить проблему открытых окон я хотел с помощью уже хорошо проверенного метода – использования вкладок. А что? Уже все WEB-браузеры, в том числе и хромой ослик ИА открывают новые страницы в отдельном табе. Юзеры от такой фишки довольны и уже не одного из них не заставишь отказаться от этой фичи. Я подумал, а почему бы интерфейс моего приложения не сделать в таком же духе? Было бы супер, когда каждый удаленный рабочий стол располагался бы в отдельной вкладке. В заголовке таба можно было прописывать название сервера и уже по нему ориентироваться. Думаю, мою идею ты уловил.
На чем лучше писать Перед разработкой своего приложения, я долго мучился в выборе языка. Сначала я было хотел написать все на Delphi. Скажу даже больше, я уже реализовал поддержку RDP и VNC, но
потом, некоторые ограничения дельфина мне надоели, и я решил сделать выбор в пользу C# и платформы .NET. Выбирая технологии от Microsoft, ты получаешь, кучу готовых шаблонов и для достижения нирваны остается приложить совсем чуть-чуть усилий.
RDP Итак, для организации поддержки протокола RDP, мы обратимся за помощью к Comкомпоненту - Microsoft RDP Client. Пользоваться этим компонентом чрезвычайно просто и что немаловажно - удобно. К тому же, компонент установлен в каждой системе, поэтому заботиться о его поставке не придется. Чтобы воспользоваться возможностями этого компонента, тебе необходимо добавить его на панель выбора элементов. Делается это через окно «Выбор элементов панели инструментов» -> COM-компоненты». В представленном списке компонент, отметь флажком Microsoft RDP Client Control. Проделав это не хитрое действие, на панели выбора элементов, как и следовало ожидать появится новый компонент. Теперь попрактикуемся в боевом применении. Знакомиться лучше сразу начинать с практики. Для демонстрации возможностей компонента я накидал простенький демонстрационный пример. Форма моего проекта как обычно красуется на одном из рисунков. Нарисуй что-то подобное или придумай неповторимый дизайн. Перед тем как начать шкрябать кодерские каракули, поглядим на методы и свойства недавно установленного компонента. Начнем наше знакомство со свойств: Connected – если соединение с удаленным рабочим столом установлено, то здесь будет 1. ColorDepth – палитра цветов. Может принимать следующие значения: 8, 15, 16, 24, 32; Server – адрес удаленного сервера. Одинаково воспринимает как символьные имена, так и IP адресt. UserName – Имя пользователя; AdvancedSettings2.ClearTextPassword – Пароль; AdvancedSettings2.RDPPort – Номер порта; DesktopWidth – Ширина удаленного рабочего стола; DesktopHeight – Высота удаленного рабочего стола; FullScreen – Полноэкранный режим; RedirectPrinters – Переопределять принтеры. Если true, то при отправке документа на печать с удаленной машины, он будет печататься на твоем принтере. RedirectSmartCards – Переопределять смарт-карты. RedirectPorts – Переопределять порты. Со свойствами разобрались. Перейдем к методам. Из всех имеющихся, нас интересуют лишь два: Connect() и Disconnect(). Я полагаю, что пояснять для чего они нужны необходимости нет. Помимо свойств и методов, как и у любого другого компонента, у MS RDP Client Control имеется целая пачка событий. Здесь их рассматривать не буду. Об их предназначении не трудно догадаться по названию. Так что проблемы возникнуть не должны.
Куем RDP клиент Теорией мы заправились, а раз так, то самое время переходить к практике. Хотя, особо тут практиковаться негде – все и так достаточно просто. Не веришь? Тогда взгляни в первый листинг, и ты в этом убедишься. Листинг 1. Подключиться к RDP RdpClient.Server = textBox1.Text.Trim(); RdpClient.AdvancedSettings2.ClearTextPassword = textBox3.Text.Trim(); RdpClient.UserName = textBox2.Text; //RdpClient.Domain = “Домен”; //RdpClient.FullScreen = true;
switch (comboBox1.SelectedIndex) { case 0: RdpClient.ColorDepth break; case 1: RdpClient.ColorDepth break; case 2: RdpClient.ColorDepth break; case 3: RdpClient.ColorDepth break; }
= 15; = 16; = 24; = 32;
switch (comboBox2.SelectedIndex) { case 0: RdpClient.DesktopWidth = 640; RdpClient.DesktopHeight = 480; break; case 1: RdpClient.DesktopWidth = 800; RdpClient.DesktopHeight = 600; break; case 2: RdpClient.DesktopWidth = 1024; RdpClient.DesktopHeight = 768; break; case 3: RdpClient.DesktopWidth = 1120; RdpClient.DesktopHeight = 700; break; case 4: RdpClient.DesktopWidth = 1280; RdpClient.DesktopHeight = 1024; break; } RdpClient.Connect();
Весь процесс установки связи с удаленным хостом сводится к заполнению свойств компонента RdpClient и вызову метода Connect(). В случае, если вся введенная инфа корректная, то подключение будет установлено, а если нет, то вылетит экспешн. Сразу хочу заметить. В своем коде я не делал обработку ошибок. В реальном приложении они необходимы. Попробуй реализовать их самостоятельно, а если не получится, то не отчаивайся. После того как мы разберем по косточкам работу с VNC ты сможешь сделать обработку экспешнов по аналогии. Разбор практики использования RDP можно считать оконченным. В принципе, уже можно переходить к рассмотрению VNC, но сначала мне бы хотелось рассказать еще об одном около rdp’шном нюансе. Те кто юзает стандартный RDP клиент наверняка привыкли создавать ярлыки (правильней сказать файлы настроек) для быстрого подключения к нужному серверу. У меня например таких ярлыков примерно штук 13. Пользоваться ими удобно - кликнул и подключился к нужному серверу. Но вот при переходе на своего собственного клиента я испытал реальные трудности. Я буквально сам себя поставил перед фактом – либо вбивать в свою прогу параметры подключения для всех этих 13 машин самостоятельно, либо предусмотреть возможность импорта настроек из сохраненных файлов. Первый вариант меня не особо привлекал, поэтому я сразу решил заняться реализацией второго. Сначала я думал, что тут будет много сложностей, но как оказалось в дальнейшем, любители C# уже проделали эту работу вместо меня и запечатлили свои труды в классе RDPFileReader. Данный класс позволяет как читать файлы настроек, так и создавать новые. Воспользовавшись им, ты сделаешь свою программу универсальной. Все старые файлы настроек можно будет импортировать, а при необходимости передачи параметров соединения кому-либо из пользователей, предусмотреть экспорт. Причем производить экспорт именно в стандартный
файл настроек, который без проблем поймет встроенный в Windows rdp клиент. Все, не буду тебя томить, взгляни лучше на пример чтения произвольного файла настроек: OpenFileDialog myOpenFileDialog; myOpenFileDialog = new OpenFileDialog(); myOpenFileDialog.Filter = "RDP File|*.rdp"; myOpenFileDialog.Title = "Выбор файла с настройками RDP"; myOpenFileDialog.ShowDialog(); if (myOpenFileDialog.FileNames.Count() > 0) { RDPFile MyRdpFile = new RDPFile(); MyRdpFile.Read(myOpenFileDialog.FileName); //Обработка свойств объекта MyRdpFile }
В этом небольшом куске кода, я вызываю стандартный диалог открытия файлов. Если пользователь выбрал файл, то тогда, мне ничего не остается как создать экземпляр объекта типа RDPFile и выполнить его метод Read(). В качестве параметра этому методу нужно передать путь к файлу, который и нужно читать. Завершив чтение, поля объекта MyRdpFile будут заполнены данными из файла. Например: - AudioMode – режим аудио - Domain – домен - FullAddress – адрес сервера - Password – пароль - RedirectComPorts – переопределять Com порты - Username – имя пользователя. - DesktopHeight – высота рабочего стола. - DesktopWidth – ширина рабочего стола. - и т.д.
Разработка в самом разгаре
VNC Сделать поддержку VNC несколько сложнее. Этот протокол создан не в недрах MS, а следовательно весь кодинг ложиться сугубо на твои плечи. Не стоит раньше времени переживать и думать, что весь протокол придется описывать с нуля. Уже создано не мало
различных клиентов (в том числе и OpenSource), в которых можно подсмотреть код и перенести его на нужный нам язык программирования. Стой! Не торопись запрягать любимый гугл! Мы не станем искать сишные клиенты, и разбираться в десятках килобайт чужого кода. Уже нашлись умельцы и энтузиасты, которые проделали всю черную работу за нас и оформили результат в виде компонента для моего любимого C#. Все, что от нас требуется – подключить его к Visual Studio и написать несколько нехитрых строчек кода. Итак, отправляйся на http://cdot.senecac.on.ca/projects/vncsharp и сливай последнюю версию компонента. Он доступен как в исходных текстах, так и уже в виде готовой библиотеки dll. Мне больше нравится работать с иходникам, т.к. при необходимости, у тебя всегда есть возможность внести изменения. Поэтому мой выбор – это архив с исходником и самостоятельная компиляция. Если ты как и я, отдал предпочтению архиву с исходными текстами, то открывай сорцы в Visual Studio и приступай к компиляции. У меня она прошла без ошибок. Искать дополнительных библиотек не пришлось. Если у тебя также все прошло Ok, то на выходе, ты должен получить библиотеку с именем VncSharp.dll. Закрывай в студии открытые ранее сорцы компоненты VncSharp и создавай новый проект типа Windows Forms Application. Сейчас мы подключим скомпилированный ранее компонент. Для этого выполни несколько простых шагов: 1. Открой панель элементов и кликни на ней правой кнопкой мыши. 2. В контекстном меню выбери пункт «Выбрать элементы/choose elements». 3. В появившемся окне клацни по кнопке «Обзор» и выбери получившуюся в результате компиляции библиотеку. 4. Кликай Ok, а затем найди на панели элементов новый компонент RemoteDesktop и кинь его на форму.
Компонент RemoteDesktop готов к использованию
Считай, что после установки компонента на форму пол дела уже сделано. Остается лишь заполнить пару полей и выполнить несколько методов. Для лучшей демонстрации работы с VNC я опять таки набросал небольшой проект. Его форму ты можешь увидеть на соответствующем рисунке.
Проект для демонстрации работы с VNC Для установки соединения с серверной частью VNC, тебе необходимо выполнить метод Connect компонента RemoteDesktop. Метод описан так: Void Connect(string host, bool ViewOnly, bool scaled);
Метод принимает целых три параметра: - host – адрес удаленного хоста. Можешь указывать здесь либо ip адрес, либо символьное имя. - viewOnly – режим отображения удаленного рабочего стола. Если передать в этом параметре true, то, удаленный десктоп будет доступен лишь для просмотра. Все клики мышкой, или нажатия клавиш на клавиатуре будут игнорироваться - scaled – масштабирование. Передаем true – получаем масшабированное изображение. Код установки соединения из моего примера ты можешь увидеть в листинге 2. Листинг 2. Установка соединения с сервером VNC string remoteHost = TextBox1.Text; int remotePort = Convert.ToInt32(TextBox2.Text); try {
remoteDesktop1.VncPort = remotePort; remoteDesktop1.Connect(remoteHost, false, true); } catch (VncProtocolException vex) { MessageBox.Show(string.Format("Невозможно установить соединение: {0}", vex.Message)); }
Код второго листинга прост до безобразия и вряд ли требует детальных пояснений. Все что в нем происходит – заполнение необходимых полей и вызов метода Connect, а также обработка эксепшн типа VncProtocolException. При удачном раскладе, в компоненте RemoteDesktop отобразится содержимое удаленного рабочего стола. Внимательно посмотрев на листинг, ты наверняка заметил, что в коде негде не видно передачи пароля. А ведь известно, что на подключение к серверной части может требоваться пасс. Тогда почему, мы нигде не обрабатываем эту ситуацию? Дело в том, что компонент берет эту обязанность на себя. В случае, если требуется ввод пароля, то он автоматически сгенерирует окно запроса пароля. Не устраивает такой подход? Не проблема! Объяви функцию, которая будет возвращать пароль (можешь даже организовать хранилище паролей в базе данных) и передавать его в свойство GetPassword объекта RemoteDesktop (см., исходник). Так, подключаться мы научились. Теперь рассмотрим самый последний момент работы с VNC и двинемся дальше. При администрировании удаленных систем, всегда требуется послать сочетание нескольких клавиш. Типичный пример – Ctrl + Alt + Del. Если попробовать их тупо нажать, то хорошего ничего не произойдет. Все что ты увидишь – запуск на локальном компьютере таск менеджера. Исправить положение дел, поможет метод SendSpecialKeys(). Его описание выглядет так: void SendSpecialKeys(SpecialKeys keys, bool release);
Метод принимает аж два параметра: - keys – значение из перечисления типа SpecialKeys (по сути это спец клавиши). В качестве значений могут быть: - Alt - AltF4 - Ctrl - CtrlAltDel - CtrlEsc - realese – освобождать клавишу или нет Получается, что для отправки сочетания трех клавиш от всех бед, тебе требуется выполнить всего одну строчку кода: RemoteDesctop1.SendSpecialKeys(SpecialKeys.CtrlAltDel); На этом знакомство с компонентом для работы с VNC можно считать оконченным. Хочу обратить твое внимание, на то, что я рассмотрел не все методы компонента RemoteDesktop. Те, что остались за кадром – доступны во врезке.
Делаем закладки Работать с обоими протоколами мы научились как в теории, так и на практике. Теперь остается лишь посмотреть на процесс создания табов для каждого удаленного рабочего стола. Как ты наверное уже догадался, все новые табы, должны создаваться во время работы приложения (RunTime). Код создания очередной вкладки будет выглядеть примерно так: TabPage NewPage = new TabPage(); NewPage.Text = "Новая вкладка"; RemoteDesktop NewRemoteDesctop = new RemoteDesktop(); NewPage.Controls.Add(NewRemoteDesctop); tabControl1.TabPages.Add(NewPage);
Для большего удобства, лучше сохранять ссылку на вновь созданную вкладку в каком-нибудь контейнере. Потом намного будет удобней работать с большим количеством табов (например, выполнять поиск, сортировку и т.д.).
Заключение Написать можно все что угодно, главное поставить себе цель и не в коем случае не сворачивать с пути. А еще важнее, не идти на поводке моды, а писать на том языке, на котором быстрее удастся достигнуть результата. Чем меньше затратишь времени, тем больше сможешь оставить его для более приятных вещей. Для сегодняшнего примера мы выбрали C#, хотя могли писать и на Java, или на приплюснутом Си, но в этом случае, так быстро создать рабочее приложение нам бы не удалось. Удачи тебе в кодинге, возникнут вопросы – пиши на мыло, постараюсь помочь!
Нерассмотренные методы RemoteDesctop - IsConnected – возвращает true, если соединение с удаленным компьютером установлено. - Disconnect – выполняет отключение от удаленной машины - SetScalingMode (bool scaled) – если в качестве единственного параметра передаем true, то будет установлен режим масштабирования. - FullScreenUpdate() – полноэкранный режим - FillServerClipboard() – перенос содержимого буфера обмена с локальной машины на удаленную.
Совет На основе полученных из статьи знаний ты без проблем сможешь написать полезные в хакерском деле утилиты – брутфорсы. Например, совсем недавно в нашем журнале был рассказ об утилите, которая подбирает пароль к RDP. В ее основе как раз лежала технология, которую мы сегодня разобрали. Так что мотай на ус и не расслабляйся.
Written by Игорь Антонов aka Spider_NET E-mail: antonov.igor.khv@gmail.com
Человек VS. депрессия. Как все плохо... кругом война... смерть... глупость... а мы тут... пьем. Масяня, “Депрессняк”
Слово это, думаю, известно всем и каждому. Тема депрессии уже не первый год открыто обсуждается практически везде, где только можно. Обсуждается, обсуждается... и все равно, каждый человек, лично столкнувшийся с этой напастью, оказывается практически безоружным. Вообще-то, лучший вариант в этом случае - обращение к врачамспециалистам, только вот, несмотря на то, что депрессия уже считается вполне законной и официальной болезнью, подавляющее большинство людей по-прежнему упрямо занимается “самолечением”. Такое вот не позитивное вступление получается, сразу рисуются перед глазами изображения больниц, врачей, витают запахи разнообразных лекарств... мерзопакость какая-то. Нет-нет, никуда мы с Вами, уважаемый читатель, не пойдем. Мы, как обычно, запремся в домашних условиях, начнем самостоятельно искать выход из сложившейся ситуации и, уж поверьте мне, найдем его обязательно. Для начала предлагаю занять голову вопросом: “Откуда же вообще появляется эта депрессия?”. Ведь если это болезнь – значит, ей каким-то хитромудрым образом заражаются. Вопрос – каким? Понятно, что это никакая не простуда и даже не свинячья, получается, что маски, чеснок и ограничения контактов с больными здесь вряд ли помогут. Значит, давайте разбираться в причинах возникновения депрессии.
Причины возникновения депрессии К сожалению, причин возникновения депрессии существует великое множество, ведь все-таки мозг – очень чувствительный орган. Попробуем сейчас рассмотреть хотя бы самые основные. Самая распространенная, зависящая от внешних условий, причина депрессии – это стрессы, которых в нашей жизни хоть отбавляй. Любая ссора, даже банальное хамство в Ваш адрес в общественном транспорте, могут выбить из колеи. А если постоянно идет примерно такая цепочка событий “нахамили в автобусе – горят сроки сдачи проекта – начальник постоянно вызывает “на ковер” - дома конфликты с женой/мужем/детьми/родителями – постоянные ночные кошмары – нахамили в автобусе - ...” ну дальше Вы и сами поняли. Весь этот негатив копится, копится, копится – и в итоге мы получаем состояние “нестояния” (это я про депрессию сейчас говорю, никаких грязных мыслей, пожалуйста). Свой отпечаток на состояние человека может накладывать и время года, так называемая “сезонная” депрессия. Согласитесь, многие не любят осень, а уж тем более зиму (не считая, пожалуй, новогодних праздников). Осенью все вокруг кажется увядающим, а зимой – и вовсе мертвым. “Какая уж тут жизнь” - говорит человек и тихо-медленно начинает погружаться в трясину депрессняка. Кроме внешних причин депрессии есть и внутренние (час от часу не легче!), которые не зависят от внешних факторов и возникают только из-за дурных мыслей самого человека. Например, лет в 30-35 идет так называемый “кризис среднего возраста”. А возникает он вот по какой причине:
человек оценивает то, кем он хотел/хочет себя видеть в этом мире и то, кем он является. И вот в случае, когда желаемое и действительное слишком сильно разнятся, и начинаются терзания. Ну например, если человек стремился к управлению большим предприятием, а по прежнему трудится у токарного (например) станка и понимает, что никуда он уже не “поднимется” - здесь все понятно. Но бывает и так, что человек работает на хорошей, денежной должности, находится на хорошем счету у коллег и начальства, вроде бы, чего ему-то грустить? А, может, он ненавидит работать “на дядю”, может, он хотел к своим 30-35 годам уже организовать свое дело? А теперь дома жена, да и детишки постоянно требуют кушать – уже и не уйдешь, и не рискнешь. Так что такого рода депрессия часто бывает и у тех, кто, по общепринятым меркам, “состоялся” в жизни. Подчас, именно у таких людей кризис среднего возраста проходит тяжелее – некому высказаться, пожаловаться, собеседник лишь покрутит пальцем у виска и заявит “Это ты-то не состоялся? Да тебе вообще грешно на жизнь жаловаться.” Не только кризис среднего возраста, любая внутренняя депрессия возникает по причине разногласий между желаемым и действительным. Вспомним юношескую (да и не только юношескую, впрочем) “неразделенную любовь”: все эти душевные страдания, переживания, тоска вызваны лишь одним – несоответствием действительности и наших желаний. Впрочем, бывает и совсем наоборот, депрессия возникает из-за того, что реальность и мечты совпали. Некоторые психологи и психиатры говорят, что это состояние называется “парадоксальной депрессией”. Для примера хочу вспомнить сериал “Next”, первый сезон, тот, который всего из четырех серий. Так вот, там богатый и успешный человек говорит “Да, я мечтал, мечтал о доме, о деньгах, о черной “Чайке”. А теперь все – нет мечт!”. “Парадоксальная депрессия” может возникнуть у тех, кто достиг той цели, к которой стремился долгое время, которая, может быть, уже стала навязчивой идеей, а то и смыслом жизни. А теперь все достигнуто, смысла жизни больше нет. “Смысла жизни больше нет” - вот она, первая мысль тяжелого депрессняка. Может быть, эти причины покажутся Вам какими-то глупыми– как, мол, у взрослого современного человека могут возникнуть такие “детские мысли”. Я, соглашусь, что изначально сами эти мысли довольно безвредны, только вот у депрессии есть две стадии: Эмоциональная стадия. Эта стадия является начальной, “легкой” стадией депрессии. Дальнейшее развитие может идти по одному из двух путей: Человек замечает, что с ним что-то не так, сам себе признается в том, что у него начинается депрессия, разбирается в причинах, вызвавших ее, благополучно находит решение и возвращается в нормальное состояние (о том, как выходить из депрессии мы с Вами еще поговорим); Человек замечает, что с ним что-то не так, но либо не придает этому значения, либо, что еще хуже, старается загнать эту мысль подальше, просто задавить ее другими мыслями. А депрессия тем временем все укрепляется, особенно если не заканчивается стрессовая ситуация, вызывающая депрессию, и переходит во вторую стадию. Физиологическая стадия. Последствия длительной депрессии в первой стадии приводят уже не к эмоциональным, а самым натуральным физическим расстройствам, в том числе и нарушениям работы мозга, то есть у человека вполне натурально “едет крыша”, которая уже может обратно и не вернуться. В случае появления хотя бы незначительных признаков этой стадии (например, попытки суицида или навязчивые мысли, которые человек уже не просто обдумывает, а время от времени озвучивает) необходимо срочно обращаться к специалистам, отложив все, даже самые срочные, дела.
Первая стадия может быть довольно длительной – тут все зависит от психологической стойкости человека, от того, насколько долго он может выдерживать постоянно нарастающее депрессивное состояние. На этом этапе от депрессии можно избавиться самостоятельно, либо с незначительной поддержкой. В принципе, большинство ответов на вопрос “Как избавиться от депрессии?” очевидны, тем не менее, я бы хотел их озвучить, чтобы целиком и полностью снять все домыслы и догадки.
Выход из депрессии. Что нужно делать. Самое первое и самое главное (оно же и самое сложное) – это настройка на позитив. Нужно посмотреть на мир позитивным взглядом, как бы сложно ни было это сделать. Для того, чтобы облегчить выполнение этого задания поступите следующим образом: Выясните, какие именно обстоятельства Вас угнетают. Снег и холод за окном? Если есть возможность, возьмите отпуск, слетайте куда-нибудь на горячие пляжи отдохнуть. Нет такой возможности – не беда, запишитесь, например, в солярий и бассейн – вполне себе альтернатива морю и пляжу. Достигнута мечта всей жизни – придумайте поскорее новую мечту и начинайте стремиться к ней. Откройтесь людям. Часто при депрессии человек “закрывается”, “уходит в себя”. Внешне такой человек остается вполне доброжелательным и жизнерадостным, в то время как на самом деле ему становится все хуже. Так скажите об этом: психологу ли или лучшему другу – не так уж и важно. Главное – высказаться, а там, кто знает, может быть вместе, вы сможете найти выход из ситуации, благодаря которой и оказались в депрессии. Также можно высказаться и на тематических форумах, или в каком-либо социальном сервисе, который Вам знаком. Смените обстановку. Попробуйте изменить то, что Вас окружает, хотя бы переставить компьютер в другой угол или, может, распечатать и повесить на стену какую-нибудь прикольную картинку, коих в Сети – целый грузовой состав (какие уж тут вагон и тележка). Если есть возможность – съездите в другой город (к родственникам, друзьям, знакомым или просто чтобы по городу погулять). Только учтите, что по возвращении “родные стены” попробуют снова навязать депрессивные настроения. Будьте готовы отразить его мощным зарядом накопленного позитива. Легкие физические нагрузки. Запишитесь на фитнес или раздобудьте несколько видеозаписей и занимайтесь дома. Можно пойти на каток, например. Не умеете кататься на коньках? Отлично, самое время научиться! На улице снег – прекрасно, достаньте с антресолей лыжи или просто возьмите их напрокат, это совсем недорого, и отправляйтесь на лыжную прогулку в лесной массив. Побалуйте себя. Давно мечтали о новом фотоаппарате или видеокамере? Хотели запечатлевать все красивости вокруг? Самое время потратиться, и купить себе то, что поможет Вам отвлечься от грустных мыслей. Одолжите денег у друзей, родителей или возьмите кредит в банке - не так уж важно. А может, Вам давно хотелось хороший коммуникатор или нетбук, чтобы иметь возможность писать позитивные материалы для личного блога или чирикать в твиттере? Так за чем же дело стало? Купить это сейчас – самое время. Не стоит, конечно, становиться шопоголиком, но побаловать себя в разумных пределах, несомненно, имеет смысл. Впрочем, что это я все о гиково-материальном. А как насчет расслабления в солярии и красивом загаре после него? А что Вы скажете о массаже или косметических процедурах?
Женщинам это, конечно, ближе, но и для мужчин есть масса аналогичных услуг, может быть, стоит их для себя открыть? Есть еще масса интересных и простых способов выйти из состояния депрессии (та же Масяня, упомянутая в эпиграфе, вспомните, ехала на берег и пела там песню). Главная мысль у них всех одна: отвлечься от давящих мыслей; то, что Вы каждую секунду думаете о том, что все плохо, никак не улучшит ситуацию. Как минимум, не улучшит, а зачастую еще и усугубит! Постоянно думая, например, о том, что ничего не получается на работе, Вы будете идти на эту работу словно на каторгу, будете сильнее уставать, становиться все более рассеянным. Как результат – будете работать все хуже, а мысли будут становиться все депрессивнее. Вам ЭТО нужно? Уверен, что нет!
Выход из депрессии. Чего делать не нужно. Самой главной ошибкой, из-за которой депрессия затягивает все сильнее, будет, пожалуй, поддаться своим мрачным мыслям. Запомните, хоть это и Ваши мысли, но они никоим образом не пойдут на пользу. Ну а если говорить более конкретно, то вот Вам несколько примеров, что происходит с человеком, пошедшим на поводу депрессняка. Перенапряжение. Если Ваша депрессия связана с работой, либо какими-то другими делами, в которых у Вас наблюдается спад, не стоит уходить в работу с головой. Делая это, Вы берете на себя гораздо бОльшую нагрузку, которую и так ослабленный организм вряд ли способен выполнить. А в случае “невыполнения” взятых на себя обязательств, депрессия будет только усиливаться, в результате чего Вы все яростнее станете хватать все больше и больше работы. Цикл замкнется. Важные решения. Не принимайте важных решений во время депрессии. Хотя бы просто потому, что в этот период очень сильно снижается способность аналитического мышления и в скором будущем человек может очень сильно пожалеть о своем решении, как вывод, еще сильнее понизить свою самооценку, что только подтолкнет развитие депрессии. Алкоголь и прочее “затуманивание мозгов”. В состоянии депрессии психика человека и так находится на грани срыва. Состояние опьянения вызывает чувство радости очень ненадолго, затем наступает “час расплаты”, еще сильнее затягивающий в пучину мрачных мыслей. Если, конечно, снова не “расслабиться”. И мы снова получаем замкнутый круг, выйти из которого будет еще сложнее, нежели просто из эмоционального состояния депрессии. Также не следует забывать и о том, что опьяненный человек ведет себя не совсем адекватно, а если сложить это со стрессовым состоянием организма, то прыжок с высотки, например, уже не покажется таким уж страшным. О вреде частого и обильного употребления алкоголя я здесь писать не буду – тема нынче другая. Одиночество. Ни в коем случае, как уверяют психологи, не нужно запираться в четырех стенах и оставаться один на один со своими проблемами. Человек – существо стадное или, выражаясь умным языком, социальное, поэтому ему необходимо общение. Пусть Вы не хотите видеть кислые физиономии прохожих – так выйдите в Сеть, початьтесь с теми людьми, которые Вам интересны. Хотя, конечно, лучше пообщаться вживую за чашечкой чая, лучше зеленого. Так что общайтесь, общайтесь и общайтесь.
Предупреждать, а не лечить. Раз уж мы вместе со многими специалистами считаем депрессию болезнью, то, значит, ее, как и любую заразу, легче предупредить, чем лечить потом. И вот сейчас как раз и настало время нам с Вами разобраться, какими же способами можно оставаться здоровым. Определите предрасположенность к депрессии. Если Вы уже переносили тяжелую депрессию, такую, что были вынуждены обращаться к специалистам и пачками глотать антидепрессанты, то имеет смысл убедиться, есть ли у Вас склонность к депрессии. В случае если такая расположенность подтвердится, то можно периодически консультироваться со специалистом. А что, домашний/личный психолог – это ничуть не стыдно, а даже модно! Отдыхайте. Обязательно давайте себе отдых. Нет смысла 24 часа в сутки 7 дней в неделю пахать ради благополучия себя и других. Мы говорили уже о том, что работа “на износ” приведет только к ухудшению работоспособности. Если уж даже Господь Бог взял себе выходной после 6-дневной рабочей недели – это что-то да значит. :) Не забывайте о физических нагрузках. Обязательно ходите пешком, бегайте, плавайте, катайтесь на велосипеде, роликах, скейте – нагружайте свои мышцы. Я вовсе не хочу сказать, что нужно упереться в физические упражнения как в панацею от депрессии, достаточно будет просто не прирастать пятой точкой к стулу/креслу/дивану. Когда депрессии стали распространены? Когда человечество уселось с пультом у зомбоящика и стало проводить таким образом все свое свободное время. Не обвиняйте себя во всех неудачах. Говорят, что сильный человек во всех своих неудачах должен винить только себя. Может быть и так, но тогда этот человек не должен иметь нервной системы и мозга в том числе. Конечно, я не призываю обвинять в каждой неудаче кого угодно, только не себя, везде должен быть разумный предел. Одно дело, если Вы не учли снегопада и, как следствие, пробок и опоздали на встречу – это Ваши проблемы. Но если Вы падаете в обморок от боли при удалении зуба без наркоза – тут Вы совершенно не виноваты в низком болевом пороге, просто у Вас такой организм и такая реакция на некоторые действия. Хвалите себя. Хвалите даже за самые незначительные достижения. Уступили место в метро, или спасли фирму, в которой работаете, от краха – любой из этих поступков достоин похвалы. А, может, Вы начали ходить в спортзал, что никак не могли сделать вот уже года три? Отлично, молодец! Бросаете курить? Замечательно! Нашли баг на сайте и сообщили веб-мастеру? Да Вы настоящий хакер, браво! Есть много причин, за которые можно и нужно хвалить себя. Общайтесь. Не нужно замыкаться, бороться со своей тягой к общению, каждый человек - часть социума, а само общение является одной из важнейших потребностей любого homo sapiens. В общем, методы профилактики депрессии – это то же самое, что и средства лечения, только в, возможно, меньших масштабах. Тем не менее, важность этой профилактики не стоит недооценивать. Ведь сделав свою жизнь разнообразной, Вы будете более активными, довольными судьбой и жизнью, а жизнь, в свою очередь, будет довольна Вами, и постоянно будет подбрасывать Вам приятные сюрпризы. Да, да, здесь тоже получится замкнутый круг, точнее – спираль, только уходить она будет не в негатив, а в позитив. А что – разве это плохо?
Written by ZeroXor WWW: http://zeroxor.ru