Что такое код swf_definetext

Содержание

Способы вставки Flash в HTML и XHTML

«Как правильно вставить объекты Flash в вашу HTML-страницу?»

Это должно быть простой вопрос, но вероятно вызывает множество споров, так как каждый из доступных способов встраивания объектов имеет свои преимущества и недостатки. В этой статье мы исследуем трудности и тонкости встраивания Flash-содержимого и рассмотрим наиболее популярные способы вставки объектов.

Основные компоненты метода встраивания Flash-объектов

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

Соответствие стандартам

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

Межбраузерная поддержка

Поддержка всеми основными браузерами и популярными операционными системами — это необходимое условие. Проверить разметку можно с помощью инструментария Flash embed test suite, который позволяет оценить, поддерживают ли браузеры тот или иной метод разметки, с помощью которой можно вставить Flash-объекты. Этот набор тестов может показать информацию о параметрах, в том числе различных настройках Flash, потоках и сценариях, поддерживаемых браузерами и ОС. Вы также можете изучить сводную таблицу, отображающую эти параметры.

Поддержка альтернативного содержимого

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

Избежание несоответствия между Flash-контентом и версией Flash-плеера

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

Автоактивация интерактивного контента

Браузеры компании Microsoft работают так, что посетители не могут напрямую взаимодействовать с элементами управления Microsoft ActiveX, который позволяет загружать объекты и элементы embed , также называемые «интерактивным контентом».

Короче говоря, браузеры Microsoft не позволят взаимодействовать с интерактивным контентом, пока пользователь самостоятельно его не активирует. Opera также внедрила похожий механизм «click-to-activate». Этот механизм работает как «лежачий полицейский» на дороге: вы должны приостановить движение, медленно переехать через него, и только потом нажать педаль газа. Это может запутать обычного интернет-серфера и разозлить даже самого опытного.

Простота реализации

Конечно же простота имеет значение. Зачем прыгать выше головы, если можно сделать проще?

Основы встраивания Flash-объектов: embed и object

Существуют два элемента HTML, которые позволяют вставить объекты Flash на веб-страницу. В одной руке, у нас есть запатентованный элемент embed , который поддерживается большинством браузеров:

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

Большинство современных браузеров выбрали стандартом альтернативу тегу embed , используя при этом MIME-тип объекта, чтобы подключить соответствующий плагин для воспроизведения содержимого:

Этот метод не привязан к какому-либо определенному браузеру и поэтому это предпочтительная реализация.

Второй способ реализации создан специально для Internet Explorer на Windows. При этом требуется, чтобы вы определили атрибут classid у объекта, чтобы браузер смог загрузить необходимый элемент управления ActiveX Flash-плеера. Такой способ допустим, но зависим от типа браузера:

Замечание: В двух последних примерах кода специально не указан параметр codebase — он часто используется, чтобы уточнить URL инсталлятора Flash на серверах Adobe (браузер может автоматически загрузить его, если он еще не установлен). Однако это запрещено согласно спецификациям, которые ограничивают его доступ только в пределах домена текущего документа, и поэтому этот параметр не поддерживается всеми современными браузерами.

Почему embed все еще используется

С появлением веб-стандартов можно было бы совершенно обоснованно удалить элемент embed . Он просто никогда не был рекомендацией W3C и никогда не будет, потому что он уже запатентован. Однако в действительности этот способ лучше поддерживается браузерами, чем отдельная реализация элемента object . В результате такой способ реализации выбран на большинстве веб-сайтов, таких как Google Video и Brightcove.

Хотя веб-стандарты созданы, чтобы избежать проблем совместимости, элемент embed более ясен и недвусмыслен, чем элемент object , одобренный W3C. Жесткие правила реализации элемента embed и хорошая поддержка превратила его в фактический стандарт, который будет использоваться до тех пор, пока не будет универсальной поддержки элемента object , достаточной для того, чтобы игнорировать версии браузеров, которые его не поддерживают.

Где нарушена поддержка веб-стандартов

Двойственная реализация элемента object формально не нарушает веб-стандарты, но создает множество проблем. Следовательно, нам нужно найти способ объединить два метода реализации объектов в один. Еще хуже то, что мы также должны разобраться с браузерами, которые имеют (или раньше имели) неправильную реализацию объектов. Давайте рассмотрим эти проблемы:

  • Общая реализация объектов не работает в Internet Explorer на Windows. IE загружает плагин и SWF-файл, но не показывает его содержимое.
  • Когда мы частично объединяем два способа реализации добавлением параметра movie к общей реализации, Internet Explorer отображает Flash-контент, но не проигрывает его.
  • Если мы полностью соединим две реализации, все заработает в Internet Explorer, но браузеры на базе Gecko проигнорируют Flash-контент и покажут альтернативное содержимое.

Одной из особенностей элемента object является то, что вы можете вставлять этот тег друг в друга:

К сожалению, из-за ошибки в старых версиях Internet Explorer встроенные друг в друга элементы object рассматриваются так, как будто они следуют один за другим, поэтому отображаются оба элемента.

Еще хуже то, что браузеры Safari, начиная с версии 1.2.2 для Mac OS 10.3, игнорируют элемент param , встроенный в object , хотя поддерживают такие же атрибуты для элемента embed .

Замечание: Вы также можете спросить, насколько разумно определять контент, атрибуты и параметры дважды, как в вышеизложенном способе. Этот комбинированный метод также делает более проблематичным использование JavaScript для взаимодействия с Flash-контентом. В таком случае вы должны проверять, с каким объектом вы взаимодействуете.

Некоторые из ошибок уже исправлены, но необщепринятая и ошибочная в Internet Explorer реализация object все еще сдерживает абсолютное принятие этого элемента. Мы можем только надеяться, что это будет исправлено в ближайшем будущем.

Почему object лучше, чем embed

Несмотря на отсутствие поддержки всеми браузерами элемент object все же более предпочтителен, чем элемент embed , потому что кроме соответствия стандартам, он также обладает превосходной поддержкой альтернативного содержимого.

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

Элемент embed поддерживает альтернативное содержимое посредством элемента noembed , но такая реализация работает только в тех браузерах, которые не поддерживают сам элемент embed , например Internet Explorer на платформах Windows Mobile. В отличие от элемента object , embed не поддерживает альтернативное содержимое, когда поддерживается сам элемент embed , но не установлен Flash-плагин. В такой ситуации, можно довольствоваться только атрибутами pluginurl и pluginspage , с помощью которых отображается картинка, кликнув по которой можно установить плагин.

Я думаю, это лучшее решение для отображения альтернативного контента, чтобы описать необходимый плагин и дать намек на то, что пользователь может загрузить и установить плагин Flash. (Тем не менее, нет других причин, по которым мы должны злоупотреблять атрибутом codebase .)

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

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

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

Хотя разметка предоставляет средства показа Flash-контента или альтернативного содержимого, она не способна решить проблемы несоответствия контента и плагина Flash или ошибки при активизации интерактивного контента, и это не всегда самый простой способ решить и ту, и другую проблему.

Однако, давайте сделаем краткий обзор наиболее популярных «комбинированных» методов встранивания Flash, осуществляемых с помощью (X)HTML-разметки.

Двусоставный метод

В Flash IDE, вы можете создавать HTML-страницы с помощью так называемого двусоставного метода, объединяющего реализацию объектов с помощью элемента object и embed , встроенного внутри него как альтернативный контент:

Как видите, этот метод основан исключительно на запатентованной разметке. Он несомненно фокусируется на межбраузерной поддержке, но не соответствует стандартам.

Двусоставный метод использует избыточный код, делает ваши веб-страницы логически непоследовательными и не позволяет вставить альтернативное содержимое. А единственная преимущество — это простота в использовании, так как его генерирует Flash IDE: так что не пытайтесь просить воспроизвести этот метод по памяти.

Метод вложенных объектов

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

К сожалению, в этом методе отсутствует межбраузерная поддержка вследствие ошибки вложения элементов object в IE и отсутствия поддержки вложенных элементов param в Safari. Но можно использовать прием с условными комментариями IE, чтобы избежать ошибок браузера:

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

Flash Satay

Другая альтернатива — это метод Flash Satay, который основан на общем способе реализации объектов и включает дополнительный параметр movie . Этот параметр необходим, чтобы избежать ошибок отображения контента в IE. Он также включает movie-контейнер Flash (c.swf с переменной path), чтобы исправить ошибку с потоковым воспроизведением в IE:

Илон Маск рекомендует:  flex-flow в CSS

Хотя он приближает нас к «идеальному», универсальному способу реализации объектов, Flash Satay содержит приемы, применение которых не подойдет каждому? и при использовании этого метода встроенные элементы param не поддерживаются старыми версиями Safari.

Аргументы в пользу DOM

Когда вы думаете о недостаточности методов разметки, вы можете поинтересоваться, почему нельзя использовать скрипты DOM. С помощью них, мы можем динамически управлять разметкой, как того требует каждый браузер, используя:

  • специальную реализацию для IE;
  • запатентованный элемент embed для старых версий Safari;
  • общую реализацию для всех остальных браузеров.

Скрипт DOM к тому же гибкий инструмент, достаточный для решения остальных проблем: прежде всего, мы можем использовать его для решения проблемы несовместимости Flash-плейера и Flash-контента, определяя версию плагина и проверяя то, что нужно показывать — Flash-контент или альтернативное содержимое. Когда необходимая версия плагина недоступна, мы можем инициировать экспресс-установку Adobe, — механизм встроенный в Flash-плейер. Тем самым мы упрощаем загрузку нужной версии.

Решение с применением DOM также позволяет нам избежать механизма «click-to-activate» с помощью динамического создания элементов object .

Будьте осторожны, используя JavaScript

Так как не каждый является опытным специалистом по JavaScript — да и даже тот, кто им является, не должен заново изобретать велосипед — неплохо использовать уже существующие библиотеки JavaScript для встраивания Flash. Давайте рассмотрим критерии выбора надежной библиотеки.

Разметка по стандартам редко поддерживается создателями библиотек, так как эти библиотеки определяют Flash-контент либо в JavaScript, либо другими средствами разработки. Большинство библиотек создают неправильный HTML и, так как разметка написана динамически, W3C-валидатор не способен её проверить.

С другой стороны нужно рассмотреть, как работает такой метод, если JavaScript не доступен, не поддерживается или поддерживается только отчасти. Что делать, если используя JavaScript, вы ограничиваете доступность контента для пользователей?

Приняв во внимание вышесказанное, давайте посмотрим, как работают некоторые популярные библиотеки.

Комплект по определению плейера Adobe Flash

Кроме создания разметки в Flash IDE, Adobe также предоставляет комплект по определению плейера Flash. Существует три способа использовать этот комплект:

  1. Проверив установлен или нет флажок Detect Flash Version (в меню File > Publish Settings > HTML) в Flash 8 IDE.
  2. Вставив его вручную, загрузив дистрибутив этой библиотеки.
  3. Работать в Flex Builder 2, где он включен по умолчанию.

Хотя пакет дает нам все желаемые возможности, такие как определение версии, экспресс-установка и автоактивация интерактивного контента, он нуждается в усовершенствовании. Когда мы полностью перейдем к стандартам, его ждет безнадежный провал: пока что он основан на двусоставной разметке, так как имеет либо реализацию объектов от Microsoft, либо поддержку запатентованного элемента embed , не соответствующего стандартам.

Он также поддерживает альтернативный контент, хотя странным и противоречивым образом. Вы должны определить альтернативный контент дважды: в JavaScript и в элементе noscript .

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

UFO и SWF Object

Популярные альтернативы с открытым исходным кодом, как UFO Боба ван дер Слуиса и SWF Object Джеффа Стирнса наверное самые полные и простые в использовании библиотеки, доступные в настоящее время.

Хотя на первый взгляд они кажутся похожими, они полностью отличаются внутренним содержанием. Например, SWF Object использует двусоставный метод Adobe, в то время как UFO генерирует главным образом соответствующую стандартам разметку. С другой стороны они используют общие архитектурные принципы: обе библиотеки построены на идее создания разметки, поддерживающей альтернативное содержимое (таким образом доступное и оптимизированное под поисковики), которое замещается DOM-скриптом, когда доступна необходимая поддержка Flash и JavaScript.

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

Аргументы в пользу «умеренного» программирования DOM

Чтобы решить все проблемы, вполне логично использовать следующий метод вставки: смешанную разметку, совместимую со стандартами, как та, которая используется методом Flash Satay, чтобы включить и Flash-контент, и альтернативное содержимое, наряду с применением небольшого DOM-скрипта, который необходим для устранения проблем в некоторых браузерах.

ObjectSwap основан на этих принципах и на мой взгляд является образцом для будущих библиотек встраивания Flash-объектов. К сожалению, ObjectSwap концентрируется в основном на автоактивации интерактивного контента, поэтому он не пригоден для определения версии и не решает проблем с разметкой, таких как поддержка потокового воспроизведения в IE или поддержка параметров в старых версиях Safari.

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

Будущее встраивания Flash

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

Linux.yaroslavl.ru

Учебник РНР
Назад Вперёд

swf_definetext — определяет текстовую строку.

Описание

void swf_definetext (int objid, string str, int docenter)

Определяет строку текста (параметр str ) с использованием текущего шрифта и текущего размера шрифта. docenter это точка центрирования слова; если docenter равен 1, слово центрируется в x.

Библиотека Интернет Индустрии I2R.ru

Малобюджетные сайты.

Продвижение веб-сайта.

Контент и авторское право.

Встраиваем флэш-ролики, поддерживая стандарты

ActionScript 2: программирование во Flash MX. Для профессионалов

Flash Satay: Embedding Flash While Supporting Standards

Я работаю с Flash’ем уже несколько лет и всегда испытывал легкое разочарование от того, какой html-код следует писать, чтобы встроить ролик в веб-страницу. Недавно я создал сайт на XHTML, и мое разочарование возросло: html-код, необходимый для отображения ролика на сайте, просто не соответствует стандартам. На помощь был призван новый, более аккуратный метод, который бы не конфликтовал, а дружил со стандартами XHTML.

Доверяй, но проверяй

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

Учитывая то, что такой код используется на 95% страниц, он стал стандартом де-факто.

Как нетрудно заметить любому, кто уделил внимание устрашающему html-коду выше, для отображения роликов используется два главных тэга:

К сожалению, это не работает в не-IE браузерах, но мы ведь и не ожидали, что они сдадутся так быстро. Потратив некоторое время на поиск, я обнаружил, что атрибут classid является специфическим для ActiveX-конфигурации браузера. Кстати, это именно он уговаривал Netscape и Mozilla игнорировать объект. Между тем, роль этого атрибута крайне важна: он сообщает браузеру, каким плейером проигрывать объект. Так что нам не удастся так же легко, как в прошлый раз, помахать ручкой и попросить закрыть за собой дверь.

К счастью, флэш-плейер откликается также на содержание с MIME -типом application/x-shockwave-flash . Это великолепно хотя бы потому, что есть возможность указать тип объекта, используя параметр type.
Итак, мы все-таки прощаемся с

Codebase

Эффективная работа: Flash MX 2004

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

Во многих браузерах (и особенно в IE) этот атрибут выполняет другую функцию: в пути, который содержит его значение, записан необходимый для запуска ролика номер версии флэш-плейера. Выполнив простое сравнение, браузер может предложить пользователю скачать более свежую версию проигрывателя. Обратной стороной медали в данном случае является то, что этот атрибут останавливает проигрывание роликов в Netscape и Mozilla, если его использовать данным образом. Значит, придется пустить его в расход. Как восполнить потерю функциональности мы обсудим позже.

Итак, после того, как codebase мы признали не жильцом, html-код наконец-то стал выглядеть более или менее изящно:

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

Эврика!

Когда я воспользовался атрибутом data , у меня чуть не случился удар — ролики начали внезапно проигрываться в Netscape и Mozilla. Как выяснилось, IE тоже не отказывался их показывать.

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

Метод Satay

Несколько дней спустя я обсуждал эту проблему с Джефри Зельдманом (Jeffrey Zeldman), объясняя, насколько близок я был к решению проблемы. Он тоже заинтересовался, поскольку столкнулся с той же проблемой, разрабатывая последние проекты. Все это заставило меня задуматься, и, наконец, когда я брел к дому по пустынным ночным улицам, меня поразила догадка.

Как мы уже выяснили, проблема заключается в том, что Windows не хочет проигрывать ролик, пока не скачает его весь. А как насчет создания очень маленького ролика, который в первом же кадре будет подгружать в себя тот ролик, который мы действительно хотим показать?

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

Образно говоря, не имеет значения, изготовлен ли ролик из ветчины, курятины или говядины, вам все равно придется сначала обмакнуть его в кетчуп, чтобы ощутить его настоящий вкус. Мы назвали это методом Satay.

Ролик-контейнер

Я создал новый ролик, в первом кадре которого разместил следующий ActionScript:

Он указывает флэш-плейеру, чтобы тот загрузил ролик, имя которого хранится в переменной path на нулевом уровне. Осталось только динамически передавать эту переменную. Благодаря строковым параметрам и тому, что они обрабатываются Flash`ем, это даже не назовешь проблемой. Вот как решается этот вопрос: c.swf?path=movie.swf

Ролик-контейнер называется c.swf, и при таком вызове выражение, указывающее на загрузку нужного ролика, выглядит для Flash`а так: _root.loadMovie(«movie.swf»,0);

Можно изменять поведение контейнера, пересылать значение переменной, используя методы post и get , но следует всегда помнить, что размер ролика-контейнера должен быть очень маленьким.

Финальный код

Осталось только завершить начинание. Итак, мы отказались от многих атрибутов, добавили новые, перемешали и залили в судочки:

Это ли не тот код, о котором я говорил с самого начала? Но не следует забывать о том, что, отбросив codebase , мы лишили себя неплохой части функциональности. Что же делать?

Компенсация жертвам

Главная проблема при отстутствии атрибута codebase заключается в том, что браузер просто не будет предлагать пользователям обновить флэш-плейер. Как нам с вами известно, надеяться на то, что большинство пользователей обновит свои проигрыватели собственноручно, не приходится.

Решение этой проблемы на удивление несложно: просто принесите в жертву какой-то пустой ролик в самом начале страницы. Понятно, что при его объявлении следует указать атрибут codebase . Таким образом, жертвуя 1 КБ трафика, мы достигаем нужной функциональности. Пусть это не самый аккуратный, зато действенный способ, который не наживет вам врагов.

Альтернативное содержание

Помните, что я говорил о том, что тэг

Если браузер не знаком с MIME-типом application/x-shockwave-flash , он просто покажет посетителю картинку noflash.gif.

Продолжение следует

Я написал эту статью, зная, что это исследования всего одного человека, так что научно-исследовательская работа на эту тему продолжается. Отнеситесь к приведенной информации как к научной теории: она считается доказанной, пока не доказана обратная.

Что такое код swf_definetext

RomanLoveText — Обзор GameDev статей со всего интернета.
Лучшие посты попадают сюда)

Страницы

Flash полезное / Упакованный SWF. Как распаковать?

Упакованный SWF. Как распаковать?:
Привет, друзья!

В этом посте я хотел бы рассказать о том, что из себя представляет упакованный SWF и как его можно распаковать динамически и статически.
Итак, что же такое упакованный SWF?
Если Вы никогда ранее его не видели, не поленитесь скачать простой классический пример упакованного SWF:

Запустив SWF, вы увидите немного текста в левом верхнем углу. Однако, если вы попробуете декомпилировать этот файл, то вы не увидите кода, который этот текст показывает.

Стоит отметить, что если бы в упакованном SWF были ещё какие-нибудь ресурсы (изображения, звуки, шрифты и т.д.), то их вы бы тоже не увидели. Это из-за того, что оригинальный SWF находится внутри того SWF что вы скачали и декомпилировали, и часто в зашифрованном виде.

Обычно все, что вы можете получить из таких SWF с помощью декомпиляторов — это код распаковщика\расшифратора и, возможно, сам зашифрованный SWF в виде набора байт (зависит от того, умеет ли используемый вами декомпилятор отображать тэг DefineBinaryData).

Такая «упаковка» на самом деле достигается с помощью простого Flex тэга [Embed].

Динамическая распаковка (dumping)

Динамическая — значит для распаковки потребуется исполнение SWF во Flash Player’е (далее — FP).

Т.к. FP не умеет проигрывать зашифрованную неведомо как SWF, то логично что перед проигрыванием, SWF должна расшифровываться и загружаться уже в чистом виде (например, с помощью Loader.loadBytes() ).

Что более важно, распакованный и расшифрованный SWF будет в памяти все время, пока он исполняется FP’ром.
И это наш шанс достать его!

Существует два основных способа сделать это.
1) Динамическая распаковка с помощью утилит

Используя сторонние или даже самописные утилиты для поиска SWF в памяти процесса FP. Это самый быстрый, самый простой и обычно самый эффективный способ. Но он не вызывает ощущения что вы — тру кряке.

Существуют различные платные и бесплатные утилиты для этих целей.

Одна из наиболее продвинутых — это SWF Revealer, бесплатная утилита для владельцев лицензий на ASV. В некоторых случаях, она может обходить проверки на домен (которые не дают распаковаться и расшифроваться SWFке) и заставлять SWF запускаться в вашей среде.

Также достаточно легко гуглятся разные бесплатные дамперы.
2) Ручная динамическая распаковка

Поиск SWFки вручную, с помощью нахождения CWS (сжатый SWF) или FWS (несжатый SWF) заголовков, которые являются началом любого SWF. Если вы никогда не пробовали такой способ, я очень рекомендую попробовать! Он не только позволит немного подтянуть ваши скиллы в hex, но и подарит вам ощущение, что вы тру-крякер!)

Для поиска заголовков можно использовать любой HEX редактор, который умеет читать память процессов и имеет функцию поиска.

Если вы хотите искать упакованный SWF в памяти FP в котором проигрывается файл-пример по ссылке выше, то стоит начать с поиска FWS подписи (несжатый SWF) — просто ищите строку ‘FWS’, т.к. перед исполнением FP разжимает SWF, если он был сжат.

Если вы будете запускать и искать SWF в браузере, то закройте все лишние вкладки, чтобы снизить количество лишних SWF в памяти.
Обычно при таком поиске вы найдете несколько заголовков в памяти, т.к. сам FP держит там разные служебные SWF, например ту, что показывается после входа в полноэкранный режим.

Так что если вы сомневаетесь, то лучше проверить все найденные заголовки.

Итак, что же делать с найденным заголовками, спросите вы? Как их проверить, как узнать, где заканчивается SWF?

Пожалуйста, взгляните на этот скриншот:

Это заголовок одной из SWF в памяти FP при проигрывании файла-примера, найденный поиском по строке ‘FWS’ (совершенно случайно это оказался заголовок искомого упакованного файла, который мы и хотим найти )

Что же дальше? А дальше необходимо посмотреть какой длины получается найденный SWF. Длина расположена в 4 байтах начиная с 4го:

Как я узнал? Я просто прочитал спецификацию формата SWF: «SWF File Format Specification» http://www.adobe.com/content/dam/Adobe/en/devnet/swf/pdf/swf_file_format_spec_v10.pdf (раздел «The SWF header»)

Т.к. это шестнадцатеричное число, записанное в память, вам стоит знать, что порядок записи его байт — справа налево. Поэтому в результате число такое:

00 00 04 DB в hex и 1243 десятичном представлении.

Теперь отмеряем эти 1243 байт начиная с FWS подписи.

Т.к. подпись начинается на 053DD020, окончание SWF файла должно находиться по адресу 053DD4FB (053DD020 + 4DB):

Пожалуйста, имейте ввиду, что адрес расположения SWF в памяти будет отличаться на разных ОС и на разном железе.
Итак, мы видим, что найденный SWF действительно заканчивается на 053DD4FB, так что мы можем смело выделить все байты начиная с 053DD020, заканчивая 053DD4FB и скопировать их в новый SWF файл.

После проделывания этой операции со всеми вхождениями FWS, которые вам покажутся подходящими, среди сохраненных SWF файлов будет один искомый, распакованный SWF!

Теперь у вас не должно возникнуть проблем с его декомпиляцией.
Некоторые виды пакеров усложняют поиск искомого SWF с помощью размещения множества фальшивых FWS заголовков в памяти. Так что вам следует более тщательно подбирать FWS — проверять его длину, и то как он в целом выглядит. Опытные в реверсинге люди (вроде меня :p) могут на глаз отличить фальшивый заголовок от настоящего, глянув на сам заголовок и на несколько десятков байт после него.
Иногда, упакованный SWF может не распаковываться в память до проверки каких-нибудь условий. Например, загрузчик может проверять текущий домен или наличие какого-нибудь файла с лицензией. В таком случае вам придётся пропатчить эти проверки (например, с помощью дизассемблеров байткода, таких как Yogda или RABCDasm) или предоставить необходимые файлы (в которых может находиться ключ для расшифровки), чтобы заставить SWF запуститься и распаковаться.

Статическая распаковка

Статическая — значит без запуска SWF во FP.

В целом, к этому типу распаковки прибегают когда не вышло распаковать SWF динамически (кто его знает, почему у вас не получилось запустить SWF?)

Статическая распаковка может быть очень сложной задачей, т.к. есть не один способ её усложнить и сделать мучительно долгой.
Итак, с чего начать при статической распаковке? Для начала, вам следует получить доступ как минимум к двум вещам в SWF:

1 — DefineBinaryData тэг(и).

2 — Декомпилированный AS или abc байткод распаковщика\загрузчика.

Также, в некоторых случаях понадобится

3 — SymbolClass тэг

Для этого используйте доступные утилиты (ASV, Adobe SWF Investigator, SWiX, и т.д.).
Как найти тэг DefineBinaryData в SWF?

Сначала отмечу, что некоторые утилиты, например, ASV, могут вам явно указать на наличие этого тэга, сразу после открытия SWF. В них же можно этот тэг сохранить в виде двоичного файла.

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

Для получения содержимого тэга DefineBinaryData из файла-примера с помощью Adobe SWF Investigator, просто откройте файл, перейдите на вкладку Tag Viewer, выберите тэг DefineBinaryData и нажмите на кнопку Dump To File.

Иногда в этом списке тэгов может быть множество фальшивых, чтобы сбить с толку незадачливого крякера. Для поиска необходимого тэга придётся немного изучить код загрузчика\распаковщика и отследить там обращение к упакованным данным.

Обычно оно выглядит так:
Где SomeClass имеет тип Class и наследуется от класса ByteArrayAsset.
Давайте посмотрим в код загрузчика и поищем что-то похожее.

Ага, вот и оно!
Теперь нам следует поискать класс с именем оканчивающимся на «_content» и наследующийся от ByteArrayAsset.

А вот и он:
Чтобы выяснить, какой тэг DefineBinaryData связан с этим классом, нам следует заглянуть в тэг SymbolClass и поискать там запись с названием найденного класса «MainTimeline_focus_loader_content».

В нашем случае эта запись выглядит так (в Adobe SWF Investigator):
Запомните значение поля idref. Это id нужного тэга DefineBinaryData!

Теперь ищите тэг с таким id среди всех тэгов DefineBinaryData.

После того, как вы его найдёте, его можно сохранить в файл и продолжать распаковку.

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

Если повезёт, то полученные из DefineBinaryData данные окажутся чистым SWF без какого-либо шифрования и распаковку можно считать оконченной.

Но чаще всего, на этом этапе все самое интересное только начинается и впереди реверсинг загрузчика — разбор алгоритмов шифрования и написания собственного дешифровщика.
В нашем случае, код загрузчика намеренно сделан максимально простым и не обфусцированным, так что на этот раз нам повезло — мы легко находим функцию расшифровки:
И узнаем, что для получения оригинального SWF достаточно каждый его байт поксорить на 55.

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

Остаётся надеяться, что это так и распакованный SWF не окажется точно так же расшифровщиком SWF, который вы только что ковыряли, хахаха!)

Иногда при упаковке используют принцип матрёшки — запихивают один расшифровщик в другой — и так десятки раз, да ещё и алгоритмы расшифровки везде разные.

В любом случае, динамическая распаковка все это обходит.

Запомните — в мире Flash, ничего, кроме названий, нельзя скрыть от глаз профессионала высокого класса с достаточным уровнем мотивации
Есть вопросы, идеи, комментарии? Оставляйте всё в виде комментариев к посту, пишите!

Как открыть файл SWF

SWF – это особый формат, разработанный специально для веб-приложений и использования в интернет-среде. Это формат для хранения различного рода анимации, графического контента и даже коротких видео и аудио файлов небольшого объёма.

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

Аббревиатура «swf» изначально расшифровывалась как «ShockWave Format». Теперь, для того, чтобы не было путаницы с другими флеш-приложениями, этот формат называется «Small Web Format» (маленький веб-формат).

Как и чем открыть SWF?

К сожалению, открыть данный файл с помощью стандартных средств просмотра изображений Windows не представляется возможным. Тут ситуация очень схожа с форматом «GIF», который хоть и отображается как изображение, но запустить анимацию нельзя. Так чем же всё-таки можно просмотреть такого рода файлы?

Браузеры

Первый и самый простой способ, абсолютно не требующий дополнительной установки каких-либо средств – открыть нужный файл в любом браузере. Практически все современные средства для интернет-серфинга предусматривают поддержку технологии «Flash».

Запустить swf-файл используя браузер просто:

    Дважды кликните на необходимом swf-файле.

Готово! Браузер откроет наш файл, и впредь все swf-файлы будут ассоциироваться с данной программой.

Adobe Flash Player

Второй доступный и очевидный вариант – использовать программные продукты от «Adobe», так как именно эта компания на данный момент – основной разработчик любого ПО с технологией Flash. Самый распространённый продукт, который есть у каждого – Flash Player.

Итак, чтобы открыть данный тип файлов в этой программе необходимо:

    Открыть Adobe Flash Player, используя ярлык на рабочем столе или через меню «Пуск». В окне программы открываем функцию верхней панели «File» («Файл»), в открывшемся подменю выбираем «Open» («Открыть»).

Готово! Файл откроется и будет воспроизведён Flash Player-ом.

На заметку! Ещё один более быстрый способ – выделить необходимый файл и нажать правой клавишей мыши. В контекстном подменю выбрать подпункт «Открыть с помощью» («Open with»), и уже в нём выбрать Флеш-плеер.

С помощью медиаплеера

Для этого способа подойдёт любой проигрыватель видео для Windows – самый популярный KMPlayer, распространённый VLC media player, или чуть менее известный GOM player. Впрочем, список подходящих программ достаточно велик.

Разберём на примере KM-плеера. Последовательность действий проста:

    Запускаем КМПлеер. Важно открыть именно саму программу, а не конкретный файл. Так будет удобнее, и это поможет избежать вылетов.

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

Видео — Чем открыть файл SWF

Понравилась статья?
Сохраните, чтобы не потерять!

Как отредактировать SWF-файл?

Порой, при работе с SWF-файлами часто возникает ситуация, когда необходимо внести правки в готовое «творение», не имея при этой исходного FLA- файла. Это может быть всё, что угодно: изменение текста, картинок, звуков и т.д., при этом в отдельных случаях вовсе не обязательно прибегать именно к тем инструментам, с помощью которых был создан файл. Основная сложность заключается в том, что SWF-файл — это уже скомпилированный FLA-файл. При наличии последнего, пользователь имеет возможность видеть всю структуру файла, SWF же содержит минимум информации. После компиляции SWF-файл можно импортировать во Flash, однако без дополнительного ПО восстановить его структуру вряд ли удастся. Соответственно, для внесения правок необходимо декомпилировать SWF-файл.

Такая ситуация породила массу программ, таких как: Sothink SWF Decompiler, Eltima Flash Decompiler Trillix , Power Flash Decompiler и ещё великое множество различных утилит. В этой статье мы приведем примеры и параметры некоторых декомпиляторов, а так же рассмотрим сам процесс декомпиляции на примере программы Sothink SWF Decompiler.

Sothink SWF Decompiler — это программа для захвата, и декомпиляции файла SWF в FLA, а также для извлечения из него различных ресурсов. Программа позволяет извлекать изображения, шрифты, звуки и т.д. из готовых SWF-файлов и считается одной из лучших программ для декомпиляции.

Для человека, знакомого с такой системой, не составит труда с помощью программы «разобрать», а потом заново «собрать» SWF-файл. Для любителей же это может оказаться весьма сложной задачей. Итак, как выглядит процесс декомпиляции в Sothink SWF Decompiler?

Начнём с интерфейса. Собственно, главное окно программы выглядит так:

Слева располагается проводник по каталогам компьютера (Multifile Export), в центре — экран, где можно просмотреть флеш-ролик, справа же можно видеть окно (Resources), в котором отображаются составные части ролика (они появляются после «разборки» файла программой с помощью команд Exports FLA File и Exported FLA File Version).

Команда Exports FLA File более проста, команда Exported FLA File Version позволяет выбрать версию файла для FLA, который вы собираетесь экспортировать (программа поддерживает форматы Flash 6, Flash MX 2004 (7.0), Flash 8, Flash CS3 (9.0) и Flash CS4 (10.0).

Для примера, воспользуемся командой Exports FLA File.

Добавляем файл в список для декомпиляции, а потом сохраняем его. Для этого в открывшемся окошке кликаем на Add file, выбираем нужный файл. Затем кликаем на пиктограмму возле строки Export Path.

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

Как с ними работать? Чтобы просмотреть компоненты файла и найти искомые, необходимо просто выбрать их из списка (выбранный компонент отобразится в центральном окне предпросмотра).

Далее требуется декомпилировать и соханить каждый из компонентов. Для этого в окне Resources выбираем команду Export FLA и кликаем на Export, после чего получаем самостоятельный компонент (.fla-файл), с которым можно спокойно работать во флеш-редакторе.

Немного нюансов: в зависимости от необходимости, можно сохранить все компоненты файла отдельно (установив галочку напротив графы Export Resources) или же сохранить только некоторые необходимые компоненты. В последнем случае нужно будет произвести дополнительные настройки. Для этого нужно выбрать режим декомпиляции Export Resources. Затем выбрать меню Option, и во всплывшем окне, выделить форматы файлов, которые вам нужно сохранить.

Далее всё стандартно, нужно кликнуть на кнопку OK, а затем на Export. Таким образом, сохранятся только файлы выбранных вами форматов.

Как уже говорилось, Sothink SWF Decompiler является одной из самых распространённых программ для декомпиляции SWF-файлов, а также считается одной из самых стабильных.

Помимо всего прочего, программа также включает в себя интересный инструмент SWF Catcher, который позволяет захватить flash-анимацию, которая просматривалась с помощью браузеров Internet Explorer или Firefox.

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

Sothink SWF Decompiler
  • Поддерживает Action Script v. 2.0 и v.3.0
  • Возможность поиска в исходном коде Action Script — Конвертирование SWF в FLA и во FLEX
  • Извлечение SWF из EXE
  • Предпросмотр и экспорт ресурсов файла
  • Экспорт ActionScript файла в AS и HTML форматы
  • Имеется плеер для проигрывания флэш-файлов
  • Детальный просмотр свойств элементов во Flash-ролике
  • Поддержка сканирования кэша IE и вывод списка всех просмотренных вами Flash-файлов


Flash Decompiler Trillix

  • Поддерживает Action Script v. 2.0 и v.3.0
  • Возможность экспорта флеш-роликов в такие форматы как AVI, MPEG и т.д.
  • Возможность детальной настройки конвертации SWF в FLA
  • Возможность декомпилировать и конвертировать одновременно несколько флэш-роликов
  • Возможность редактирования объектов файла без конвертации в FLA
  • Извлечение ресурсов файла в различные форматы
  • Имеется встроенный проигрыватель Flash-файлов
  • Возможность сохранения Flash-роликов онлайн
  • Удобный интерфейс: масштабируемый, лента панели инструментов


SWF Decompiler Magic

  • Конвертирование SWF в FLV и EXE
  • Возможность экспорта данных из флэш-файла в FLA-файл:
    • Экспорт звуков и видео из флэш-файла
    • Экспорт текста, форм, кнопок, изображений, шрифтов и фреймов из флэш-файла
    • Экспорт скриптов из флэш-файла
  • Обзор и предпросмотр ресурсов перед экспортом
  • Поддержка редактирования динамического текста во флэш-файле
  • Поддержка перемещения изображений во флэш-файле
  • Просмотр детальной информации о каждом объекте из флэш-ролика

Что хочется ещё добавить о флеш-декомпиляторах? На первый взгляд, работать с ними достаточно просто, и в определённой степени так оно и есть. Однако, при декомпиляции SWF-файлов могут возникнуть сложности, так как при использовании подобных программ могут возникать ошибки в коде, которые придётся исправлять «вручную». А для пользователя, незнакомого с языком Action Script это может оказаться очень сложной задачей.

Декомпилятор SWF файлов позволяющий разобрать ActionScript код от компании Adobe

Компания Adobe представила новый инструмент для разработчиков и специалистов по безопасности — Adobe SWF Investigator, позволяющий «распотрошить» файлы SWF и провести их детальный анализ и разобрать ActionScript код.

Используя Adobe SWF Investigator можно изучить работу интегрированного в SWF файл эксплоита или выявить причину проблем в собственном Flash-контенте. SWF Investigator разработан и используется в команде, отвечающей за исправление уязвимостей во Flash. Программа распространяется под лицензией Mozilla Public Licence.

В состав Adobe SWF Investigator входит редактор шестнадцатеричных дампов, статический и динамический анализаторы, интерфейс для просмотра SWF тегов, дизасемблер ActionScript, и инструмент для выявления XSS-уязвимостей.

Ссылка на swf из динамического текстового AS2 Flash

Я хочу сделать ссылку из динамического текста (в Flash-проекте) на внешний swf, который я создал (галерея, управляемая XML файлом). Это код первого кадра моего проекта fla:

и мой html-код для текстовой ссылки:

Не должен ли работать и загружать gal_car.swf поверх другого swf? loadMovieNum работает, когда я использую его на кнопках. Спасибо.

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

Что такое код swf_definetext

Просмотр полной версии : Индексация Flash

Сам код:
Сайт: http://водяной-тёплый-пол.рф/

Спасибо Bb25 за ответы!

Тег как бы запрещает индексировать те или иные части кода. Робот исключает эти части и пропускает их.
Робот не может пропускать части кода, т.к. код последовательный — чтобы увидеть, где закрывается noindex, робот должен увидеть все его содержимое. Тег noindex подразумевался для закрытия участков служебного текста:
http://help.yandex.ru/webmaster/? > — не индексировать текст страницы
.
Тег
Для запрета индексирования служебных участков текста вы можете использовать тег . Тег работает аналогично мета-тегу noindex

Поэтому, Glong, Вы можете просто запретить индексацию файла pic/008.swf в robots.txt, но практической необходимости в этом скорее всего никакой, замечания в вебмастере могут носить и чисто информативный характер и не оказывать влияния на ранжирование.

Так ведь ваш флеш-ролик и не содержит текста, не заморачивайтесь на эту ошибку.

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

Загрузка SWF динамически приводит к тому, что загруженные ранее SWF файлы ошибочно — flex

У меня возникла очень странная проблема с Flash и Flex. Похоже, что при определенных обстоятельствах видеоклипы из SWF, загруженные во время выполнения (с использованием Loader), не могут быть созданы, если другой SWF был загружен в среднем. Вот полный код для программы, которая воспроизводит ошибку. Он скомпилирован с использованием mxmlc через Ensemble Tofino:

Когда вторая операция загрузки закомментирована, как показано выше, код работает. Однако, если вторая операция загрузки раскоментирована и onTinyLoadComplete запускает после, второй SWF загружается, строка, содержащая new spriteClass() , не выполняется со следующим исключением:

test.swf и tiny.swf были созданы во Flash CS4. test.swf содержит два символа, оба экспортированные для ActionScript, один называется TopSymbol и один под названием SubSymbol. SubSymbol содержит простую графику (каракули), а TopSymbol содержит один экземпляр SubSymbol. tiny.swf ничего не содержит; это результат публикации нового пустого проекта ActionScript 3.

Если я изменяю test.swf, поэтому SubSymbol не экспортируется для ActionScript, ошибка исчезает, но в нашем реальном проекте нам нужна возможность динамически загружать классы спрайтов, которые содержат другие экспортированные классы спрайтов в качестве дочерних.

Любые идеи относительно того, что вызывает это, или как его исправить?

Илон Маск рекомендует:  Что такое код xml_parser_free
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL