![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Oct 2011
Сообщений: 21
|
Здравствуйте!
Меня интересует вопрос защиты swf фала содержащего графику. Например у меня есть приложение (игра) которая выкачивает swf содержащую графику. Используя фаербаг или чарлес можно без труда узнать адрес этой самой swf, скачать ее по этому адресу и вытянуть графику. У кого какие соображения есть по поводу защиты? В данном случае интересует защита именно то воровства графики, анимации, звуков и подобному контенту. |
|
|||||
|
Модрон-ветеринар
|
Такая защита невозможна.
__________________
Идите первым! |
|
|||||
|
Регистрация: Oct 2011
Сообщений: 21
|
В статье на хабр нашел общую идею которая мне понравилась
![]() И так, идея заключается в том, что бы грузить с сервера не swf файлы, а некие бинарники. 1) пишем програмулину которая будет переводить скомпиленый swf в бинарник и по ходу "портить" его. Например менять некоторые байты местами, или же заменять скажем на "0" (в данном случае нужно где-то запоминать позицию которую изменили и значение). 2) компилим swf файлы с графикой и скармливаем его програмулине о которой писал выше. 3) загружаем этот бинарник. Восстанавливаем байты как было до изменения (либо меняем местами обратно, либо меняем значения на те которые и были) 4) получаем графику и радуемся. попробовал набросать на коленке такую схему. оказывается получилось ![]() декомпилятор (Sothink SWF Decompiler) сказал что файл поврежден. В проекте если не восстанавливать байты в первоначальный вид тоже не получилось с бинарником работать (естественно). А вот после восстановления все прекрасно работает, графика и музыка прекрасно достается из файла. А если применять к коду обфускатор что бы не было на много сложнее понять что происходит и как восстанавливается файл то как по мне это неплохой вариант, тем более что алгоритмов "ломания" и восстановления swf довольно можно придумать. Ниже приведен код класса восстанавливаюшего файл (код написан на коленке, так что не ругаться на него ):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 минут Хотелось бы прочитать отзывы кто что думает по поводу такого способа защиты ![]() |
|
|||||
|
Регистрация: Jun 2009
Адрес: Москва
Сообщений: 170
|
Он не слишком надежен, но для простых случаев сойдет. При желании думаю не слишком сложно вытащить графику из оперативной памяти, там-то она хранится расшифрованной.
__________________
Могу ошибаться... =) |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:28. |
|
|
« Предыдущая тема | Следующая тема » |
|
|