Pull to refresh

Comments 106

что-то модно стало в последнее время ругать и пинать флеш
Отнюдь. Я пишу на AS3 и это достаточно хорошая технология. Суть этого поста это показать какие косяки бывают, и предупредить разработчиков о таком баге.

Ошибки бывают в любом продукте и технологии, проблема Flash плеера и Adobe, в том что они мало внимания уделяют устранению ошибок как в коде так и в архитектуре, а тратят время на какие-то мутные фичерсы.
Вот хоть убейте, но понять не могу, почему вы считаете это багом? Ведь дебагинг и профайлинг js-кода во всех современных браузерах не является багом? Так и тут, пожалуйста, отлаживайте своего клиента. Флеш имеет определенную спецификацию и при желании его можно даже «декомпильнуть» (если этот термин конечно применим к abc-коду) стандартными средствами, доступными во flex-sdk. Нет тут бага, а есть фича.
Бага не в возможности профайлинга, а именно в возможности сделать code injection. Во flash очень хитрожопые политики безопасности, о которых я даже сделал пояснение (кроссдоменная загрузка и доступ к коду), и в документации много говорится о политиках безопасности и как работать с кодами нескольких разных swf файлов, при кроссдоменной загрузке. Эта фича обходит все эти политики безопасности.

его можно даже «декомпильнуть» стандартными средствами, доступными во flex-sdk

Применим, но таких возможностей у flex sdk никогда небыло.
>«Эта фича обходит все эти политики безопасности.»
Дык это вы их обходите, используя дебаг верию плеера, которая как раз и рассчитана на «code injection» и как раз для профайлинга

>«Применим, но таких возможностей у flex sdk никогда небыло. „
Ну вообще то процесс дебага и профайлинга как раз и есть в какой то мере “декомпильнуть». Так что такие возможности у Flex SDK как раз есть.
Покажите пожалуйста где в документации или вообще на сайте adobe написано, что debug версия плеера имеет возможность code injection?

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

Еще раз повторю во Flex SDK нет никаких средств для декомпиляции abc кода в исходные тексты.
Я и не написал что там есть декомпилятор. Декомпильнуть как раз в мере «позволит вам видеть скрытые параметры».

>«это позволит вам видеть скрытые параметры, которые не выводятся на экран, вы можете контролировать передаваемые данные»

Здесь вы описываете стандатное поведение Debug плеера. Политики безопасности не действуют на debug плеер, а все исключения как раз и прописываются Flex Builder автоматом в конфигурационных файлах, которые вы указали.

Т.е. по сути прилепили кастомный дебаггер, поставили дебаг плеер, прописали ручками исключения и опа! БАГ!!! Сделайте тоже самое в релизном плеере вот тогда и будет тема для обсуждения.

По сути вы описали пункты из оффициальной доки Adobe:
Using Flex 4 / Developer tools / Logging / Using the debugger version of Flash Player
С этим я полностью согласен. Я считаю багом то, что имея такой набор, кто угодно может обходить стандартные ограничения. То есть если разработчик, может так делать для своего приложения, то это не баг, если кто угодно — это баг.
Я до сих пор не пришел с друзьями к единому мнению, можно ли считать перевод в abc-код истинной компиляцией.

Затем, все для декомпиляции лежит в /lib/ (swf*) — java библиотеки с открытыми кодами, а также есть утилита — swfdump.

Я в курсе о политиках безопасности, но нужны они не для гаранта со стороны клиента, а со стороны кода от других источников, и только. Сломать линух очень просто: rm -rf /*, и никто вас от этого отговаривать не будет, если вы под рутом. Так и тут. На клиенте я волен делать у себя все что угодно.
А что считается истинной компиляцией? Насколько я знаю компиляция abc кода, полностью отвечает понятию «компиляция».

swfdump — делает дамп push-кодов плеера, это именно дамп, а никакая не декомпиляция. Сами создатели swfdump говорят что это «abc disassembling tool». Вот официальный репозиторий Flex SDK — opensource.adobe.com/svn/opensource/flex/sdk/, данной утилиты я там не нашел.

Я в курсе о политиках безопасности, но нужны они не для гаранта со стороны клиента, а со стороны кода от других источников, и только.

Вы сейчас высказываете свое ИМХО. Возможность сделать code injection — это баг, и об этом вполне открыто можно почитать в документации к Actionscript и его компиляторам. Если вы считаете, что это фича и так можно и нужно делать, объясните тогда в чем смысл ApplicationDomain и SecurityDomain во Flash?
По поводу компиляции я не буду холивар разводить, мое мнение на счет abc-кода иное.

Ну вообще утилита лежит в /bin/, однако это просто команда запуска jar-ника, исходные коды опять же есть в sdk. Но вообще посмотрите на исходники /modules/compiler/src/, и как-бы там все есть для работы с abc-кодом (и блоками doABC в частности). Так что плохо вы ищите.

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

там все есть для работы с abc-кодом

Там есть исходные коды с помощью которых можно работать с abc кодом, я это и не опровергал. Я сказал что нет утилит для декомпиляции кода.
пишешь несколько строк java кода и сохраняешь дамп в файл
вот те асемблер
для большинства задач достаточно
Сразу видно — опытный программист.
Прикольно! Можно использовать для быстрой отладки налету.
А как потенциальная дыра — не убедили. Там где есть клиент-серверное взаимодействие, крайне необдуманно важную информацию хранить на клиенте. И не важно, какая технология используется html/js/flash/sl.

swf декомпайлерами пользуются уже хрен знает сколько, и если упереться даже обфускация не поможет.

«Чревато геморроем для разработчиков» как раз надежда на то, что клиент не «вскроют».

А за пост спасибо, данному «багу» можно найти и вполне полезное применение.
декомпилятор это одно
инъекция кода в работающее приложение — это совсем другое
ясен пень, что это не магическая кнопка, что сразу все сломается
но на определенные мысли наводит
/Пожал плечами/ Мой клиент, что хочу то и делаю. Для JS же никто не считает багом делать «code injection», допустим через firebug. А что вдруг все всполошились, когда узнали, что это можно сделать и в swf?

Грубо говоря flash player это просто контейнер для оттранслированных в байткод ECMA скриптов.

Еще раз повторюсь гораздо опаснее считать, что swf-формат дает вам какие то гарантии безопасности вашего приложения от прочтения его содержимого.

Кста любой youtube граббер как раз показывает насколько легко можно «прочитать» любую swfку ну а отправить на сервер «нужные» данные вообще проще простого. Так что «инъекция кода в работающее приложение» лично меня ни на какие мысли не наводит — как не хранил у клиента никаких опасных для сервера данных так и не храню. Это касается как «тонких», так и «толстых» клиентов.
И ладно бы ругань по делу. Багом в этот раз назвали стандартные функции отладчика Flash.
Имхо, это всё равно что прочитав обзор анализаторов траффика сказать, что «модно стало ругать протоколы передачи данных». :)

Это лишь удобный механизм, дающий свободу клиенту. Только вот как этой свободой воспользуется клиент — это другое дело. Скальпелем можно операцию сделать, а можно по сонной артерии полоснуть. Всё от нас самих зависит.
Фраза «пинать флеш» рождает с сознание страшные картины… пинать flesh… бррр… )
Тема дыр во флеше всплывает уже второй раз. Да-да, html 5, мы поняли)
Второй раз. О Боже! Второй раз!!!
Ну да, с темой закрытия торрент.сру конечно не сравнить)
На счет онлайн flash-игр и контроля передаваемых данных — это и так возможно с помощью перехвата пакетов. Да и в остальном в общем-то тоже. Хотя конечно возможность code injection — это очень интересно
передаваемые данные и состояние приложения — это разные вещи
попробовал, не работает — дебаггер не видит открытые флеш приложения в фф. :(
First, you need the Flash Player debug version

вы забыли вот это указать в своем мануале.
Нужно перезапустить браузер, чтоб он убил процесс плагина flash плеера. У меня тоже не сразу заработало в ff.
Не увидел уязвимости. Вот если code injection можно будет проводить в чужом браузере и без ведома пользователя — то да.
Интересно, а с помощью этого можно записать DRM видео в файл?
Технология внедрения в память процесса для модификации совсем не нова. Если это флеш, ничто не мешает проводить это с помощью программы CheatEngine. Со стороны клиента противостоять этому невозможно, поэтому всем разработчикам клиент-серверных приложений в обязательном порядке необходимо проверять все поступающие данные.
Хо-хо, ну тем актуальнее одно из основных правил в программировании: «программируйте так, как будто всем будут доступны исходные коды приложения». Ну или примерно так оно звучит, смысл, думаю, понятен)
Ну так во флеше, они так и так видны без каких-либо проблем.
Так и живем…
Я лично слышал скорее про
«Программируй так, как будто код потом будет читать маньяк, который знает, где ты живёшь.»
Кстати, спасибо за наводку на дебагер — очень интересный.
UFO just landed and posted this here
UFO just landed and posted this here
Странно, а у вас точно дебаг версия плеера?
а дебаг версия должна установиться или чего? просто скачалось и тупо запустилось окно flash-плеера
Standalone плеера? Там есть 3 версии — Standalone, для IE, и для FF/Safari/Opera/Chrome.

Если вы ставите плагин для браузера, зайдите вот сюда kb2.adobe.com/cps/155/tn_15507.html и убедитесь что стоит дебаг версия.


при этом дебаггер пуст.
Проверил в FF на YouTube с 10.0.45 не работает, только с 10.0.42. С 10.0.45 работает в Chrome 4. В FF работает на Vimeo.
Так же проверьте путь до файла агента, там должны быть обратные слеши в пути — /
UFO just landed and posted this here
Аналогичная проблема. Сделал все как надо — De MonsterDebugger пустой, а в контекстном меню флеш плеера менюшка Debugger (Отладчик) неактивна.
UFO just landed and posted this here
А какие у вас проблемы с AIR?
Есть встроенный дебагер во Flesh IDE, или там… во flash builder…
Но ИМХО DeMonsterDebugger просто класс!
UFO just landed and posted this here
UFO just landed and posted this here
Даже не знаю, что вам посоветовать, но, уверен, проблему можно решить на форумах.
Отлично, один идиот написал, теперь другие подхватили. И главное кто. Сами же флэш разработчики. Теперь каждая школота может по туториалу «зайти в» вашу же флэшку. Все, кому надо, про эту фишку уже знали давно.

Если совсем чуток пораскинуть мозгами, данный прикол убивает на корню кучу способов защиты флэша от взлома.
Это Жан-Филип идиот? Хм, у вас большое самомнение.

Если вы не заинтресованны как флеш разработчик в улучшении Flash плеера, это ваши проблемы. Я указал на этот баг, чтобы разработчики знали, о том что так возможно сделать с их приложением. А если замалчивать, типа проблемы нет?

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

Что-то особой защиты в Desteny я не нашел
От декомпиляции ничего не может защитить. Все защиты строятся на том, чтобы сделать этот процесс труднее. 97% взломщиков — 13летние пацаны, которые хотят себе сделать больше рейтинга в ферме во вконтакте. Нашел баг — хорошо. Напишите Адоби. Зачем писать туториал как его использовать?

Знающий народ и так взломает все что угодно, а мелкота останавливается уже на [embed] swf внутри другой swf. Или вы оба полагаете, что это супер открытие будет использовано в основном во благо? Ну да, создатели атомной бомбы тоже так думали.

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

К Дестини я не имею прямого отношения
Ага, класс. Пока эта фича не будет пофикшена (насколько я знаю Жан-Филип отписал до публикации о данной проблеме в Adobe), я буду сидеть и гадать, каким макаром умудряются в моём приложении данные изменять.

Да, буду сидеть и думать. Чего желаю и остальным flash разработчикам, дабы решить эту проблему. А не замалчивать, и рассказывать о ней только среди своей тусовки, надеясь на то что никто об этом не узнает.
то, что у вас запасной ключ от двери под ковриком, вы тоже всем рассказываете?
Нет, я думаю прежде чем решить куда класть ключ. И понимаю что если положу под коврик, его обязательно кто-нибудь найдет и ограбит меня. А прятать там его, и надеяться о том что никто не найдет — это глупо.
Поставил De MonsterDebugger, создал mm.cfg, положил Injector куда надо.
Тут увидел, что у меня релиз версия, тогда скачал здесь анинсталлер, скачал дебаг версию и поставил ее, повторная проверка показала, что у меня Content Debugger Plugin Player.
Запускаю De MonsterDebugger, иду на youtube — никакого результата в отладчике, пустой экран как был так и остался. Что я делаю не так?
Если что, Windows 7 64 бита, Chrome 5.0.322.2.
Поставил WIN 10,0,42,34 — не помогло.
Я не понимаю в чем угроза, все что я загрузил на свой компьютер  —я могу как хочу модифицировать, хоть с отладчиком, хоть без, разве нет?
А вообще, по мне, так это нормальная и естественная фича для отладки и никакой не баг.
На Олимпиаде продолжают умирать спортсмены!
Собчак будет работать продавщицей.
Скандал: травокур Хиддинк опозорил Россию.
Народная артистка России попала в больницу прямо со сцены.

Мега баг во Flash плеере bit.ly/b1xXWm // У автора в твиттере

Судя по вашим статьям, более чем ясно, что их целью является вовсе не полезная и объективная информация, а банальная попытка очернить флеш.

Ну и на последок, ни один программист не будет так яро указывать на недостатки языка, на котором сам программирует (как вы утверждаете). Логично начать использовать другие языки (тогда бы ваши мотивы были ясны). Это как дать грабителям наводку на банк, в котором хранятся твои деньги, или пилить сук на ктором сидишь.
Ну и на последок, ни один программист не будет так яро указывать на недостатки языка, на котором сам программирует (как вы утверждаете).

Конечно, он будет замалчивать, говорить что все хорошо и все отлично. Я пишу об этом не потому, что хочу очернить технологию, а потому что хочу чтобы другие разработчики знали об этом. И если у них в коде есть важные данные, они были вынесены из кода в серверную часть. Предупрежден — значит вооружен.
Я неправильно выразился насчет «указывать на недостатки» (это как раз хорошо). Имелось ввиду клеветать продукт, чем вы очевидно, занимаетесь.

Предупрежден насчет чего? Насчет просмотра данных любого флеш ролика? Так это я и без вас мог сделать. Вообще сделать это можно с любой клиент-серверной технологией, за исключением специализированных защищенных приложений (к коим флеш изначально не относится).
А в чем заключается клевета? Предупрежден насчет возможности code injection любым посторонним человеком.

Если вы могли до этого сделать code injection незаметно для целевого приложения, может стоит поделиться им на баг трекере адоба? Просмотр передаваемых данных и декомпиляция были возможны и раньше. Но от первого спасало https а от второго обфускация, а вот code injection всегда воспринималась как баг и достаточно серьезный.

Я так и не могу понять почему почти каждый flash разработчик воспринял этот пост, так как будто я ему в тапки нассал? Или вы считаете, что если никто не будет об этом знать ваше приложение в безопасности? Как наивно.
Code injection в нашем случае = просмотр внутренних данных, не более. Хотя звучит громко конечно.

Почему так восприняли? А вы перечитайте предыдущую свою статью. Я однозначно там указал на необъективность статьи, на фактически лживые утверждения (насчет размеров в частности). А теперь гляньте на эту: Мега баг во флеше! Понятно что ни о какой объективности речь не идет. Разумеется это злит.
Code injection в нашем случае = просмотр внутренних данных, не более.


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

ОМГ! Целых 2 поста, в одном из которых я постарался отделить проблемы флеша, от проблем разработчиков, и объяснить этро далеким от разработки людям, а во втором рассказал о проблеме которая очень сильно бьет по сохранности данных внутри flash приложения. Для меня и моих проектов это реально «мега баг». Не верите мне спросите valyard
Если для вас это «Мега баг», то узнав о существовании sothink, вам в пору бы свернуть все свои проекты на флеш.

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

И мне не совсем понятно при чем здесь valyard?
Вы даже не понимаете о чем речь. Про sothink я знаю давно, еще со 2 версии.

И мне не совсем понятно при чем здесь valyard?


Потому что он понимает в чем опасность данной проблемы.
Я вас прошу, не делайте хорошую мину при плохой игре. Флеш ролик с этим «багом» ничуть не опаснее, чем флеш ролик без него. Другими словами, нет ничего, что нельзя было-бы сделать без этого так называемого бага.

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

Вы не можете загрузить один swf файл в другой находящийся в другом домене, без crossdomain.xml, и получить ссылку на объект первого с его ApplicationDomain и stage. Если вы это можете, я уже попросил вас продемонстрировать или хотя бы рассказать как это можно сделать.
Нужно быть совсем наивным и малоопытным разработчиком, чтобы рассчитывать на закрытость данных во флеш ролике.

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

Проблема не в том что можно что-то просмотреть или изменить, а легкость этого. Не нужно ничего менять в памяти или декомпилировать, не нужно знать как устроен байткод flash плеера. Достаточно базово знать AS3 и иметь нехитрый набор стандартных программ. Если раньше злоумышленнику пришлось декомпилировать и достаточно большое количество времени восстанавливать код до работоспособного, то используя данный метод, это делается в разы быстрее.
Для начала — я нигде не утверждал, что раньше можно было загрузить ролик внутрь ролика в обход политики. Это лишь средство и само по себе — бессмысленно.

>«Не нужно ничего менять в памяти...»
А где, извините, менять? Не на сервере-же.

>«Если раньше злоумышленнику пришлось декомпилировать и достаточно большое количество времени восстанавливать код...»
Декомпиляция и дебаггинг, разные понятия.

>«нехитрый набор стандартных программ.»
Да уж, стандартных. Прям в комплекте с ОС идут в разделе Пуск > Стандартные.

Страшилка для начинающих и будущих разработчиков. Как-же, доступ к данным! Не может быть, ахтунг! У некоторых вообще истерика… аххх, а я верил, как-же так. Вижу только баги в головах и отсутсвие понимания того, что на СВОЕЙ машине можно получить доступ к любым данным.
Ваше время делать хорошую мину?
Для начала — я нигде не утверждал, что раньше можно было загрузить ролик внутрь ролика в обход политики.

Вы в предыдущем комментарии сказали «Другими словами, нет ничего, что нельзя было-бы сделать без этого так называемого бага.» Я вам ответил, что этим багом можно получить. О чем вы сейчас говорите?
Декомпиляция и дебаггинг, разные понятия.

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

Евгений Ваганович?
Как-же, доступ к данным!

Из документации адоба: «Each preloaded agent SWF file has its own security domain and runs in a distinct security sandbox from the main SWF file being profiled.»

За весь этот тред вы не ответили по существу не на один вопрос, и большинство ваших ИМХО и догадок не имеют ничего общего с действительностью. Если вы можете другим путем, не внося изменения в исходный файл получить из него данные НАПИШИТЕ как это можно сделать. А разводить треды из разряда, «я вообще могу чё угодно декомпильнуть и хакнуть», это из разряда понтов 14 летних кулхацкеров.
Маразм крепчал.

по поводу вопроса, как получить данные, ПИШУ:
Diamond Memory Scanner;
DetectiveStory;
ArtMoney.

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

В любом случае, поскольку в числе ваших аргументов фигурируют 14-летние кулхацкеры и Евгении Вагановичи, считаю дальнейший спор с вами, подобным борьбе с боровом в грязи, где борову, очевидно, более комфортно.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Гляньте коммент ниже, вероятнее всего из-за этого.
UFO just landed and posted this here
Целый час мучался с этой ерундой:)) Давно такого не испытывал «программистского» чувства ковыряния ;) Спасибо за эмоции! Так ничего и не заработало!
Сделал. Все равно, кнопка в контекстном меню Отладчик не активна, серая, а дебаггер вообще не реагирует. Для полноты картины:

Win7 32bit RC; Firefox 3.5.7; WIN 10,0,45,2 Debug Yes; MonsterDebugger 2.5.2;

файл лежит D:\Injector.swf; создал файл в C:\Пользователи\New\mm.cfg: PreloadSWF=D:/Injector.swf

вот. Просто интересно было поотлаживать флешки как в firebug'е, так что особой необходимости нет!
Странно. Кнопка так и должна быть неактивной, она для дебагера во Flash IDE, и там нужно ставить специальную галочку, чтоб этот пункт был доступен.

У меня точно такая же конфигурация, за исключением что Win7 64. Попробуйте вместо Injector.swf использовать вот этот файл. После запуска любой флешки, у ней должна появиться сверху плашка с профайлером.
В общем, разобрался! В моем случае надо mm.cfg кидать не в C:\Users\{username}, а в C:\Users\AllUsers\
подозреваю, что у тех, у кого не заработало, причиной было следующее: в трейс вываливается ошибка
PreloadSwf paths must be local trusted: C:\......\Injector.swf
Да, я об этом не подумал. Спасибо.
Спасибо огромное за статью.
Пост очень мне помог в работе.
allComplete рассылается даже если для написания не использовался фреймворк Flex?
Ссылки на мертвы. Можете перезагрузить или выслать куда-нибудь? Интересует скомпилированный агент.
Автор уже более 2 лет не работает с Flash и столько же не работает в компании на ftp которого находились файлы.
Можете дать скомпилированную флешку Injector? У меня не компилируется — Packages cannot be nested. С флешем дело не имел (
К сожалению у меня её не осталось, плюс к тому же насколько я знаю (хотя могу ошибаться) с 11 версии Flash Player это всё не актуально.
Для сведения, всё это работает и актуально и на 14й год. Пользую периодически. Исходников статьи достаточно чтобы повторить трюк.
Sign up to leave a comment.

Articles