Вторник
14.05.2024
14:48


Форма входа

Приветствую Вас Гость МедвеДа | RSS
NightTop 2007
Главная Регистрация Вход
Главная » 2007 » Декабрь » 9 » новости ПРОГРАММИСТОВ
новости ПРОГРАММИСТОВ
22:32


-------------
Британская благотворительная комиссия предупредила своих членов о взломе сайта, хищении персональных данных и необходимым в связи с этим повышением бдительности. По словам представителей Комисии хакерами было похищены данные более чем 2.000 доноров, причем с некоторыми из них практически сразу связались с целью выманивания денег. Пока сайт благотворительного сообщества выключен, полиция проводит расследование, руководители находятся в шоке от случившегося.
-------------
 
Первое приложение, созданное с помощью набора инструментов для создания приложений и их размещения в сети партнерских сервисов OpenSocial от компании Google было закрыто из-за серьезной уязвимости, с помощью которой хакеры могли получить доступ к полной информации о пользователях.

Приложение было создано компанией RockYou для социальной сети Plaxo, которая позволяет своим пользователям обновлять и синхронизировать календари и адресные книги Microsoft Outlook, Mozilla Thunderbird и Mac OS X. Пользователь под ником «harmonyguy» выслал информацию об уязвимости администрации сервиса после запуска приложения от RockYou, в качестве доказательства приложив информацию о пользователях Plaxo. По словам «harmonyguy», данная уязвимость появилась из-за особенностей строения OpenSocial, и в дальнейшем возможны крупные уязвимости и в других приложениях, которые будут созданы с помощью набора инструментов от Google.
-------------
Двоим студентам Университета штата Калифорнии в Фресно предъявлены обвинения в хакерстве, краже личности, преступном сговоре и электронном мошенничестве. За попытку исправить плохие оценки студенты могут сесть в тюрьму на срок до 20 лет и быть оштрафованы на сумму до $250 тыс.

29-летний Джон Эскалера и 28-летний Густаво Разо заменили данные, неустановленным способом получив доступ к администрированию СУБД PeopleSoft. Для получения несанкционированного доступа г-ну Эскалера помогла его должность в службе технической поддержки университета. Густаво Разо заплатил ему за изменение своих оценок. Полиция предполагает, что несанкционированное редактирование базы проводилось несколько раз с января по июнь 2004 г. Доказательства вторжения были получены в ходе перепроверки данных после перехода с собственной СУБД на продукт PeopleSoft.
-------------
Сайт First Forensic Forum, британской ассоциации профессионалов по компьютерной безопасности, был вчера взломан неизвестными личностями.

Дефейс сайта F3.org видимо был давно запланирован так как случился аккурат под конец двухдневной конференции, проводимой ассоциацией. На главной странице сайта была размещена издевательская надпись - "The F3 For Security Hacked. What's Happened In The world. Thay Are No Security Or What", все остальные страницы остались судя по всему нетронутыми.
===============
Сайт партии "Союз правых сил" подвергся хакерской атаке и в настоящее время не работает, сообщил РИА Новости лидер партии Никита Белых.

"Сайт подвергся так называемой DOS-атаке. Эта атака продолжалась весь вчерашний вечер и всю ночь, и пока мы сайт восстановить не можем", - сказал он. По словам лидера партии, сейчас специалисты пытаются наладить работу сайта. Пока все оперативные информационные материалы размещаются в интернет-блогах Белых и члена федерального политсовета партии, кандидата в депутаты Бориса Немцова. "Можем считать это (атаку на сайт) случайным совпадением, но меня эти совпадения сильно смущают и случайными не кажутся", - отметил Белых. Ранее "Союз правых сил" жаловался на то, что в регионах оказывается давление на кандидатов от партии и арестовываются тиражи агитационных материалов.

---------------
Власти Китая разыскивают тайваньского хакера-шпиона Ли Фан-жуна, проникшего в ряд критически важных правительственных компьютерных систем и установившего там троян.

Троян, установленный в ряде дипломатических, коммерческих и военных организаций, обеспечивал злоумышленнику удаленный доступ к системе и возможность хищения информации, сообщает тайваньский Chinapost.com.tw со ссылкой на правительственную газету Global Times. О факте вторжения газете сообщил анонимный источник в одном из министерств Китая. Предположительно, г-н Фан-жун провел хакерскую атаку во время своей поездки в Москву, сообщает газета. Представитель китайского Управления по делам Тайваня Ян И заявил, что тайваньские разведслужбы годами крали у Китая данные. Министр обороны Тайваня не стал комментировать сообщение газеты.
--------------
Сервер bash.org.ru с утра понедельника DDoS-ят неизвестные личности. Вот что по этому поводу пишут владельцы сайта:

С сожалением вынуждены сообщить, что с 3:45 утра 29 октября по настоящий момент сервер находится под серьёзной распредёленной атакой. Мы проводим все необходимые действия для нейтрализации данной атаки и предотвращения её повторения в будущем. Потерь данных нет, но мусорным трафиком забит весь канал — успехи в борьбе с ним переменные. Как минимум до завтрашнего дня сервер будет недоступен. Спасибо за понимание. Кроме того, мы будем благодарны за достоверную информацию о заказчиках и/или организаторах атаки.
-----------------
Сервис онлайн-рекламы 24/7 Real Media в конце прошлой недели был превращен в систему доставки троянов с использованием свежего эксплойта для ActiveX-компонента RealPlayer.

Неизвестные хакеры взломали сервер доставки рекламы и внедрили в него троянские баннеры, которые затем отображались на легальных веб-сайтах, активируя уязвимость в RealPlayer, загружавшей и запускавшей через Internet Explorer трояны незаметно для пользователей. Необычное поведение рекламного сервиса в пятницу обнаружили специалисты Symantec. Этот инцидент ставит под сомнение безопасность системы так называемой «синдикации контента» - использования на веб-страницах вставок с других сайтов, считает Эндрю Стормс, директор по ИБ-операциям nCircle Network Security. По его словам, очень много контента поступает с различных сервисов синдикации, и пользователи доверяют этому контенту, доставляемому «голубыми фишками» интернета, полагая, что там нет вредоносного кода. По мнению г-на Стормса, данный инцидент должен послужить предупреждением сайтам, предоставляющим контент для синдикации. «Им необходимо тщательнее обеспечивать безопасность своего контента», - уверен он.
--------------------
 
Девятнадцатилетний подросток из штата Вашингтон задержан полицией за взлом телефонной системы 911.

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

--------------------
 
Хакеры украли из Коммерческого банка США персональную информацию двадцати клиентов.

По словам представителей банка, база данных, которую взломали злоумышленники, содержала имена, адреса, номера социального страхования, телефонные номера и, в некоторых случаях, номера счетов клиентов. Все 20 клиентов, чьи данные были украдены, проживают в штате Миссури (банк занимается обслуживанием жителей четырех американских штатов). В общей сложности взломанная база данных насчитывает около трех тысяч записей. Также стало известно, что взлом банковской информационной системы произошел немногим больше недели назад и расследованием инцидента уже занимается ФБР. Всем клиентам, чьи данные были украдены, банк обязуется предоставить бесплатный мониторинг кредитных счетов в течение ближайших двух лет.
------
В оптимизации гораздо больше магии, чем науки. Компилятор GCC поддерживает сотни ключей оптимизации, влияние большинства из которых на быстродействие программы весьма неоднозначно: в одном случае мы получаем колоссальный прирост производительности, в другом же — обвальное падение. Причем чем агрессивнее ведет себя оптимизатор, тем выше шансы, что откомпилированная программа с треском развалится. Поэтому разработчики, как правило, оставляют солидный «запас прочности» по оптимизации, позволяющий нам (не без риска, конечно) форсировать ключи компиляции, увеличивающие скорость работы программы в несколько раз.

Наверное, всем известно, что компилятор GCC поддерживает несколько уровней оптимизации (O1 – минимальная, O2 – умеренная, O3 – агрессивная), но не каждый догадывается, что даже на уровне O3 задействуются далеко не все режимы оптимизации и до максимальной производительности еще пилить и пилить.

Однако забить все ключи в командную строку недостаточно. Если бы все было так просто, разработчики компилятора уже давно бы сделали это за нас. В погоне за производительностью очень легко вылететь с трассы и свалиться в глубокую яму. Не думаю, что кому-либо с первой попытки удастся подобрать нужную комбинацию ключей оптимизации с правильными параметрами. Тут экспериментировать нужно! И желательно не вслепую, а осмысленно, то есть зная устройство процессора и принцип работы оптимизатора.

Разумеется, в рамках короткой журнальной статьи мыщъх не в силах рассказать обо всех ключах компилятора и потому вынужден остановиться лишь на самых проблемных техниках оптимизации, не описанных ни в документации на GCC, ни в популярных FAQ. Заинтересованных в углублении своих знаний мыщъх отсылает к книге «Техника оптимизации: эффективное использование памяти» и к серии статей «Техника оптимизации под Linux», электронные версии которых можно скачать с http://nezumi.org.ru/optimization.zip и http://nezumi.org.ru/optimization-pack.zip соответственно. Ну а мы сейчас отправимся в орбитальный полет. Главным образом мы будем говорить о самой последней версии GCC — 4.2.1 (описание которой можно найти на http://gcc.gnu.org/onlinedocs/gcc-4.2.1/gcc), что же касается остальных версий, то... сверяйся с документацией!

Разворот циклов
Процессоры семейства Intel Pentium и AMD Athlon построены на конвейерной архитектуре, и в некотором смысле их можно уподобить гоночной машине, которая мощно несется по прямой дороге, но конкретно тормозит на виражах.

Циклы (особенно компактные) содержат небольшой участок линейного кода, за которым следует крутой поворот, тормозящий процессор и не дающий ему как следует разогнаться. Последние модели Penium 4, благодаря значительным архитектурным улучшениям, намного лучше справляются с циклами, чем процессоры предыдущих поколений, но потери в скорости все равно очень значительны, и для повышения производительности необходимо расчистить трассу от ветвлений, что может сделать либо программист, либо компилятор.

Циклы, состоящие из нескольких команд («for(a = 0; a < n; a++) *dst++ = *src++;»), исполняются очень медленно, и для повышения быстродействия оптимизаторы задействуют технику, именуемую разворотом циклов (loops unrolling), в процессе которой происходит многократное дублирование тела цикла, реализуемое приблизительно так:

Цикл до разворота

for (i = 1; i < n; i++)k += (n % i);
Цикл после разворота

// Разворот цикла на 4 итерации;// выполняем первые n – (n % 4) итерацийfor(i = 1; i < n; i += 4)
{k += (n % i) + \(n % i + 1) + \(n % i + 2) + \(n % i + 3);
}// Выполняем оставшиеся итерацииfor(i = 4; i < n; i++) k += (n % i);
Размер программы при этом, естественно, возрастает, а вместе с ним возрастает и риск вылететь за пределы кэша первого (и даже второго!) уровня, после чего производительность упадет так, что не поднимешь и домкратом.

Компилятор GCC разворачивает циклы только при использовании ключа '-funroll-loops' (действует применительно к циклам типа for) или '-funroll-all-loops' (как и следует из названия, развертывание выполняется для всех видов циклов, например do/while).

Если постоянное количество итераций, известное на стадии компиляции, не превышает 32, то циклы разворачиваются полностью. При значении, большем 32, кратность разворота сокращается до приблизительно четырех (точное значение зависит от размера цикла, смотри ключи 'max-average-unrolled-insns' и 'max-unroll-times'). Циклы с неизвестным количеством итераций не разворачиваются вообще! Хотя другие компиляторы (такие, например, как Intel C++) их преспокойно разворачивают.

Для тонкой настройки оптимизатора существуют следующие ключи (задаются с помощью конструкции «--param key=value»):

'max-unrolled-insns': максимальное количество инструкций, при котором цикл может быть развернут; оптимальное значение зависит как от типа процессора, так и от конструктивных особенностей компилируемой программы, поэтому определять это значение приходится экспериментальным путем; мыщъх рекомендует начинать «плясать» от max-unrolled-insns=69;
'max-average-unrolled-insns': максимальное оценочное количество инструкций, которое цикл будет иметь после разворота; это число также подбирается экспериментальным путем, возьми за старт значение 96;
'max-unroll-times': максимальная степень разворота, по умолчанию равная четырем; это довольно разумное значение, но в некоторых случаях выбор двух или восьми существенно увеличивает быстродействие программы.
Остальные ключи, связанные с разворотом циклов, описаны в документации на GCC. Они не имеют решающего значения, и потому к ним прибегают только умудренные опытом гуру, да и то лишь время от времени.

Выравнивание
Вплоть до появления Pentium Pro процессоры крайне болезненно относились к невыровненным переходам и вызовам функций, чей адрес не был кратен 4 байтам, и давали за это штрафные такты (называемые «пенальти»), что объяснялось несовершенством микропроцессорной архитектуры тех лет.

Начиная с Pentium II+ и AMD K6+ процессоры уже не требуют постоянного выравнивания переходов/вызова функций, за исключением случая, когда целевая инструкция или команда перехода, пересекая границу линейки кэш-памяти первого уровня, расщепляется напополам, за что выдается пенальти. Причем Pentium 4, компилирующий x86-инструкции в микрокод, выдает его значительно реже и совершенно непредсказуемым образом - микроинструкции абсолютно недокументированы, их длина неизвестна, следовательно, управлять их выравниванием мы не можем.

Несмотря на то что Pentium 4 де-факто является самым популярным процессором и непоколебимым лидером рынка, большинство компиляторов упорно продолжают заниматься выравниванием, располагая инструкции перехода по кратным адресам и заполняя образующиеся дыры незначащими инструкциями, такими как NOP, MOV EAX,EAX и другими. Естественно, это увеличивает размер кода, снижая его производительность.

Применительно к Pentium II/Pentium III и AMD K6+ машинная команда требует выравнивания только в тех случаях, когда следующее условие становится истинным: ((addr % cache_len + sizeof(ops)) > cache_len). Здесь addr – линейный адрес инструкции, cache_len - размер кэш-линейки (в зависимости от типа процессора равный 32, 64 или 128 байтам), ops – целевая машинная инструкция или инструкция перехода/вызова функции. Количество выравнивающих байт рассчитывается по формуле: (cache_len - (addr % cache_len)).
Компилятор Intel C++ вообще не выравнивает ни переходы, ни циклы, что является лучшей стратегией для Pentium 4, а вот на более ранних процессорах мы получаем неустойчивый код с плавающей производительностью, быстродействие которого зависит от того, расщепляются ли глубоко вложенные переходы или нет. А это, в свою очередь, зависит от множества трудно прогнозируемых обстоятельств, включая фазу луны и количество осадков.

Компилятор GCC задействует выравнивание уже на уровне оптимизации O2, автоматически отключая его при задании ключа '-Os' (оптимизация размера программы), причем осуществляет его по ужасно бездарной схеме. Вышеприведенная формула остается незадействованной. Функции, циклы, метки (labels) и условные переходы выравниваются по фиксированной границе, управляемой следующими ключами: '-falign-functions', '-falign-loops', '-falign-labels' и '-falign-jumps' соответственно.

Каждый ключ принимает целочисленный аргумент, равный степени двойки и задающий кратность выравнивания. Например, '-falign-functions=32' форсирует выравнивание функций по границе 32 байт. Значение 1 отключает выравнивание, а 0 задает выравнивание по умолчанию, специфичное для этого типа процессора.

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

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

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

Компилятор GCC поддерживает компиляцию с обратной связью, но не использует ее даже на самых агрессивных уровнях оптимизации, хотя она уже давно вышла из экспериментальной стадии и готова к промышленному применению. Так почему же мы до сих пор вынуждены задействовать ее вручную?! Ответ прост: во-первых, использование профилировщика многократно увеличивает время компиляции, и сборка многих «серьезных» проектов растягивается более чем на сутки (сюрприз, да?). Во-вторых, информация, полученная по обратной связи, завязана на конкретную аппаратную конфигурацию, и для других процессоров результат, скорее всего, окажется совершенно иным (то есть бинарные сборки, откомпилированные подобным образом, лучше использовать только для себя и не распространять). Наконец, в-третьих, большинство программ львиную долю машинного времени тратит на ввод/вывод и достигает максимальной скорости своего выполнения уже на уровне O2, после чего прирост быстродействия можно обнаружить разве что хронометром.

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

Ключ '-fprofile-use' задействует обратную связь (profile feedback) и оказывает воздействие на следующие ключи оптимизации, которые обязательно должны быть указаны в командной строке (или заданы уровнем оптимизации от O1 до O3), иначе вместо ожидаемого выхлопа мы получим «пшик»:

'funroll-loops': разворот циклов будет выполняться на оптимальное количество итераций или не будет выполняться вообще, если для конкретно взятого цикла это невыгодно;
'fpeel-loops': «шелушение циклов» (разновидность разворота) будет выполняться в соответствии с показаниями профилировщика;
'fvpt': заставляет профилировщик запоминать значения переменных, собираемые по ходу выполнения программы, которые в дальнейшем могут быть использованы для более эффективной оптимизации;
'fbranch-probabilities': в комбинации с ключом '-fvpt' форсирует подсчет частоты каждого условного перехода, записывая полученные данные в файл sourcename.gcda, после чего оптимизатор сможет реорганизовать код таким образом, чтобы сократить накладные расходы на ветвления и уменьшить трассу выполнения (примечание: в текущих версиях GCC оптимизатор ограничивается лишь более эффективным распределением переменных по регистрам, но даже это дает существенный прирост производительности);
'ftracer': форсирует хвостовую дубликацию (tail duplication) — довольно прогрессивный и, кстати говоря, запатентованный метод оптимизации, подробнее о котором можно прочитать на www.freepatentsonline.com/20050183079.html.
Ключ '-fprofile-generate' задействует дополнительные возможности, заставляя профилировщик собирать еще больше данных, что позволяет использовать следующие ключи оптимизации:

'fprofile-arcs': собирает информацию о ходе выполнения программы, записывая ее в AUXNAME.da, и воздействует на следующие ключи оптимизатора, позволяющие генерировать более эффективный код: '-fno-guess-branch-probability', '-fbranch-probabilities' и '-freorder-functions' — все эти ключи автоматически задействуются на уровнях оптимизации от O2 и выше, а потому нет никакой необходимости дописывать их вручную;
'fprofile-values': в комбинации с ключом '-fprofile-arcs' форсирует сбор значений переменных и выражений, позволяя отыскивать инварианты (то есть значения, независимые от обрабатываемых программой данных) и оптимизировать процедуру вычисления многих вещественных выражений.
Текущие версии GCC только начинают осваивать компиляцию с обратной связью, делая в этом направлении свои первые шаги, и, если эта идея не рассеется дымом, в обозримом будущем следует ожидать настоящего прорыва в области высоких скоростей и максимальной компактности кода. Впрочем, не будем говорить наперед. Поживем - увидим. А пользоваться компиляцией с обратной связью можно уже сейчас.

Быстрая вещественная математика
Вещественная математика (особенно двойной точности) до сих пор остается одним из узких мест, с которым не могут справиться даже современные сопроцессоры с их улучшенной архитектурой. Компилятор GCC поддерживает ряд ускоренных методик вещественных вычислений, однако не задействует их даже на уровне оптимизации O3, поскольку они отклоняются от стандартов ISO и IEEE, а потому потенциально небезопасны и в некоторых случаях приводят к развалу программы.

С другой стороны, программы, интенсивно перемалывающие вещественные числа, могут существенно повысить свою производительность. А потому стоит попробовать задать параметр '-ffast-math', активирующий '-ffloat-store', '-fno-math-errno', '-funsafe-math-ptimizations', '-fno-trapping-math', '-ffinite-math-only', '-fno-rounding-math', '-fno-signaling-nans' и '-fcx-limited-range', после чего выполнить полный цикл тестирования программы, и если что-то пойдет не так, то забыть о '-ffast-math' и начать перебирать различные комбинации вышеупомянутых ключей по отдельности. В некоторых случаях это дает двух-, трехкратный прирост производительности.

Заключение
Вот мы и рассмотрели наиболее значимые ключи оптимизации, получив широкий оперативный простор для экспериментов. Конечно, кто-то может резонно возразить: а стоит ли корпеть над какой-то программой несколько дней, чтобы увеличить ее производительность на 30%-60%?! Если измерять время деньгами, то дешевле купить более быстрый процессор, но Linux всегда привлекал большое количество энтузиастов, проводящих дни и ночи напролет в бессмысленных (для окружающих) ковыряниях системы. Так что, дерзай! Тебя ждут великие дела!

-------------------
 
Компания Creative анонсировала три новые 2.0-системы. Первая - GigaWorks HD50 – обладает технологией BasXPort и титановыми супер-твиттерами. Производитель заверяет, что в своем классе новинка звучит громче и ярче всех.

GigaWorks T40 имеет в своем составе стекло, что позволяет лучше переносить большую влажность и перепады температуры. Подробности модели Inspire T10 пока неизвестны.
Все три системы доступны в Сингапуре. GigaWorks HD50 и T40 оцениваются в $149.99, а T10 – в $49.99.

-------------------
Перейдём на страницу сайта Мегафон – Северный Кавказ. Отправка SMS - http://www.megafonkavkaz.ru/sms. Попробуем решить задачу, простую для человека, но не решаемую (а точнее почти не решаемую) для компьютера. Такого рода задача называется CAPTCHA.

CAPTCHA – это акроним, от выражения “Computer Aided Public Turing test to tell Computers and Humans Apart”. Собственно говоря, это Тест Тьюринга для различения компьютеров и людей. Иногда CAPTCHA называют обратным тестом Тьюринга. CAPTCHA может быть реализована различными способами. Иногда требуется ввести не одно слово, а несколько. Встречаются также задания, где надо найти общий элемент, присутствующий на 4-х изображениях или сказать о содержимом искаженного рисунка. Для людей с плохим зрением существуют звуковые тесты или задачи, требующие логического мышления. В нашем случае требуется распознать символы, размещенные на текстуре.

 

Из первичного анализа находим слабые стороны.

Фиксированный шрифт, нет никаких искажений текста.
Для отображения символов используются только 4 цвета.
Символы легко отделяются от фона из-за хорошего контраста.
Распознавание сделать довольно легко путем прямого попиксельного сравнения каждого из символов со шрифтом.

Приступим.

/* Выдираем со страницы http://www.megafonkavkaz.ru/sms название картинки */

$Source = file_get_contents ('http://www.megafonkavkaz.ru/sms');
preg_match_all ('|svg-images/([^"]*)\?|is', $Source, $ImageName);

/* Создаём копию картинки у нас на диске */

$Image = ImageCreateFromPng ('http://www.megafonkavkaz.ru/svg-images/' . $ImageName[1][0]);

/* Предварительно делаем белую подложку, чтобы не получился такой результат при сохранении */


$Captcha = ImageCreateTrueColor (100, 20);
$CaptchaBackground = ImageColorAllocate ($Captcha, 255, 255, 255);
ImageFilledRectangle ($Captcha, 0, 0, 100, 20, $CaptchaBackground);

ImageCopyResampled ($Captcha, $Image, 0, 0, 0, 0, 100, 20, 100, 20);
ImageDestroy ($Image);
ImagePng ($Captcha, $ImageName[1][0]);
ImageDestroy ($Captcha);

/* В результате у нас на диске красуется такая картинка */

 

/* Далее получаем индекс цвета каждого пиксела этой картинки */

$Captcha = ImageCreateFromPng ($ImageName[1][0]);
list ($Width, $Height) = GetImageSize ($ImageName[1][0]);
for ($i = 0; $i < $Width; $i++) {
for ($j = 0; $j < $Height; $j++) {
$Pixels[$i][$j] = (ImageColorAt ($Captcha, $i, $j));
}
}

/* Для примера просмотреть значение индекса цвета каждого пиксела нашей картинки можно так */

for ($i = 0; $i < $Width; $i++) {
for ($j = 0; $j < $Height; $j++) {
echo $i . 'x' . $j . ' = ' . $Pixels[$i][$j] . '<br />';
}
}

Здесь 0 – черный, а 16777215 – белый. Из анализа captcha видно, что для отображения текста на картинке используются только 4 цвета, вот они:

1725025
1925170
4538477
6303773

Собираем черно-белую картинку путём отсеивания лишних цветов:

for ($i = 0; $i < $Width; $i++) {
for ($j = 0; $j < $Height; $j++) {

/* Если пиксель равен одному из цветов текста, присваиваем ему черный цвет (0) */

if ($Pixels[$i][$j] == '1725025' or $Pixels[$i][$j] == '1925170' or
$Pixels[$i][$j] == '4538477' or $Pixels[$i][$j] == '6303773') {
$Pixels[$i][$j] = 0;
}
else {

/* Если не равен, то белый (16777215) */

$Pixels[$i][$j] = 16777215;
}

/* Вновь собираем картинку */

ImageSetPixel ($Captcha, $i, $j, $Pixels[$i][$j]);
}
}
ImagePng ($Captcha, $ImageName[1][0]);
ImageDestroy ($Captcha);

После всех манипуляций получаем:

 

/* Далее ищем первый символ, т.е первый черный пиксель на картинке */

for ($i = 0; $i < $Width; $i++) {
for ($j = 0; $j < $Height; $j++) {

if ($Pixels[$i][$j] == 0) {

/* Его координаты записываем в переменные $IPX и $IPY */

$IPX = $i;
$IPY = $j;

/* Останавливаем поиск */

$j = $Height;
$i = $Width;

Теперь для каждого символа создаём условие. Например, для числа “1”:

 

/* От первой до последней точки символа */

if (
/* 1 */ $Pixels[$IPX][$IPY] == 0 &&
/* 2 */ $Pixels[$IPX + 1][$IPY - 1] == 0 &&
/* 3 */ $Pixels[$IPX + 1][$IPY + 10] == 0 &&
/* 4 */ $Pixels[$IPX + 2][$IPY - 2] == 0 &&
/* 5 */ $Pixels[$IPX + 2][$IPY + 2] == 0 &&
/* 6 */ $Pixels[$IPX + 2][$IPY + 10] == 0
)
{

/* Если условие выполняется, получаем 1-ый символ равный “1” */

$s1 = 1;

/* Задаём новую начальную координату для поиска 2-ого символа, $CX.
Координата последней точки “6”, $Pixels[$IPX + 2] */

$CX = $IPX + 2;

}

/* Далее для поиска второго символа будет правильным такое выражение */

for ($i = 0; $i < $Width; $i++) {
 for ($j = 0; $j < $Height; $j++) {
  if ($i > $CX) {
   if ($Pixels[$i][$j] == 0) {
     $IPX = $i;
     $IPY = $j;
     $i = $Width;
     $j = $Height;
     /* Условие поиска */

}
}
}
}

/* Аналогично и для всех остальных символов */

Полную версию скрипта можно скачать здесь.

Данный вид взлома не был бы актуален, если бы при генерации изображения применялся какой-либо эффект, искажающий картинку. Например, волновое искажение по оси x и у.

Рекомендуем посетить сайт проекта по взлому CAPTCHA с примерами CAPTCHA-алгоритмов с разных сайтов и описанием их уязвимых мест.

Вроде бы всё, удачи.
--------------
 
Компания AMD планирует анонсировать 4-ядерные процессоры Phenom X4 19 ноября 2007 года. Продажи начнутся в тот же день. Но, как это часто бывает, некоторые партнеры производителя допустили утечку информации. Так, один из немецких on-line-магазинов поведал пользователям всего мира о том, что Phenom X4 9500, Phenom X4 9600 и Phenom X4 9700 будут стоить ?240, ?280 и ?300 соответственно. Конечно, официальные цены могут существенно отличаться от представленных.

Напоминаем, что все три новинки обладают кэш-памятью второго уровня (L2) размером 4х512 Кбайт, третьего уровня (L3) – 2 Мбайт. Отличаются между собой только частотой работы: 2.2 ГГц, 2.3 ГГц и 2.4 ГГц в соответствии с увеличением числа в модели процессора.
----------------
28-летний житель штата Нью-Джерси был отправлен в тюрьму на два года за рассылку по электронной почте спама - миллионов нежелательных сообщений. Подобным образом нью-йоркский суд оценил его участие в незаконной операции.

Тодд Меллер был приговорен в общей сложности к 27 месяцам тюремного заключения и штрафу в размере 180.000 долларов. Незаконную рассылку спама Меллер проводил в начале этого года. Нарушитель был задержан в результате тайной операции полиции. По просьбе подставного агента он согласился отправить нежелательную рекламу неопределенного коммерческого продукта около 1,2 миллионам клиентов Интернет провайдера America Online (AOL). Меллер и его подельник Адам Витале, который также признал себя виновным и должен предстать перед судом 13 ноября, похвастались, что они могут направлять большие объемы спама таким образом, чтобы скрыть истинный источник электронного сообщения. Меллер и Витале говорят, что этот "бизнес" приносил им десятки тысяч долларов дохода.

Просмотров: 636 | Добавил: LeXSeR | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Меню сайта

Календарь новостей
«  Декабрь 2007  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
31

Поиск

Друзья сайта

Мини-чат
200

Наш опрос
Оцените мой сайт
Всего ответов: 5

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz