Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.06.2012, 16:21
wapmaster вне форума Посмотреть профиль Отправить личное сообщение для wapmaster Найти все сообщения от wapmaster
  № 1  
Ответить с цитированием
wapmaster

Регистрация: Oct 2011
Сообщений: 21
Arrow Защита контента

Здравствуйте!
Меня интересует вопрос защиты swf фала содержащего графику.
Например у меня есть приложение (игра) которая выкачивает swf содержащую графику. Используя фаербаг или чарлес можно без труда узнать адрес этой самой swf, скачать ее по этому адресу и вытянуть графику.
У кого какие соображения есть по поводу защиты?

В данном случае интересует защита именно то воровства графики, анимации, звуков и подобному контенту.

Старый 22.06.2012, 16:28
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Такая защита невозможна.
__________________
Идите первым!

Старый 22.06.2012, 17:00
wapmaster вне форума Посмотреть профиль Отправить личное сообщение для wapmaster Найти все сообщения от wapmaster
  № 3  
Ответить с цитированием
wapmaster

Регистрация: Oct 2011
Сообщений: 21
В статье на хабр нашел общую идею которая мне понравилась

И так, идея заключается в том, что бы грузить с сервера не swf файлы, а некие бинарники.
1) пишем програмулину которая будет переводить скомпиленый swf в бинарник и по ходу "портить" его. Например менять некоторые байты местами, или же заменять скажем на "0" (в данном случае нужно где-то запоминать позицию которую изменили и значение).
2) компилим swf файлы с графикой и скармливаем его програмулине о которой писал выше.
3) загружаем этот бинарник. Восстанавливаем байты как было до изменения (либо меняем местами обратно, либо меняем значения на те которые и были)
4) получаем графику и радуемся.

попробовал набросать на коленке такую схему. оказывается получилось
декомпилятор (Sothink SWF Decompiler) сказал что файл поврежден. В проекте если не восстанавливать байты в первоначальный вид тоже не получилось с бинарником работать (естественно). А вот после восстановления все прекрасно работает, графика и музыка прекрасно достается из файла. А если применять к коду обфускатор что бы не было на много сложнее понять что происходит и как восстанавливается файл то как по мне это неплохой вариант, тем более что алгоритмов "ломания" и восстановления swf довольно можно придумать.

Ниже приведен код класса восстанавливаюшего файл (код написан на коленке, так что не ругаться на него ):
Код AS3:
package  
{
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.utils.ByteArray;
	/**
	 * ...
	 * @author rocket
	 */
	public class BrokenLoader extends Sprite
	{
		private var _oldBytes:Array = [67, 87, 83, 15, 251, 170, 22, 0, 120, 156, 236, 187, 119, 84, 83, 223, 186, 239, 189, 82]; //байты которые нужно восстановить
		private var _loader:URLLoader;
		private var _bl:Loader;
		private var _oldArray:ByteArray;
 
		public function BrokenLoader() 
		{
                       // так как Loader не может загрузить бинарник, грузим его URLLoader
			_loader = new URLLoader();
			_loader.dataFormat = URLLoaderDataFormat.BINARY;
			_loader.addEventListener(Event.COMPLETE, onLoadingComplete);
			_loader.load(new URLRequest("asd.bin"));
 
			_bl = new Loader();
			_bl.contentLoaderInfo.addEventListener(Event.COMPLETE, onFileRestore);
		}
 
		private function onLoadingComplete(e:Event):void 
		{
                        // после загрузки файла берем полученный ByteArray
			_oldArray = e.target.data;
 
                        //  восстанавливаем необходимые байты
			for (var i:int = 0; i < _oldBytes.length; i++)
			{
				_oldArray[i] = _oldBytes[i];
			}
 
                       // скармливаем ByteArray лоадеру
			_bl.loadBytes(_oldArray);
		}
 
		private function onFileRestore(e:Event):void 
		{
                        // лоадер получил ByteArray и теперь мы можем работать с ним как с обычной swf
			trace(e.target.content); // [object MainTimeline]
			trace(_bl.contentLoaderInfo.applicationDomain.hasDefinition("Background")); // true
			addChild(new (_bl.contentLoaderInfo.applicationDomain.getDefinition("Background") as Class) as MovieClip); //добавляется мувиклип из swf
		}
 
	}
 
}
По сути получается довольно просто.
Но мне кажется что лучше по какому-то алгоритму менять байты внутри бинарника что бы не запоминать какие именно значения нужно присвоить на какие места, а просто при восстановлении перетасовать в нужном порядке

Добавлено через 68 часов 48 минут
Хотелось бы прочитать отзывы кто что думает по поводу такого способа защиты

Старый 27.06.2012, 12:42
mickfallout вне форума Посмотреть профиль Отправить личное сообщение для mickfallout Найти все сообщения от mickfallout
  № 4  
Ответить с цитированием
mickfallout
 
Аватар для mickfallout

Регистрация: Jun 2009
Адрес: Москва
Сообщений: 170
Цитата:
Сообщение от wapmaster Посмотреть сообщение
Хотелось бы прочитать отзывы кто что думает по поводу такого способа защиты
Он не слишком надежен, но для простых случаев сойдет. При желании думаю не слишком сложно вытащить графику из оперативной памяти, там-то она хранится расшифрованной.
__________________
Могу ошибаться... =)

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:44.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.