HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ИНФО > Статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 13.08.2012, 07:18
XAMEHA
Новичок
Регистрация: 15.05.2010
Сообщений: 0
С нами: 8417113

Репутация: 0
По умолчанию

Доброго времени суток всем, кто читает этот цикл статей. К моменту написания цикла будет состоять из 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()

{

var
highScores=this;

var
__reg3= newLoadVars();

var
__reg2=undefined;

if (
this.records==null)

{

this.finishedLoadingScoresAction=this.saveScore;

this.showLoadingMessage=true;

this.loadScores();

return
undefined;

}

else

{

__reg2=0;

while (
__reg2[COLOR="#007700"]
 
Ответить с цитированием

  #2  
Старый 13.08.2012, 07:21
XAMEHA
Новичок
Регистрация: 15.05.2010
Сообщений: 0
С нами: 8417113

Репутация: 0
По умолчанию



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

Перейдём от теории покера к самой игре.





Среднестатистическая партия в покер на костях.

Запускаем FlashFireBug:

Спешу вас обрадовать - интерфейс у плагина довольно простой и удобный, в главном разделе окна вы можете путешествовать по дереву элементов интерфейсов и редактировать параметры отдельных элементов, хотя не так хорошо, как это реализовано в De Monster Debugger. Иметься возможность выбора элемента щелчком мыши по нему. На сайте разработчика можно купить Pro версию.

Как видим, мы можем изменять любой элемент интерфейса, в том числе и его параметры. Нас интересует элемент SmallCup, кнопка при нажатии на которую происходит бросок оставленных костей, а точнее её Bool свойство visible, отвечающие за видимость.

А что если на сервере не проверяется кол-во бросков? Надо бы проверить, - бросаем кости 3 раза, вновь активируем кнопку и нажимаем на неё. И действительно, серверная часть не проверяет количество — теперь мы можем бросать кости неограниченное число раз, и выбрасывать любую нужную комбинацию. Теперь всегда можно набирать 295 очков, оставив далеко позади любого честного человека.

А что, если игрок играющий против нас, каким то способом наберёт 295очков, а вы — меньше, так как время на бросок ограничено, а нужные кости могут и не выпасть. А если он наберёт больше 295 очков? Невозможно, скажите вы? Для нас нет ничего невозможного

В большинстве игр работает очень простой способ проверки поступающих вам данных. Перед их получением вы отключаете сетевое соединение, и пытаетесь их получить. Если они пришли, значит они формируются на вашей стороне, или изначально там хранятся. Пробуем... Перед броском костей выполняем:

Код:
sudo ifconfig eth0 down
Бросаем... Значения костей выпадают(Как и при повторном броске), - значит нам нужно всего лишь их подменить, а заодно проверить возможность хранения кости числа больше 6.

В файлеdice-r1.swf, найденном черезCharles храниться любезно предоставленный разработчиками класс dice и package diceClasses где скорее всего находиться основная часть кода работы с костями, а именно:

Функция проверки на комбинацию:

[PHP]
[COLOR="#000000"]public static functiongetAvailableCombos(arg1:Array,arg2:Array):Array

{

var
loc2:*;

loc2=null;

var
loc3:*;

loc3=0;

var
loc4:*;

loc4=false;

var
loc5:*;

loc5=null;

var
loc6:*;

loc6=0;

var
loc1:*;

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"]
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.