При создании Флеш-игры нужно уделить внимание ее защите. Защита подразумевает под собой три направления:
1. Защита от копирования (сайт-лок, невозможность разместить работоспособную игру на другом домене).
2. Защита от iframe (удаленно загружать страницу с SWF на другом домене).
3. Защита от реинжиниринга (защита кода и ресурсов).
Защита от копирования файла строится так:
1. В первом кадре, в самом начале идет проверка на текущий хост - если он не совпадает с тем, что прописан в коде, то показывается экран с предупреждением, переход на целевой УРЛ или что-нибудь на усмотрение разработчика игры.
2. Если текущий хост и прописанный в коде хост совпадают, то код выполняется дальше.
Как сделать сайт-лок:
1. Открываем код первого кадра и пишем ему после stop(); в самом верху такой код:
// Получаем текущий хост
domain = _root._url.split("http://").join("").split("/")[0];;
// Проверяем, если домен не наш, то выводим варнинг
if ((domain != "idgames.ru") and (domain != "www.idgames.ru")) {
_root.gotoAndPlay("warning");
}
Можно добавить ниже if {} строку: else _root.gotoAndPlay("menu"); - если нужно перекидывать юзера сразу на какую-то целевую страницу. Если без else, то выполняется первый кадр.
2. Создаем новый кадр, называем его warning, там размещаем предупреждение или что хотите.
Пример флеш-приложения с работающим сайт-локом: http://idgames.ru/test/copyright.html или так: http://www.idgames.ru/test/copyright.html
Если же эту флешку запустить с другого домена, например отсюда: http://thebtc.ru/site-lock-game/copyright.html, то выходит кадр с варнингом и игра не будет работать.
3. Можно дополнительно в этом же или новом окне открывать целевую страницу, пример тут: http://thebtc.ru/site-lock-game/copyright_with_url.html
Делается это так - в if { } перед строкой перехода на кадр warning вставляется строка:
getURL("http://_целевой_УРЛ_/", "_blank");
Идем дальше - умный плагиатор может не копировать файл, а разместить код игры во фрейме. Если Вы защитите игру, то она не будет функционировать на чужом хосте, но плагиатор может вставить страницу с игрой во фрейме и показывать только саму игру, пример: http://thebtc.ru/site-lock-game/in_iframe_flash.html.
Как видите, игра "играет" и не выдает варнингов и открытия новых окон.
От таких хитрожопых есть защита - запретить показ флешки в iframe.
Как запретить показ Флеш-игры во фрейме:
Добавляем этот код в html-файл с игрой:
<script language="JavaScript">
var frameBusted = (top != self);
if (frameBusted) top.location.href = '/index.html';
</script>
Смотрим пример: http://thebtc.ru/site-lock-game/in_frame_flash_2.html. Пытаясь загрузить Флеш-игру в iframe, JS-код определяет, что это фрейм и открывает исходную страницу (нашу, где размещена игра).
Хитрожопые могут попытаться тянуть контент страницы через cURL, но и там их ждет облом - даже если страница будет пересобрана заново, флешка-то тянется с нашего сервера, а там стоит проверка по текущему хосту.
Идем дальше, к третьему направлению защит. Дело в том, что защитить свою Флеш-игру от реверсивного инжиниринга на 100% невозможно. Что можно скомпилить, то можно и декомпилить.
Направления защиты от реверсивного инжиниринга делятся на:
1. Обфускаторы и протекторы.
2. Динамическая генерация кода.
3. Упаковка в embed, защита от сохранения SWF-файла из памяти и другие способы.
Подробно и обстоятельно об этих способах написано на Хабре, здесь: http://habrahabr.ru/post/110686/
Там же есть ссылки на платные обфускаторы, которые могут сделать код очень сложно реверсируемым (петли для дебаггеров, переопределение классов, подмена ресурсов и т.д.), но они платные. Я еще не знаю нормального бесплатного обфускатора, хорошие обфускаторы платные. Также есть триалки, но они ставят свои ватермарки или имеют ограничение по размеру файла.
Подводя итог:
Обязательно стоит добавлять в свою Флеш-игру сайт-лок, если Вы планируете размещать ее только на определенных сайтах (у себя, на NewGrounds, Kongregate, FGL и т.д.). Ну а если стоит задача распространить игру как можно шире, например, монетизируя ее рекламой, можно создавать версии без сайт-лока, чтобы любой сайт, портал или пользователь могли ее скопировать и публиковать на других ресурсах.
1. Защита от копирования (сайт-лок, невозможность разместить работоспособную игру на другом домене).
2. Защита от iframe (удаленно загружать страницу с SWF на другом домене).
3. Защита от реинжиниринга (защита кода и ресурсов).
Защита от копирования файла строится так:
1. В первом кадре, в самом начале идет проверка на текущий хост - если он не совпадает с тем, что прописан в коде, то показывается экран с предупреждением, переход на целевой УРЛ или что-нибудь на усмотрение разработчика игры.
2. Если текущий хост и прописанный в коде хост совпадают, то код выполняется дальше.
Как сделать сайт-лок:
1. Открываем код первого кадра и пишем ему после stop(); в самом верху такой код:
// Получаем текущий хост
domain = _root._url.split("http://").join("").split("/")[0];;
// Проверяем, если домен не наш, то выводим варнинг
if ((domain != "idgames.ru") and (domain != "www.idgames.ru")) {
_root.gotoAndPlay("warning");
}
Можно добавить ниже if {} строку: else _root.gotoAndPlay("menu"); - если нужно перекидывать юзера сразу на какую-то целевую страницу. Если без else, то выполняется первый кадр.
2. Создаем новый кадр, называем его warning, там размещаем предупреждение или что хотите.
Пример флеш-приложения с работающим сайт-локом: http://idgames.ru/test/copyright.html или так: http://www.idgames.ru/test/copyright.html
Если же эту флешку запустить с другого домена, например отсюда: http://thebtc.ru/site-lock-game/copyright.html, то выходит кадр с варнингом и игра не будет работать.
3. Можно дополнительно в этом же или новом окне открывать целевую страницу, пример тут: http://thebtc.ru/site-lock-game/copyright_with_url.html
Делается это так - в if { } перед строкой перехода на кадр warning вставляется строка:
getURL("http://_целевой_УРЛ_/", "_blank");
Идем дальше - умный плагиатор может не копировать файл, а разместить код игры во фрейме. Если Вы защитите игру, то она не будет функционировать на чужом хосте, но плагиатор может вставить страницу с игрой во фрейме и показывать только саму игру, пример: http://thebtc.ru/site-lock-game/in_iframe_flash.html.
Как видите, игра "играет" и не выдает варнингов и открытия новых окон.
От таких хитрожопых есть защита - запретить показ флешки в iframe.
Как запретить показ Флеш-игры во фрейме:
Добавляем этот код в html-файл с игрой:
<script language="JavaScript">
var frameBusted = (top != self);
if (frameBusted) top.location.href = '/index.html';
</script>
Смотрим пример: http://thebtc.ru/site-lock-game/in_frame_flash_2.html. Пытаясь загрузить Флеш-игру в iframe, JS-код определяет, что это фрейм и открывает исходную страницу (нашу, где размещена игра).
Хитрожопые могут попытаться тянуть контент страницы через cURL, но и там их ждет облом - даже если страница будет пересобрана заново, флешка-то тянется с нашего сервера, а там стоит проверка по текущему хосту.
Идем дальше, к третьему направлению защит. Дело в том, что защитить свою Флеш-игру от реверсивного инжиниринга на 100% невозможно. Что можно скомпилить, то можно и декомпилить.
Направления защиты от реверсивного инжиниринга делятся на:
1. Обфускаторы и протекторы.
2. Динамическая генерация кода.
3. Упаковка в embed, защита от сохранения SWF-файла из памяти и другие способы.
Подробно и обстоятельно об этих способах написано на Хабре, здесь: http://habrahabr.ru/post/110686/
Там же есть ссылки на платные обфускаторы, которые могут сделать код очень сложно реверсируемым (петли для дебаггеров, переопределение классов, подмена ресурсов и т.д.), но они платные. Я еще не знаю нормального бесплатного обфускатора, хорошие обфускаторы платные. Также есть триалки, но они ставят свои ватермарки или имеют ограничение по размеру файла.
Подводя итог:
Обязательно стоит добавлять в свою Флеш-игру сайт-лок, если Вы планируете размещать ее только на определенных сайтах (у себя, на NewGrounds, Kongregate, FGL и т.д.). Ну а если стоит задача распространить игру как можно шире, например, монетизируя ее рекламой, можно создавать версии без сайт-лока, чтобы любой сайт, портал или пользователь могли ее скопировать и публиковать на других ресурсах.
Комментариев нет:
Отправить комментарий