![]() |
Доброго времени суток всем, кто читает этот цикл статей. К моменту написания цикла будет состоять из 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. Классификация уязвимостей Перейдем собственно к уязвимостям:
Список составлен приблизительно и в будующем будет пополняться. 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 код:
Рассмотрим пример, найденный специально для этой статьи, демонстрирующий полезные возможности Charles. Сайт http://flashplayer.ru/ , - специализируется на публиковании Flash-игр, при этом зачастую у игр бывает рейтинг лист(High Score) на сайте разработчика(Почти у всех игр). Одну из таких игр, в которой используется «Защита разработанная автором» мы сейчас рассмотрим. Gold fishing ,- http://flashplayer.ru/play_6988.php . Открываем, играем, ждём момента когда нас попросят ввести ник для записи очков(После проигрыша), вводим, смотрим LOG Charles: http://s010.radikal.ru/i312/1208/45/555ebfc096e3.png http://s49.radikal.ru/i126/1208/3b/23e135a42514.png PHP код:
Значит всё же придётся декомпилировать. Скачиваем(http://flashplayer.ru/games/flash/6988_92442.swf), открываем в Asdec. Как видим, игра написана на AS2: Немного покопавшись в коде, находим следующее(Использовалось сразу несколько декомпиляторов): PHP код:
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"] |
VI. BODY 2 А сейчас я хотел бы опять перейти к неприступным играм на mail.ru, о которых в дальнейшем будет сказано ещё очень много и рассказать о назначении плагина FlashFireBug, предназначенного для AS3, который мы так же будем часто использовать. Игра «Покер на костях». Покер на костях — азартная игра в кости. В неё могут играть от двух человек и более, оптимальное число игроков*— четыре. Для игры используют 5 шестигранных кубиков с числовыми достоинствами от 1 до 6. Все кости выбрасываются одновременно. Цель игры*— набирать очки за выполнение определённых комбинаций. В варианте приведённом на mail.ru бросать кости можно три раза, при этом часть костей можно сохранять, и иметься возможность играть в блиц. Конечно в этой игре многое зависит от вероятности, однако игра есть игра, и нам нужно найти способ в неё выигрывать. Следуя теории вероятности, шанс сохранить к концу раунда 5 костей одного достоинства при 3 бросках значительно меньше чем при >3 бросках, а если мы сможем манипулировать выпадающими значением(1-6), мы будем выигрывать всегда, за исключением случая возникновения аналогичного нечестного игрока, который возможно сможет набрать кол-во очков, превосходящее возможное, а именно число (1 * 5) + (2 * 5) + (3 * 5) + (4 * 5) + (5 * 5) + (6 * 5) + (6 * 5) + (6 * 5) + (6 * 5) + 50 + 20 + 30 = 295 Перейдём от теории покера к самой игре. http://s019.radikal.ru/i626/1208/1d/3a24053913f7.jpg Среднестатистическая партия в покер на костях. Запускаем FlashFireBug: Спешу вас обрадовать - интерфейс у плагина довольно простой и удобный, в главном разделе окна вы можете путешествовать по дереву элементов интерфейсов и редактировать параметры отдельных элементов, хотя не так хорошо, как это реализовано в De Monster Debugger. Иметься возможность выбора элемента щелчком мыши по нему. На сайте разработчика можно купить Pro версию. Как видим, мы можем изменять любой элемент интерфейса, в том числе и его параметры. Нас интересует элемент SmallCup, кнопка при нажатии на которую происходит бросок оставленных костей, а точнее её Bool свойство visible, отвечающие за видимость. А что если на сервере не проверяется кол-во бросков? Надо бы проверить, - бросаем кости 3 раза, вновь активируем кнопку и нажимаем на неё. И действительно, серверная часть не проверяет количество — теперь мы можем бросать кости неограниченное число раз, и выбрасывать любую нужную комбинацию. Теперь всегда можно набирать 295 очков, оставив далеко позади любого честного человека. А что, если игрок играющий против нас, каким то способом наберёт 295очков, а вы — меньше, так как время на бросок ограничено, а нужные кости могут и не выпасть. А если он наберёт больше 295 очков? Невозможно, скажите вы? Для нас нет ничего невозможного В большинстве игр работает очень простой способ проверки поступающих вам данных. Перед их получением вы отключаете сетевое соединение, и пытаетесь их получить. Если они пришли, значит они формируются на вашей стороне, или изначально там хранятся. Пробуем... Перед броском костей выполняем: Код:
sudo ifconfig eth0 downВ файлеdice-r1.swf, найденном черезCharles храниться любезно предоставленный разработчиками класс dice и package diceClasses где скорее всего находиться основная часть кода работы с костями, а именно: Функция проверки на комбинацию: [PHP] [COLOR="#000000"]public static functiongetAvailableCombos(arg1:Array,arg2:Array):Array { varloc2:*; loc2=null; varloc3:*; loc3=0; varloc4:*; loc4=false; varloc5:*; loc5=null; varloc6:*; loc6=0; varloc1:*; loc1= new Array(12); diceClasses.rules.Rules.enNullArray(loc1); loc3=0; while (loc3=4) { loc4=true; br eak; } ++loc3; } loc1[6] =loc4?loc2.count* (loc3+1) +loc2.restSum:0; } if (arg2[7] == -1) { loc4=false; loc3=0; while (loc3[COLOR="#007700"] |
| Время: 15:53 |