Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
1Activity
0 of .
Results for:
No results containing your search query
P. 1
Взлом Captcha

Взлом Captcha

Ratings: (0)|Views: 125 |Likes:
Published by tazic
Взлом Captcha
Взлом Captcha

More info:

Published by: tazic on Apr 01, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

07/07/2013

pdf

text

original

 
Артём
 
Заруцкий
primat.isu@gmail.com
ВЗЛОМ
XÀÊÅÐ
04 /135/ 10
Полную
 
версию
 
раз
-
работанных
 
скриптов
,
показывающих
 
на
 
примере
 
взлом
 
капчи
 xakep.ru,
ты
 
найдешь
 
на
 
диске
dvd
DVD
ÀÄÅÊÂÀÒÍÎÑÒÜ ÇÀÙÈÒÛ
При
 
выборе
 
капчи
 
стоит
 
исходить
 
из
 
основного
 
правила
 
построе
-
ния
 
систем
 
безопасности
стоимость
 
взлома
 
не
 
должна
 
превы
-
шать
 
стоимость
 
того
,
что
 
может
 
получить
 
злоумышленник
.
Однако
,
в
 
случае
 
с
 
капчей
 
есть
 
две
 
проблемы
,
не
 
позволяющие
 
нам
 
в
 
полной
 
мере
 
реализовать
 
это
 
правило
.
Во
-
первых
,
чрезмерное
 
усложнение
 
капчи
 
может
 
отпугнуть
 
некоторую
 
часть
 
посетителей
 
сайта
,
напри
-
мер
,
если
 
заставлять
 
их
 
вводить
 
код
 
с
 
изображения
 
при
 
добавлении
 
каждого
 
комментария
(
как
 
это
 
делают
 
некоторые
 
владельцы
 
блогов
 
в
 LiveJournal).
Вторая
 
проблема
— «
китайцы
».
В
 
интернете
 
существует
 
несколько
 
сервисов
,
предлагающих
 
услуги
 
по
 
ручному
 
распознава
-
нию
 
капчей
 
жителями
 
Китая
 
и
 
некоторых
 
других
 
стран
,
готовых
 
рабо
-
тать
 
за
 
мизерную
 
плату
.
Часть
 
этих
 
сервисов
 
заявляют
,
что
 
обладают
 
уникальными
 
технологиями
 
автоматического
 
распознавания
 
образов
,
однако
,
при
 
ближайшем
 
рассмотрении
 
такие
 
факты
,
как
 
задержка
 
в
30
секунд
 
перед
 
отправкой
 
ответа
 
и
 
вероятность
 
распознавания
 
выше
90%,
выдают
 
их
 
реальные
 
схемы
.
Стоимость
 
распознавания
 1000
экземпляров
 
начинается
 
от
$1,
что
 
не
 
так
 
уж
 
и
 
много
.
Кроме
 
того
,
существует
 
давно
 
известный
 
способ
 
бесплатного
 
краудсорсин
-
га
подстановка
 
капчи
,
требующей
 
распознавания
,
на
 
другой
 
ресурс
 (
как
 
правило
 
порно
-
сайт
),
пользователи
 
которого
,
ничего
 
не
 
подозре
-
вая
,
будут
 
вводить
 
код
 
с
 
изображения
.
Эти
 
факты
 
ограничивают
 
наши
 
 ïîñëåäíåå âðåìÿ íè îäèí áîëåå èëèìåíåå ïîïóëÿðíûé ñàéò íå îáõîäèòñÿáåç èñïîëüçîâàíèè êàï÷è. Ýïîõà «Âåá2.0» äàëà ïîëüçîâàòåëÿì âîçìîæíîñòüèçìåíÿòü ñîäåðæàíèå ñàéòîâ, íî òàêóþâîçìîæíîñòü ïîëó÷èëè è ñïàìåðû.Ðó÷íîå çàïîëíåíèå ôîðì ñïàìåðàìýêîíîìè÷åñêè íåâûãîäíî, ïîýòîìó îíèèñïîëüçóþò ðîáîòîâ, íà ïóòè êîòîðûõè ñòàíîâèòñÿ êàï÷à. CAPTCHA — Com-pletely Automated Public Turing testto tell Computers and Humans Apart.Ïðèíöèï êàï÷è îñíîâàí íà ñëîæíîñòèàâòîìàòè÷åñêîãî ðàñïîçíàâàíèÿèñêàæåííîãî è çàøóìëåííîãî òåêñòà.
В з лом
 
ÐÀÇÁÈÐÀÅÌÑß,ÊÀÊ ËÎÌÀÞÒ ÊÀÏ×È
 
044
 
XÀÊÅÐ
04 /135/ 10
 
045
возможности
 
по
 
усложнению
 
защиты
.
Говоря
 
об
 
адекватности
 
защиты
,
стоит
 
разделить
 
спам
-
роботов
 
на
 
автоматических
 
и
 
полуавтоматических
.
Автоматические
 
робо
-
ты
 
подобно
 
роботам
 
поисковых
 
систем
 
переходят
 
с
 
сайта
 
на
 
сайт
 
и
 
пытаются
 
заполнить
 
и
 
отправить
 
любую
 
форму
,
которую
 
встретят
 
по
 
пути
.
Если
 
после
 
отправки
 
формы
 
на
 
странице
 
появ
-
ляется
 
отправленная
 
информация
,
форма
 
заносится
 
в
 
список
 
и
 
периодически
«
спамится
».
Продвинутые
 
версии
 
таких
 
роботов
 
способны
 
распознавать
 
некоторые
 
виды
 
популярных
 
капч
,
но
 
большая
 
часть
 
капчей
,
особенно
 
разработанные
 
для
 
сайта
 
инди
-
видуально
,
таких
 
роботов
 
успешно
 
останавливают
.
Собственно
,
автоматические
 
роботы
 
и
 
являются
 
основной
 
угрозой
 
для
 
пода
-
вляющего
 
большинства
 
сайтов
.
Сайты
 
с
 
большой
 
посещаемо
-
стью
 
или
 
хотя
 
бы
 
хорошим
 
рейтингом
PageRank
могут
 
удостоить
-
ся
 
персонального
 
внимания
 
спамеров
,
что
 
может
 
означать
 
более
 «
тонкую
»
настройку
 
робота
,
использование
«
китайцев
»
или
 
при
-
менение
 
системы
 
распознавания
 
образов
,
пример
 
которой
 
будет
 
рассмотрен
 
чуть
 
ниже
 
в
 
этой
 
статье
.
ÍÅÌÍÎÃÎÌÀÒÅÌÀÒÈÊÈ
При
 
распознавании
 
капчи
 
задача
 
состоит
 
не
 
столько
 
в
 
увеличе
-
нии
 
точности
 
распознавания
,
как
 
это
 
может
 
показаться
 
на
 
первый
 
взгляд
,
сколько
 
в
 
минимизации
 
процессорного
 
времени
,
необходи
-
мого
 
для
 
успешного
 
распознавания
 
одного
 
экземпляра
.
Немногие
 
сайты
 
отслеживают
 
количество
 
неудачных
 
попыток
 
ввода
 
капчи
,
но
 
в
 
любом
 
случае
 
такие
 
ограничения
 
легко
 
обходятся
 
при
 
использова
-
нии
 
нескольких
 
прокси
-
серверов
.
Таким
 
образом
 
точность
 
распозна
-
вания
,
равная
 
даже
 
в
1%,
может
 
считаться
 
успешной
,
при
 
условии
 
приемлемого
 
расхода
 
процессорного
 
времени
 
на
 
все
100
попыток
.
Одна
 
из
 
основных
 
характеристик
 
капчи
количество
 
возможных
 
вариантов
 
ответа
.
Допустим
,
наша
 
капча
 
состоит
 
из
6
цифр
 
и
 
сим
-
волов
 
латинского
 
алфавита
 
в
 
нижнем
 
регистре
,
тогда
 
количество
 
всех
 
возможных
 
комбинаци
 
й
(10 + 26) ^ 6
равно
 
приблизительно
2
млрд
.,
что
 
практически
 
недостижимо
 
для
 
случайного
 
перебора
.
К
 
сожалению
,
не
 
все
 
проводят
 
такие
 
расчеты
,
поэтому
 
периодически
 
появляются
 
капчи
,
предлагающие
 
ответить
,
какое
 
животное
 
изобра
-
жено
 
на
 
картинке
,
имея
 
при
 
этом
 
всего
 
лишь
10
вариантов
 
ответа
.
При
 
ручном
 
анализе
 
такого
 
сайта
,
спамеру
 
будет
 
достаточно
 
указать
 
роботу
 
только
 
один
 
вариант
 
ответа
теория
 
вероятностей
 
сделает
 
все
 
остальное
.
Сюда
 
же
 
можно
 
отнести
 
и
 
всевозможные
 
арифмети
-
ческие
 
задачи
Сколько
 
будет
 
пять
 
умножить
 
на
 
семь
?»),
которые
 
легко
 
решаются
 
при
 
помощи
 
регулярных
 
выражений
.
Однако
,
для
 
полностью
 
автоматических
 
роботов
 
даже
 
такого
 
вида
 
защиты
 
будет
 
достаточно
.
Ещё
 
одно
 
популярное
 
заблуждение
 
создателей
 
капчей
:
чем
 
слож
-
нее
 
прочитать
 
код
 
человеку
,
тем
 
сложнее
 
прочитать
 
его
 
роботу
.
Это
 
заблуждение
 
приводит
 
к
 
появлению
 
капч
,
которые
 
пользователи
 
с
 
трудом
 
вводят
 
с
 
десятой
 
попытки
,
но
 
при
 
этом
 
автоматическое
 
распознавание
 
работает
 
на
 
ура
.
Например
,
человеку
 
трудно
 
читать
 
светлый
 
шрифт
 
на
 
светлом
 
фоне
,
а
 
для
 
системы
 
распознавания
 
разница
 
между
 
цветами
 
в
 
один
 
бит
 
так
 
же
 
легко
 
определяется
 
как
 
и
 
визуально
 
заметная
 
разница
.
Вообще
,
использование
 
в
 
капче
 
более
 
чем
 
двух
 
цветов
 
практически
 
бесполезно
,
обратите
 
внима
-
ние
 
на
 
капчи
 
крупных
 
сайтов
большая
 
часть
 
из
 
них
 
состоят
 
из
 
темной
 
одноцветной
 
надписи
 
на
 
белом
 
фоне
.
Это
 
связано
 
с
 
тем
,
что
 
наиболее
 
сложной
 
задачей
 
является
 
распознавание
 
текста
 
в
 
самой
 
надписи
,
а
 
не
 
поиск
 
её
 
местоположения
 
на
 
изображении
.
Помимо
 
прямой
 
уязвимости
,
капча
 
может
 
оказаться
 
ненадежной
 
из
-
за
 
уязвимости
 
в
 
скриптах
.
Например
,
самая
 
глупая
 
ошибка
передавать
 
текст
 
капчи
 
в
 
виде
 
параметра
 
к
 
скрипту
,
который
 
гене
-
рирует
 
изображение
.
Или
 
возможность
 
использовать
 
код
 
с
 
изобра
-
жения
 
несколько
 
раз
 
в
 
течение
 
какого
-
то
 
времени
.
ÏÐÈÌÅРÂÇËÎÌÀ
Итак
,
лучший
 
способ
 
понять
,
как
 
оценить
 
надежность
 
капчи
разо
-
брать
 
пример
 
взлома
.
Выбор
 
пал
 
на
 
капчу
 
сайта
xakep.ru,
которая
 
используется
 
при
 
регистрации
 
новых
 
пользователей
 
и
 
добавлении
 
комментариев
.
Код
 
состоит
 
из
 
четырех
 
цифр
,
что
 
дает
 
нам
10000
вариантов
не
 
так
 
уж
 
и
 
много
,
но
 
от
 
прямого
 
перебора
 
защитит
.
Для
 
вывода
 
цифр
 
используется
 
один
 
шрифт
,
надпись
 
слегка
 
пово
-
рачивается
 
в
 
пространстве
,
но
 
поворот
 
настолько
 
незначитель
-
ный
,
что
 
мы
 
не
 
будем
 
принимать
 
его
 
во
 
внимание
. «
Пиксельный
»
шум
 
по
 
всему
 
изображению
 
снимается
 
простейшим
 
фильтром
 
по
 
яркости
:
все
 
пиксели
,
яркость
 
которых
 
выше
 
некоторого
 
значения
,
закрашиваются
 
белым
 
цветом
,
остальные
черным
.
Такая
 
опе
-
рация
 
очищает
 
практически
 
весь
 
шум
,
за
 
исключением
 
отдельных
 
точек
,
не
 
мешающих
 
дальнейшей
 
обработке
.
Остается
 
лишь
 
одна
 
проблема
случайно
 
разбросанные
 
линии
,
которые
 
значительно
 
затрудняют
,
во
-
первых
,
определение
 
позиции
 
надписи
,
во
-
вторых
,
распознавание
 
отдельных
 
цифр
.
Поставим
 
задачу
 
довести
 
точность
 
распознавания
 
хотя
 
бы
 
до
5%
при
 
приемлемых
 
затратах
 
процессор
-
ного
 
времени
.
Такая
 
постановка
 
задачи
 
позволит
 
нам
 
выбрать
 
уяз
-
вимость
,
которая
 
должна
 
встречаться
 
хотя
 
бы
 
в
 
каждой
20-
й
 
капче
 
и
 
с
 
большой
 
вероятностью
 
гарантировать
 
нам
 
распознавание
.
И
 
такая
 
уязвимость
 
есть
на
 
некоторых
 
изображениях
 
линии
 
практически
 
не
 
пересекают
 
цифры
 
и
 
такие
 
изображения
 
встречаются
 
достаточно
 
часто
.
От
 
этой
 
особенности
 
и
 
будем
 
отталкиваться
.
Для
 
работы
 
нам
 
в
 
первую
 
очередь
 
потребуется
 
набор
 
распознанных
 
образцов
.
Скажем
, 100
штук
 
для
 
начала
 
будет
 
достаточно
.
Для
 
этого
 
придется
 
немного
 
поработать
«
китайцем
»,
но
 
для
 
упрощения
 
задачи
 
можно
 
написать
 
небольшой
 
скрипт
,
загружающий
 
изображения
 
с
 
капчами
 
с
 
сервера
 
и
 
формирующий
 
форму
,
которую
 
нам
 
придется
 
заполнить
 
вручную
.
Так
 
как
 
мы
 
решили
 
опираться
 
на
 
наименее
 
зашумленные
 
изображения
,
то
 
в
 
качестве
 
образцов
 
стоит
 
использо
-
вать
 
именно
 
их
.
Итак
,
через
 
несколько
 
минут
 
скучной
 
работы
 
у
 
нас
 
есть
 
директория
,
в
 
которой
 
аккуратно
 
сложены
 
файлы
 
с
 
капчами
,
имена
 
которых
 
соответствуют
 
кодам
 
на
 
изображении
(
например
,2716.jpg).
Для
 
подобных
 
экспериментов
 
лучше
 
всего
 
подходят
 
скрип
-
товые
 
языки
,
такие
 
как
PHP
или
Python,
также
 
может
 
быть
 
полезен
 Matlab,
в
 
котором
 
есть
 
удобные
 
библиотеки
 
для
 
анализа
 
и
 
обработки
 
изображений
.
Мы
 
будем
 
использовать
PHP,
в
 
котором
 
все
 
функции
 
для
 
работы
 
с
 
изображениями
 
имеют
 
префикс
image,
для
 
низкоуров
-
невой
 
работы
 
с
 
пикселями
 
достаточно
imagecolorat.
Вот
,
например
,
фрагмент
 
кода
,
который
 
формирует
 
маску
 
изображения
 
с
 
темными
 
участками
:class Xakep_CAPTCHA
{// Ðàññòîÿíèå ìåæäó äâóìÿ öâåòàìè
На
 
некоторых
 
изображениях
 
линии
 
практически
 
не
 
пересекают
 
циф
-
ры
,
и
 
такие
 
изображения
 
встречаются
 
достаточно
 
частоВырезаем
4
цифры
 
из
 
изображе
-
ния
 
и
 
приводим
 
их
 
к
 
прямоуголь
-
ному
 
виду
(16x24
пикселов
)
Эффект
 
наложения
 
фильтра
 
по
 
яркости
 
ВЗЛОМ
XÀÊÅÐ
04 /135/ 10
protected function colordist($color1, $color2){return sqrt(pow((($color1 >> 16) & 0xFF)- (($color2 >> 16) & 0xFF), 2)+ pow((($color1 >> 8) & 0xFF)- (($color2 >> 8) & 0xFF), 2)+ pow(($color1 & 0xFF)- ($color2 & 0xFF), 2));} // Ñîçäàíèå ìàñêè èçîáðàæåíèÿ, âûäåëÿþùåé ïèêñåëè,îòñòàþùèå îò áåëîãî ôîíà // áîëüøå ÷åì íà 200 åäèíèöprotected function update_mask(){ $this->mask = array();for ($i = 0; $i < $this->width; $i++)for ($j = 0; $j < $this->height; $j++)$this->mask[$i][$j] = $this->colordist(imagecolorat($this->image, $i, $j),$this->bg_color) > 200 ? 1 : 0;}}
Маска
,
во
-
первых
,
выполняет
 
роль
 
упомянутого
 
выше
 
фильтра
 
по
 
яркости
,
а
,
во
-
вторых
,
увеличивает
 
скорость
 
работы
 
с
 
изображени
-
ем
нет
 
необходимости
 
каждый
 
раз
 
выполнять
 
преобразования
 
при
 
сравнении
 
цветов
 
пикселей
.
ÏÎÈÑÊÍÀÄÏÈÑÈ
Основной
 
принцип
,
на
 
котором
 
основаны
 
надежные
 
капчи
, —
затруднение
 
выделения
 
отдельных
 
символов
 
в
 
надписи
.
Это
 
достигается
 
путем
 
смещения
 
символов
 
относительно
 
их
 
перво
-
начальных
 
позиций
 
и
 
искажений
 
надписи
 
в
 
целом
.
В
 
капче
 
сайта
xakep.ru
расстояния
 
между
 
центрами
 
цифр
(~19
пикселов
)
и
 
размеры
 
самих
 
цифр
(16x24
пискселов
)
практически
 
не
 
меня
-
ются
.
Из
 
всех
 
искажений
,
применяемых
 
к
 
надписи
,
значитель
-
ный
 
эффект
 
оказывает
 
только
 
наклон
 
шрифта
им
 
нам
 
прене
-
бречь
 
не
 
удастся
.
Если
 
бы
 
не
 
шумовые
 
линии
,
мы
 
бы
 
смогли
 
сразу
 
точно
 
опреде
-
лить
 
расположение
 
цифр
 
на
 
изображении
 
путем
 
отсечения
 
свет
-
лых
 
участков
 
со
 
всех
 
четырех
 
сторон
наши
 
цифры
 
были
 
бы
 
единственным
 
темным
 
пятном
.
Но
 
придется
 
решить
 
небольшую
 
оптимизационную
 
задачу
.
Задача
 
оптимизации
 
в
 
общем
 
виде
 
состоит
 
в
 
поиске
 
оптимального
 
значения
 
параметров
 
некоторой
 
целевой
 
функции
,
значение
 
которой
 
необходимо
 
максимизиро
-
вать
 
или
 
минимизировать
.
В
 
нашем
 
случае
 
целевой
 
функцией
 
будет
 
суммарная
 
яркость
(
точнее
 
её
 
обратное
 
значение
)
области
 
предполагаемого
 
расположения
 
надписи
.
Другими
 
словами
 
мы
 
будем
 
стараться
 
найти
 
на
 
изображении
 
темное
 
пятно
,
по
 
форме
 
напоминающее
 
нашу
 
надпись
(
нам
 
известны
 
размеры
 
цифр
 
и
 
расстояния
 
между
 
ними
).
Итак
,
у
 
нас
 
есть
4
прямоугольника
,
которые
 
при
 
наличии
 
наклона
 
шрифта
 
превращаются
 
в
 
параллелограммы
,
необходимо
 
найти
 
такое
 
расположение
 
этой
 
группы
 
параллелограммов
 
и
 
такой
 
наклон
,
чтобы
 
минимизировать
 
суммарную
 
яркость
 
внутри
 
этих
 
парал
-
лелограммов
.
В
 
итоге
 
у
 
нас
 
есть
 
три
 
параметра
: x, y (
левый
 
верхний
 
угол
 
первого
 
параллелограмма
)
и
d —
сдвиг
 
нижнего
 
основания
 
относительно
 
верхнего
.
Такой
 
метод
 
поиска
 
надписи
 
будет
 
эффективен
 
для
 
не
 
слишком
 
зашумленных
 
линиями
 
изо
-
бражений
,
о
 
которых
 
мы
 
и
 
говорили
 
выше
.
Для
 
решения
 
подобных
 
задач
 
оптимизации
,
таких
,
для
 
которых
 
нет
 
возможности
 
найти
 
аналитическое
 
решение
,
хорошо
 
подходят
 
генетические
 
алгоритмы
.
Генетический
 
алгоритм
 
моделирует
 
про
-
цессы
 
биологической
 
эволюции
:
на
 
основе
 
естественного
 
отбора
 
направляет
 
случайный
 
перебор
 
решений
 
в
 
нужном
 
направлении
 (
максимизации
 
или
 
минимизации
 
целевой
 
функции
).
На
 
первом
 
шаге
 
алгоритма
 
создается
 
начальная
 
популяция
 
особей
,
каждая
 
особь
один
 
из
 
вариантов
 
решения
(
набор
 
параметров
).
Затем
 
для
 
каждой
 
особи
 
рассчитывается
 
значение
 
целевой
 
функции
,
называемое
 
в
 
контексте
 
эволюции
 
приспособленностью
.
Если
 
значение
 
целевой
 
функции
 
устраивает
 
постановщика
 
задачи
,
алгоритм
 
останавливается
,
если
 
нет
начинается
 
создание
 
нового
 
поколения
.
Новое
 
поколение
 
формируется
 
на
 
основе
 
предыдущего
 
с
 
помо
-
щью
 
операторов
 
мутации
 
и
 
кроссовера
,
которые
 
моделируют
 
соот
-
ветствующие
 
биологические
 
процессы
.
Оператор
 
мутации
 
изменя
-
ет
 
случайным
 
образом
 
один
 
из
 
параметров
 
решения
,
а
 
оператор
 
кроссовера
 
скрещивает
 
два
 
решения
(
например
,
случайным
 
образом
 
выбирается
 
часть
 
параметров
 
первого
 
решения
 
и
 
соеди
-
няется
 
с
 
соответствующими
 
параметрами
 
второго
).
Отбор
 
особей
 
для
 
создания
 
нового
 
поколения
 
осуществляется
 
по
 
принципу
 
естественного
 
отбора
чем
 
выше
 
значение
 
целевой
 
функции
 (
приспособленность
)
особи
,
тем
 
выше
 
вероятность
 
её
 
перехода
 
в
 
новую
 
популяцию
.
После
 
создания
 
нового
 
поколения
 
вновь
 
про
-
водится
 
оценка
 
каждой
 
особи
,
выявляется
 
лучшая
 
и
 
проверяется
 
условие
 
остановки
.
Если
 
цель
 
всё
 
ещё
 
не
 
достигнута
,
создается
 
очередная
 
популяция
 
и
 
т
.
д
.
В
 
нашем
 
случае
 
решением
 
является
 
вектор
 
из
 
трех
 
переменных
x, y
и
d,
а
 
целевая
 
функция
суммар
-
ная
 
яркость
 
пикселов
 
внутри
 
параллелограммов
.
Расчет
 
целевой
 
функции
 
производится
 
следующим
 
образом
:
// Ôóíêöèÿ âûçûâàåòñÿ âî âðåìÿ ðàáîòû ãåíåòè÷åñêîãîàëãîðèòìàpublic function test_dna($array){$fitness = 0;for ($d = 0; $d < $this->digits_quantity; $d++)for ($i = 0; $i < $this->digit_width; $i++)for ($j = 0; $j < $this->digit_height; $j++){ // Âû÷èñëåíèå ïîçèöèè ïèêñåëÿ íà îñíîâå îòñòóïîâ(x, y) è ñäâèãà (d)$x = $this->digit_kerning * $d + $i +$array['x'] + round($array['d'] * ($j / $this->digit_height));$y = $j + $array['y'];$fitness += $this->mask[$x][$y];}return $fitness;}
Интерфейс
 
для
 
взлома
 
капчи
"
китайцами
"
 
046

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->