Доброго времени суток всем, кто читает этот цикл статей. К моменту написания цикла будет состоять из IV частей, ну и собственно это его первая часть. В ней я хотел бы вас познакомить с основами Flash технологии, методами создания Flash приложений, исследования, типичных ошибках создания приложения с обоих сторон(Клиентская и серверная), и познакомить с простыми примерами использования приложения в целях, непредусмотренный разработчикам.
Для работы мы будем использовать кроссплатформенное ПО, так что вы можете повторить всё(Конечно же только на localhost, и на своими Flash приложениями) под системами Windows, Linux(В частности и *nix), и в большинстве случаев даже под MacOS X.
I. Технология Flash
Adobe Flash (ранее
Macromedia Flash), далее просто
Flash — мультимедийная платформа компании Adobe для создания веб-приложений или мультимедийных презентаций. Широко используется для создания рекламных баннеров, анимации, игр, а также воспроизведения на веб-страницах видео- и аудиозаписей.

Я думаю вы знаете, что технология
Flash обычно располагается на клиентской части, подобно JavaScript в виде частично скомпилированных
SWF
файлов(Расширение может быть изменено). Как я думаю, вы уже знаете, всё, что находиться на клиентской части может быть прочитано, изменено(Или заменено полностью), модифицировано и использовано в совершенно других целях, без ведома серверной части, и
Flash этому не исключение; однако часть
Flash разработчиков не имеет представления о вторжении в
Flash, изменении кода, интерфейса, перехвата данных и это тоже следует учитывать.
Также далее в тесте будет употребляться термин «
Правильные Flash приложения» ,- под ними будут подразумеваться Flash приложения, действия реверсинга с которыми которые не будет иметь никого смысла, за исключением изучения исходного кода для самообучения создания подобных приложений.
II. Используемое ПО
Браузер:
Mozilla Firefox, - http://www.mozilla.org/ru/firefox/new/
Требуемые дополнения: NoScript, NoFlash, FireBug, FlashFireBug, Greasmonkey.
Flash:
Debug версия Adobe Flash: http://www.adobe.com/support/flashplayer/downloads.html
Сниффер:
Wireshark,- http://www.wireshark.org/
tcpdump,- http://ru.wikipedia.org/wiki/Tcpdump
JRE or JDK from Oracle , Adobe AIR:
http://java.com/ru/download/index.jsp
http://get.adobe.com/ru/air/
HTTP Анализатор:
Charles,- http://www.charlesproxy.com/
Декомпилятор:
Asdec,- http://code.google.com/p/asdec/
Отладчик:
De Monster Debugger,-http://demonsterdebugger.com/downloads
Версия 3.0 совместима с последней версией
AIR for Linux.
Adobe Flex(328 МБ):
http://www.adobe.com/devnet/flex/flex-sdk-download-all.html
Так-же нам понадобиться любой текстовый редактор с подсветкой синтаксиса,
HEX-редактор. В случаи необходимости этот инструментарий будет расширяться.
III. Классификация уязвимостей
Перейдем собственно к уязвимостям:
- Уязвимости Flash платформы
- Уязвимости серверной части, связанные с недостаточной фильтрацией данных.
- Недостаточная проверка данных на серверной стороне.
- Возможность обмана серверной части посредством использования UDP протокола связи между Flash и сервером.
- Использование клиентской части для формирования данных, которые пользователь изменять ни в коем случае не должен.
- «Отсутствие» как таковой северной части, служащей ля обработки важных данных.
Список составлен приблизительно и в будующем будет пополняться.
IV. INTRO
1. В первой части цикла мы рассмотрим как таковые уязвимости и наиболее простые примеры.
2. Вторая часть будет примерно о этом же, но с более сложными примерами.
В этих двух частях будут рассказаны основные идеи, способы выполнения, ошибки.
3. В этой части будет рассказано о нестандартном использовании Flash.
4. Ну и эта самая сложная часть вам расскажет о секретах нелегального заработка с использованием различных систем онлайн казино. Сразу скажу, тут не будет приведено примеров реального заработка, однако объем информации будет очень большой, так что вы ход статьи на ближайшее время не планируется. Статья приводиться только для ознакомления и не может являться руководством к побуждению противоправных действий ни в коем случае.
В данном цикле не будет рассматриваться изменение переменных с помощью
ArtMoney и подобных программ, однако скажу, что это всё же возможно.
V. BODY 1
Как вы уже поняли, тут будут рассматриваться наиболее простые примеры, - для понимания общих технологий использования уязвимостей и базовой работе с ПО, с которым у вас могут возникнуть большие проблемы. Сразу говорю, - тут не будет приводиться руководство к установке ПО, настройке и использованию. Основная часть действий с ним требует предварительного ознакомления, что выходит за рамки этого цикла. Так же говорю, - большинство текущих уязвимостей на момент выхода будет закрыто, так что вам не надо пытаться повторить это. Ну что же, начнём...
Начать я планировал с рассказа о моей первой найденной уязвимости в
Flash, на mail.ru, опубликованной под видом «
Взлом mini.games.mail.ru BETA версия»(В настоящее время закрыта), и была растиражирована по всему интернету скрипткиддерами, и даже продавалась за деньги:
http://www.youtube.com/watch?v=XAK6-fj2Jzk
http://www.youtube.com/watch?v=pAyHxuLW3LU
http://pro-xaker.do.am/load/poleznye_materialy/internet/vzlom_mini_games_mail_ru_beta_versija/27-1-0-320
И т. д.
Сейчас я расскажу, как это всё было найдено работало.
С помощью
Charles был полностью проанализирован весь трафик
Flash приложения, После чего было выяснено, что
Flash по
HTTP протоколу запрашивал данные о цене различных бонусов к играм в формате
JSON, - эти данные были подменены, а т. к. серверная часть доверяла клиентской можно было их использовать бесплатно.
Изучение
Flash приложения начинается именно с этапа мониторинга всех его соединений с сетью интернет, по
HTTP,-
Сharles, по другим протоколам, -
Wireshark. Во время этого исследования выясняется в первую очередь, - что передаётся серверу, а что клиенту. Этого обычно хватает для общего представления о структуре приложения, однако при выполнении данного этапа следует учитыватть, что данные в передаваемом соединении могут быть зашифрованы.
С помощью
Charles можно видеть все обращения к скриптам, которые не отображаются на странице, к примеру с помощью него была найдена эта
XSS(Не закрыта):
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]http[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#FF8000"]/showthread.php?p=2988185#post2988185
[/COLOR][COLOR="#0000BB"]http[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#FF8000"]//ads.depositfiles.com/p.php?v=5678%27%29; alert%28%27xss%27%29; $.get%28%275678
[/COLOR][/COLOR]
так что эту программу следует всегда держать на компьютере.
Рассмотрим пример, найденный специально для этой статьи, демонстрирующий полезные возможности
Charles.
Сайт
http://flashplayer.ru/ , - специализируется на публиковании
Flash-игр, при этом зачастую у игр бывает рейтинг лист(
High Score) на сайте разработчика(Почти у всех игр). Одну из таких игр, в которой используется «
Защита разработанная автором» мы сейчас рассмотрим.
Gold fishing ,-
http://flashplayer.ru/play_6988.php .
Открываем, играем, ждём момента когда нас попросят ввести ник для записи очков(После проигрыша), вводим, смотрим
LOG Charles:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]POST[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]saveScore[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]aspx HTTP[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]1.1
Host[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]www[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]fupa[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]com
User[/COLOR][COLOR="#007700"]-[/COLOR][COLOR="#0000BB"]Agent[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]Mozilla[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]5.0[/COLOR][COLOR="#007700"]***
[/COLOR][COLOR="#0000BB"]Accept[/COLOR][COLOR="#007700"]:[/COLOR][COLOR="#0000BB"]text[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]html[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]application[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]xhtml[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#0000BB"]xml[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]application[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]xml[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]q[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]0.9[/COLOR][COLOR="#007700"],*[/COLOR][COLOR="#FF8000"]/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: ASPSESSIONIDQASRTCCT=GMPJIDFDFPGKKKIBFEENCGHJ; ASP.NET_SessionId=mmsramukt2k4muvbogqeft55
Referer: http://flashplayer.ru/games/flash/6988_92442.swf
Content-Type: application/x-www-form-urlencoded
Content-Length: 96
onLoad=%5Btype%20Function%5D&hash=226b9d8ff5b7ae9619d8a74823fb6649&score=5237&name=AlexR&id=3913
success=true
[/COLOR][/COLOR]
Как видим, количество очков и ник не шифруются, однако на сервер передаётся ещё какой то хэш, который должен сравниваться на серверной части по определённому алгоритму. Пытаемся переотправить запрос с нужным кол-вом очков(
L Mouse Click->Edit), получаем в ответе
success=false.
Значит всё же придётся декомпилировать. Скачиваем(
http://flashplayer.ru/games/flash/6988_92442.swf), открываем в
Asdec. Как видим, игра написана на AS2:
Немного покопавшись в коде, находим следующее(Использовалось сразу несколько декомпиляторов):
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#FF8000"]//Object.registerClass("HighScores",com.novelgames.flashgames.highscoresAS2.HighScores);
[/COLOR][COLOR="#0000BB"]Push[/COLOR][COLOR="#DD0000"]"com.novelgames.flashgames.highscoresAS2.HighScores"
[/COLOR][COLOR="#0000BB"]GetVariable
Push[/COLOR][COLOR="#DD0000"]"HighScores"[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#DD0000"]"Object"
[/COLOR][COLOR="#0000BB"]GetVariable
Push[/COLOR][COLOR="#DD0000"]"registerClass"
[/COLOR][COLOR="#0000BB"]CallMethod
Pop
[/COLOR][/COLOR]
Значит нам нужно искать код самого
com.novelgames.flashgames.highscoresAS2, который как ни странно находиться на самом видном месте и состоит из:
DoInitActionTag (153: __Packages.com.novelgames.flashgames.highscoresAS2 .Config)
DoInitActionTag (154: __Packages.com.novelgames.flashgames.highscoresAS2 .Record)
DoInitActionTag (155: __Packages.com.novelgames.flashgames.highscoresAS2 .MD5)
DoInitActionTag (80: __Packages.com.novelgames.flashgames.highscoresAS2 .HighScores)
Теперь у нас имеется 2 варианта: Внести необходимые изменения в P-Код, или Самому сгенерировать нужный хэш и отправить его на сервер. Мы пойдём вторым путём, хотя первый был немного проще. Иногда для генерации хэша при наличии исходных кодов будет удобнее переписать функцию на
JS, однако перепись на
PHP будет немного сложна, так как точность работы с малыми числами у
JS выше и придётся использовать библиотеку
BCMath, иначе результаты работы будут отличаться.
Функция сохранения очков, как ни странно называется
saveScore():
[PHP]
[COLOR="#000000"]
functionsaveScore()
{
varhighScores=this;
var__reg3= newLoadVars();
var__reg2=undefined;
if (this.records==null)
{
this.finishedLoadingScoresAction=this.saveScore;
this.showLoadingMessage=true;
this.loadScores();
returnundefined;
}
else
{
__reg2=0;
while (__reg2[COLOR="#007700"]