Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Зашифровать zip (http://www.flasher.ru/forum/showthread.php?t=215370)

Godwarlock 29.03.2018 20:17

Зашифровать zip
 
Всем привет. Попробовал библиотеку FZip для создания zip файла. Но теперь не могу догадаться, как зашифровать этот файл. Вернее сейчас файл открывается через обычный winrar, но я неоднократно видел, как у многих других людей, при попытке открыть файл выскакивает ошибка. Вот как бы сделать примерно также?
Код AS3:

var file:File = new File(File.applicationDirectory.resolvePath('resource.zip').nativePath);
                        var fs:FileStream = new FileStream();
                        fs.open(file, FileMode.WRITE);
                        zip.serialize(fs);
            fs.close();

Буду очень признателен если кто подаст идеи и примеры. Даже самый простой вариант меня устроит.

undefined 29.03.2018 21:40

есть же нативные средства

Godwarlock 29.03.2018 21:47

да я че то не вкуриваю что компрессить надо

undefined 29.03.2018 21:51

bytearray конечно же,куда предварительно надо поместить свои данные.

Добавлено через 4 минуты
upd:так я не вкурил проблема сжать или сжать и запаролить?

Godwarlock 29.03.2018 22:07

undefined byteArray получается только из файлов,которые закидываются в архив. Криптовать надо сам архив, а как это сделать - пока без понятия.
Код AS3:

public function load_complete(name:String, data:ByteArray):void
{
                        countLoaded++;
                        var resourceData:ByteArray = data;
                        zip.addFile(name, resourceData);
                        if (countLoaded >= max_count)
                        {
                                onUploadComplete();
                        }
}

Цитата:

upd:так я не вкурил проблема сжать или сжать и запаролить?
У меня на выходе получается zip файл. Он уже сжат по дефалту, больше сжимать его не надо. Нужно именно запаролить и не дать возможность открыть архив кому угодно через winrar и прочие подобные штуки. Пока у меня бесполезный крайний вариант, это сохранять не в .zip, а в .myFormat)) Тогда не многие догадаются, что это просто зип файл и его можно открыть винриком)

undefined 29.03.2018 23:09

на эту тему тут немало копий сломано.Если подитожить: лучше шифровать банальным ксором и ключ хранить в отдельной флэшке,заэмбеженной в основную.Код в конце прообфусцировать.
Для бинарных данных вполне подойдет.

Godwarlock 29.03.2018 23:22

undefined а ты сам пробовал такое сделать? Или у тебя все ресурсы в открытом виде лежат?

undefined 29.03.2018 23:31

Да, так и делаю. Только не ксором, а rc4-шифром и ключ хранится рядом с шифром. Защита скорее психологическая просто мы не можем распространять контент в "чистом" виде.

Добавлено через 2 минуты
Нужна надежность - храни все на сервере

Godwarlock 30.03.2018 02:28

Спасибо. Вроде получилось. Попробовал несколько типов шифрования и всё же остановился на rc4. Он самый быстрый оказался, некоторые по 2 минуты криптовали и декриптовали,а тут за 5 секунд и готово. Но вот на счет xor-а. Он лучше rc4? И еще вопрос. Как безпалева пароль хранить? Ты выше написал что в отдельной флешке, а как примерно это должно выглядеть?

caseyryan 30.03.2018 08:52

Цитата:

Нужна надежность - храни все на сервере
Вот этого не понял. В чем надежность?

undefined 30.03.2018 11:36

Цитата:

Он самый быстрый оказался, некоторые по 2 минуты криптовали и декриптовали,а тут за 5 секунд и готово.
ну на 20мб файле он всяко призадумается.Можно еще aes попробовать,он тоже достаточно резв.
Цитата:

Но вот на счет xor-а
ксор - самый простой,но зато самый быстрый тип шифрования.Все,что требуется сделать - это выполнить над каждым байтом логическую операцию xor.Цп хорошо заточен под такого рода задачи.По сути шифрование эквивалентно замене всех букв в сообщении на другие согласно таблице замен.Ключ однозначно задает эту таблицу.Приятный бонус - код дешифровщика совпадает с кодом шифровщика т.к.
(a xor b) xor b=a.Т.е. зашифровав сообщение 2 раза,получаем исходный текст.
Ксором лучше не шифровать тексты и файлы, о структуре которых имеется априорная инфа.
Цитата:

Как безпалева пароль хранить?
Быстрый ответ - хранить на сервере.Все твои попытки запрятать ключ где-то в дебрях разобьются о факт,что в флешке прямо в рантайме можно посмотреть значение переменной.
Цитата:

Ты выше написал что в отдельной флешке, а как примерно это должно выглядеть?
Кладешь флэшку с ключом рядом со своей и эмбедишь ее:
Код AS3:

[Embed(source="crypto.swf")]
private static const MyCrypto:Class;

и дальше инстанцируешь MyCrypto.Тут идея что деакомпилятор не будет декомпилить вшитые ресурсы
Цитата:

Вот этого не понял. В чем надежность?
В том,что у сервера гораздо больше возможностей проверить авторизован ли юзер для получения данных.

Godwarlock 30.03.2018 16:13

Цитата:

и дальше инстанцируешь MyCrypto.Тут идея что деакомпилятор не будет декомпилить вшитые ресурсы
Получается нет смысла все ресурсы, атласы графики например c xml, паковать отдельно и подгружать, когда можно просто заэмбедить?

undefined 30.03.2018 16:33

можно,но стартовать такая флэшка будет неоправдано долго.Плюс большой оверхед по памяти.Плюс чтоб подменить ресурс придется пересобирать все с нуля.

caseyryan 30.03.2018 20:30

Цитата:

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

можно,но стартовать такая флэшка будет неоправдано долго.Плюс большой оверхед по памяти.Плюс чтоб подменить ресурс придется пересобирать все с нуля.
Да у него с зашифрованным зип архивом она и так будет стартовать неоправданно долго) И все с тем же оверхедом по памяти

undefined 30.03.2018 21:37

Цитата:

Сообщение от caseyryan (Сообщение 1204790)
Авторизовался, и скачал всю графику. Никакой надежности

Что мешает поставить защиту?Не больше 2-3 файлов за раз.Либо прикидывать что реально юзеру может понадобится в данный момент.

Цитата:

Да у него с зашифрованным зип архивом она и так будет стартовать неоправданно долго) И все с тем же оверхедом по памяти
Ну если эти данные нужны сразу на старте, то ничего не поделаешь

Godwarlock 30.03.2018 21:56

Цитата:

Да у него с зашифрованным зип архивом она и так будет стартовать неоправданно долго) И все с тем же оверхедом по памяти
А какие иные варианты есть?

undefined 30.03.2018 22:21

грузить по мере надобности

Godwarlock 30.03.2018 22:36

undefined и сколько памяти в процессе по максимуму может висеть, чтобы все гуд было?

undefined 30.03.2018 23:16

А что значит "сколько памяти может висеть?

Godwarlock 31.03.2018 00:30

undefined какой объем ресурсов можно прогрузить при старте, чтобы было норм? Ограничение есть? Что такого в том, что они будут в памяти, если занимают её не так много

undefined 31.03.2018 00:47

Цитата:

какой объем ресурсов можно прогрузить при старте, чтобы было норм?
Что ты ожидаешь услышать? Что 10мб грузить норм, а 11 уже нельзя? Естественно все ограничено фактическим объемом свободной памяти.
Конечно, если данных там сильно меньше чем весит флэшка, можно и заэмбедить их.
Кстати, еще один плюс подгрузки ресурсов по мере надобности -их можно освободить как только надобность пропадет.

Godwarlock 31.03.2018 02:15

undefined но ведь есть средняя статистика по памяти, как на андройд так и на пк. Занимается ведь оперативная память, верно? И если например 300мб памяти занято чем-то, это ведь вполне нормально, сейчас на девайсах 1гб+, ну про пк ваще молчу.
Цитата:

Кстати, еще один плюс подгрузки ресурсов по мере надобности -их можно освободить как только надобность пропадет.
Ресурсы могут быть всегда нужны. В том плане, что даже если они используются раз в 2-5 минут, из-за этого мне кажется нет смысла очищать, а потом заново прогружать и делать те же операции, что и при старте загрузки. Ибо это займет время между каждым запросом и ставить таймеры придется на очищение памяти и еще куча ненужного ливака, что займет процессорное время. Про gpu память я еще могу согласиться, что ее желательно очищать, но ресурсы заново распаковывать и прогружать, увы в этом я смысла не вижу.

undefined 31.03.2018 09:53

Цитата:

Ресурсы могут быть всегда нужны.
Потому я специально указал "когда надобность отпадет". Всегда значит не отпадет никогда. Кароче сильно не рекомендую делать так:
Цитата:

Получается нет смысла все ресурсы, атласы графики например c xml, паковать отдельно и подгружать, когда можно просто заэмбедить?
Не понимаю что неясного в идеи что если что-то не нужно, то грузить это не надо
Это общепринятая практика. Прикинь что бы было если бы старкрафт на старте грузил сразу все ассеты. И держал их всегда в памяти

caseyryan 31.03.2018 20:34

Цитата:

Что мешает поставить защиту?Не больше 2-3 файлов за раз.Либо прикидывать что реально юзеру может понадобится в данный момент.
Ты это серьезно?
Godwarlock, я не встречал еще ни одной игры, где ассеты были бы хорошо защищены. Как-то попадалась игра, в которой ассеты были зашифрованы, а меня попросили их вытащить. Я даже не стал заморачиваться с поиском ключа. Просто запустил эту игру, дождался когда она загрузится в браузере, и сделал дамп памяти для процесса плеера. Этот дамп потом просто декомпилировал и вытащил все, что было нужно.
Вообще, даже в эйр графику мало кто реально шифрует. В основном попадаются (да я и сам так делаю) файлы уже в формате Bitmap, сохраненные в файл через ужатый методом compress, алгоритмом lzma. И делается это потому, что они в таком виде весят меньше png.
Бывает встречаются файлы зашифрованные XOR'ом. Там просто байты местами поменены. Расшифровывается за несколько минут даже не очень продвинутым хакером.
Подобные темы поднимаются здесь с завидной регулярностью. Шифровать что-то или нет, дело твое. Скорее всего твоя графика нафиг никому не нужна, и ты просто потеряешь время на все эти шифрования.
Но самое главное, для расшифровки требуется много процессорных ресурсов. Дело даже не в памяти. Твоя игра просто подвиснет, на время расшифровки, потому что флеш - однопоточный.

Godwarlock 31.03.2018 21:03

caseyryan
Цитата:

я не встречал еще ни одной игры, где ассеты были бы хорошо защищены
Суть дела даже не шифровке, а чтобы просто файлы графики не лежали в исходном виде да и всё. Имеет смысл шифровать только пользовательский конфиг, да и то если даже его вскроют, ничего такого в этом не будет, ну и соответственно его дешифровка займет не так много времени.
Цитата:

Но самое главное, для расшифровки требуется много процессорных ресурсов. Дело даже не в памяти. Твоя игра просто подвиснет, на время расшифровки, потому что флеш - однопоточный.
В этом я уже убедился. 11мб дешифруется около 6 секунд, на андройде чуть подольше. А это только 20% всей графики)
Цитата:

В основном попадаются (да я и сам так делаю) файлы уже в формате Bitmap, сохраненные в файл через ужатый методом compress, алгоритмом lzma
Вот этот момент стоит рассмотрения. То есть файлы просто bytearray и лежат в папке не в png, а в любом другом указанном формате. Мне примерно такое и надо. Как например есть atf, простым просмотром изображений в нем ничего не увидишь. Вот это мне и надо. Тогда просто в байтарай всё и фиг с ним. Кстати качество сильно страдает из-за сжатия измой?
Цитата:

алгоритмом lzma. И делается это потому, что они в таком виде весят меньше png.
У меня на сотню байт больше весить стали)

undefined 31.03.2018 21:57

Цитата:

Сообщение от caseyryan (Сообщение 1204813)
Ты это серьезно?

Да.Только не надо приводить пустой аргумент что 100% защиты не существует, это и так всем известно.Речь о том,как усложнить жизнь таким деятелям,при хранении данных на сервере возможностей это сделать много больше.

caseyryan 01.04.2018 14:27

Цитата:

Да.Только не надо приводить пустой аргумент что 100% защиты не существует, это и так всем известно.Речь о том,как усложнить жизнь таким деятелям,при хранении данных на сервере возможностей это сделать много больше.
Ты этим только пользователям жизнь усложнишь. Толку от этой защиты вообще ноль. От кого ты её собрался защитить? Или ты серьезно думаешь, что кто-то серьезный твою графику будет брать? Максимум какие-то школьники, чисто побаловаться. И что ты от этого потеряешь?
п.с. На счет пустого аргумента. 100% защита существует) Не выкладывай файлы никуда, и никто у тебя их не сопрет)
Цитата:

То есть файлы просто bytearray и лежат в папке не в png, а в любом другом указанном формате. Мне примерно такое и надо. Как например есть atf, простым просмотром изображений в нем ничего не увидишь. Вот это мне и надо. Тогда просто в байтарай всё и фиг с ним.
Не в каком-то формате, а именно в Bitmap (точнее в BitmapData). Ну, то есть, по сути растр ужатый алгоритмом LZMA (если не ошибаюсь, он же используется при сжатии 7z)
Вот набор методов, позволяющих это сделать (использую на андроиде. Позволяет сэкономить до 30 - 40% объема файла, в сравнении с png). Вместе с распаковкой, по времени получается примерно так же, как загрузка простых PNG и декодирование их в Bitmap. Так что выигрыша или проигрыша во времени работы нет. Есть только выигрыш по памяти устройства
Код AS3:

public function saveBitmapData(bitmapData:BitmapData, path:String):void {
        var byteArray:ByteArray = new ByteArray();
        byteArray.writeUnsignedInt(bitmapData.width);
        byteArray.writeUnsignedInt(bitmapData.height);
        byteArray.writeBytes(bitmapData.getPixels(bitmapData.rect));
        byteArray.compress(CompressionAlgorithm.LZMA);
        saveByteArray(byteArray, path);
}
 
public function loadBitmapData(imagePath:String):BitmapData {
        var byteArray:ByteArray = null;
        var bitmapData:BitmapData = null;
        var width:uint = 0;
        var height:uint = 0;
        byteArray = loadByteArray(imagePath);
        byteArray.uncompress(CompressionAlgorithm.LZMA);
        width = uint(byteArray.readUnsignedInt());
        height = uint(byteArray.readUnsignedInt());
        bitmapData = new BitmapData(width, height);
        bitmapData.setPixels(bitmapData.rect, byteArray);
        byteArray.clear();
        return bitmapData;
}
 
public function saveByteArray(bytes:ByteArray, path:String):void {
        //var file:File = File.applicationStorageDirectory.resolvePath(path);
        var file:File = new File(path);
        var fileStream:FileStream = new FileStream();
        fileStream.open(file, FileMode.WRITE);
        fileStream.writeBytes(bytes);
        fileStream.close();
        bytes.clear();
}
 
public function loadByteArray(path:String):ByteArray {
        //imagePath                                        = File.applicationDirectory.resolvePath(imagePath).url;
        path                                                = File.applicationDirectory.resolvePath(path).nativePath;
        var file:                File                = new File(path);
        var fileStream:        FileStream        = new FileStream();
        var byteArray:        ByteArray        = new ByteArray();
        fileStream.open(file, FileMode.READ);
        fileStream.readBytes(byteArray);
        fileStream.close();
        return byteArray;
}

Для флеш плеера это, конечно же, не прокатит. Придется File заменять чем-то другим, чтобы байт массив получить

Godwarlock 02.04.2018 19:37

caseyryan спасибо) На днях попробую твой метод

Appleman 03.04.2018 10:06

caseyryan, очень круто. Прямо то что доктор прописал :) Сохранить бы это добро куда-нибудь, чтобы потом не забыть. У меня единственный вопрос. Выходит, что для использования твоих решений нужно сначала свои ассеты загружать в программу, а затем уже из BitmapData сохранять на диск в виде сжатых ByteArray-ев, правильно? Или специальную сервисную прогу написать, которая это будет делать?

caseyryan 03.04.2018 15:47

Цитата:

Сообщение от Appleman (Сообщение 1204824)
caseyryan, очень круто. Прямо то что доктор прописал :) Сохранить бы это добро куда-нибудь, чтобы потом не забыть. У меня единственный вопрос. Выходит, что для использования твоих решений нужно сначала свои ассеты загружать в программу, а затем уже из BitmapData сохранять на диск в виде сжатых ByteArray-ев, правильно? Или специальную сервисную прогу написать, которая это будет делать?

Да, именно так :) У меня этот механизм просто вшит сразу в редактор уровней для игры, поэтому все на автомате делается


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

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