forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Прочие вопросы (http://forum.boolean.name/forumdisplay.php?f=50)
-   -   Как запаковать и извлеч картинки и прочюю информацию в DAT? (http://forum.boolean.name/showthread.php?t=8440)

аааааааааа 06.06.2009 17:02

Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Помогите!!! Как запаковать и извлеч картинки и прочюю информацию в DAT файлы?:SOS:

ViNT 06.06.2009 18:12

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Нужна программа-упаковщик на компе и класс-распаковщик в мидлете. Формат такой: ID ресурса (1-2 байта), размер ресурса S (4-8 байт) данные ресурса (S байт) и так для каждого ресурса. Алгоритм упаковки - пишем в поток ID, потом размер, потом данные. Распаковка - читаем ID, читаем размер S, читаем S байт ресурса и так до конца файла. На сколько быстрой будет распаковка, зависит от реализации распаковщика.

аааааааааа 06.06.2009 20:35

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
а где можно скачать такую программу или как она хотябы называется?

ViNT 06.06.2009 21:14

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Цитата:

Сообщение от аааааааааа (Сообщение 106855)
а где можно скачать такую программу или как она хотябы называется?

Возможно где-то есть, но я таких не встречал.
Самому писать придется, но это в общем-то несложно.

temned 06.06.2009 22:11

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Я давно как - то искал програмку - нигде нет, так что сам постарайся и попачкай ручки

Richik 07.06.2009 14:10

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
вот в этой теме идет вялое осуждение данного вопроса.

odd 18.06.2009 22:45

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Есть идея такое написать.
Да и в "библиотеках" идет живое обсуждение данного вопроса.
Раз наболело, нужно писать.

ViNT 18.06.2009 23:26

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Что касается упаковщика под Windows - могу написать без проблем.
А на счет библиотеки-распаковщика - надо думать над оптимизацией, чтобы не тормозило.

odd 20.06.2009 02:32

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Я уже начал писать паковщик для компа, правда на Java (swing) тоже.
Могу написать библиотеку по распаковке всего этого дела.
Или давайте ViNT напишет запаковщик, а я напишу распаковщик.

Идея такая. Состав файла с информацией:
первые 2 байта - количество файлов в пакете
потом идет список длин файлов (тоже по 2 байта каждый)
а потом уже идут сами файлы, просто склеенные пока.
В итоге получаем до 65535 файлов в пакете по 64Кб максимум каждый.
Позже можно будет добавить и шифрацию. Как идея? Обсуждаем?

ViNT 20.06.2009 12:46

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Цитата:

Сообщение от odd (Сообщение 108315)
потом идет список длин файлов (тоже по 2 байта каждый)

Может под размер 4 байта отвести? Редко конечно, но ресурс может быть и больше 64 Кб.

На счет упаковщика - как только определимся со структурой, могу приступить к написанию. Также, думаю, в программу стоит добавить и распаковщик, на всякий случай.

odd 20.06.2009 18:14

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Мне кажется, что для мобилы и 64Кб хватает с головой.
Картинок больше 64Кб я не виде ни в одной игре.
Но хорошо, ради совместимости с учетом будущего развития мобильных телефонов будем делать указатели на длину файла 4 байта.
Значит определились. Количество кусков - 2 байта, длины по 4 байта.
Порядок байт по Intel конвенции т.е. сначала идет младший байт, а потом старшие. Сразу предусмотри кодирование файлов по принципу XOR с 32 битным ключом (или произвольной длины). Кодирование вот только не знаю как лучше делать. Сквозное или для каждого файла отдельно? Шифрация/дешифрация проходит так: первый байт файла ксорится с первым байтом ключа, второй байт файла со вторым байтом ключа и т.п. Лучше сделать произвольную длину ключа. Можно ещё сделать дополнительно циклический скроллинг байта на N битов. Короче, я уже начинаю делать наброски библиотеки.

Phantom 21.06.2009 00:33

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
А зачем
Цитата:

Порядок байт по Intel конвенции т.е. сначала идет младший байт, а потом старшие.
?
Я никогда не понимал, почему так, а не наоборот. Логичнее ведь делать наоборот.

ViNT 21.06.2009 02:40

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Цитата:

Сообщение от Phantom_wc (Сообщение 108396)
А зачем ?
Я никогда не понимал, почему так, а не наоборот. Логичнее ведь делать наоборот.

Вроде бы это связано с особенностями архитектуры x86, в ARM наоборот.

Только вот я сейчас подумал - а как дельфовский TFileStream пишет? Можно ли использовать его метод write(buf,size), передавая в качестве buf значения типа word и integer, или он наоборот переворачивает?

odd 22.06.2009 18:11

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Цитата:

Сообщение от Phantom_wc (Сообщение 108396)
А зачем ?
Я никогда не понимал, почему так, а не наоборот. Логичнее ведь делать наоборот.

Просто процы у Intel немного хитромудрые. При битовых и арифметических операциях они уже их производят до того как само число полностью загрузилось. К примеру, нужно увеличить четырех байтовое число (int) на единицу. В ассемсблере для этого есть команда inc. Сам же процессор производит операцию примерно так: сначала считывает младший байт (он первее идет) и увеличивает его на 1, если произошло переполнение, выставляется ссответсвующий флаг в процессоре и тогда единица перейдет и в следующий по старшинству байт. Таким образом получается, что операции над числом такие как сложение, вычитание и проч. происходят параллельно со считыванием данного числа из памяти, что безусловно добавляет скорости при таких операциях. Если же порядок байт был противоположным, пришлось бы сначала считать все 4 байта, а потом уже производить над ними операции, а так уже скорость теряется.

SBJoker 22.06.2009 18:57

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Что то я сильно неуверен что данные из памяти побитно читаются, во всяком случае теперь. Ибо поиск и начало процедуры получения данных из памяти несамая быстрая вещь. Например современный процессор быстрее посчитает значение синуса любого угла чем прочтёт готовое значение из памяти, вот как...

VM 22.06.2009 22:19

Re: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Коллеги, уже есть некоторые решения этого вопроса вот здесь http://supremej2me.bambalam.se/guide...on-tools/bamfs.
По-моему, формат упакованного файла оптимальный.

Ещё вопрос по шифрации: насколько она надёжна?
Ведь декомпиляция class файла покажет алгоритм шифрации...

odd 23.06.2009 00:14

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Алгоритм шифрации может и покажет, но вот ключ можно и из Интернета скачивать и не хранить его в программе вообще.
Да и есть ли такая защита, которую бы нельзя было бы взломать? Взломать можно всё.

ViNT 26.06.2009 01:46

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Вложений: 1
Итак, вот тестовый вариант упаковщика/распаковщика, пока без шифрования(думаю, следует оставить оба варианта - с шифрованием и без, на выбор пользователя). На счет порядка байтов в заголовке - пишу прямо из памяти в поток, это правильно или надо наоборот?

Упаковка сделана в два этапа - сначала создаются файлы data.bin(данные) и hdr.bin(заголовок), потом все собирается в один файл. Сделал так, чтобы обрабатывать все файлы в один проход - открываю поток, определяю размер, пишу в файл заголовка, тут же копирую поток в файл данных, закрываю поток и так для каждого файла. Для этого в папке программы должна быть папка Temp.

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

2 odd код могу выложить при необходимости.

ViNT 26.06.2009 23:12

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Вложений: 1
Добавил шифрование(опционально). Длина ключа 1-255 байт, каждый следующий байт данных ксорится со следующим байтом ключа, байты ключа перебираются циклически, дл каждого ресурса сначала. Для распаковки зашифрованного файла нужно также как и при упаковке включить шифрование и ввести ключ.

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

Сейчас для промежуточных файлов используется TFileStream, однако, поскольку файлы небольшие, думаю будет лучше использовать TMemoryStream.

odd 29.06.2009 21:25

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Ок. Буду подгонять библиотеку-распаковщик.
Она уже почти готова, а вот тестировать не на чем т.к. запаковщика не было.
Есть идея зашифровать и заголовок с переменным ключом, но об этом чуть позже и в личку.

odd 30.06.2009 01:26

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Либа пашет нормально. Уже могу извлекать текст, картинки и звуки.
Хочу ещё добавить чтение текста построчно с перекодировкой.
Только несколько замечаний по кодировщику:
1. Небольшая ошибка в алгоритме шифрования. К примеру, я задаю ключ "123", а шифрование идет не тремя байтами, а четырьмя. Последний байт всегда 0 зачем-то добавляется.
2. Расширь окошко с названиями файлов, а то не видно имен файлов если путь длинный.

Очень желательно добавить скроллинг битов и шифрование заголовка.
Ещё можно перед заголовком вставлять N фейковых байтов для пущей маскировки файла с нашими ресурсами под другой файл. К примеру можно вставить заголовки от JPG, PNG, ZIP и проч. Прикол в том, что архив с картинками можно зашифровать и добавить заголовок типа это PNG, естественно файл открываться не будет. Юзер подумает, что применен какой-то экзотический метод сжатия PNG картинок или файл действительно поврежден. Или добавить перед заголовком байты 0xCAFEBABE и архив обозвать как class файл.

Если удастся добавить сдвиг заголовка + шифрацию заголовка + шифрацию данных = в итоге получим довольно криптостойкую защиту информации. Не зная алгоритма декодировщика можно будет ломать голову над хранилищем довольно долго.

Phantom 30.06.2009 04:13

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Цитата:

К примеру можно вставить заголовки от JPG, PNG, ZIP и проч. Прикол в том, что архив с картинками можно зашифровать и добавить заголовок типа это PNG, естественно файл открываться не будет. Юзер подумает, что применен какой-то экзотический метод сжатия PNG картинок или файл действительно поврежден.
Можно даже небольшую картинку в начало файла записать, чтобы она и открывалась как картинка, например двуцветная чернобелая PNG с каким-нибудь рисунком будет весить мало при относительно большом рисунке. Это для пущей конспирации. Чел щёлкнет на файле и он откроется как картинка, он может и не подумать, что после самой картинки в файле другие данные вбиты. Можно даже сами данные хранить в качестве мета данных самой картинки (если только PNG поддерживает хранение там любых данных), тогда начало и конец файла будут полностью соответствовать PNG сигнатуре. И чел просто подумает, что картинка так много весит из-за кривого сжатия PNG-24. :-D
Цитата:

Или добавить перед заголовком байты 0xCAFEBABE и архив обозвать как class файл.
Не проканает. Джава машина не даст открыть для чтения ресурс с расширением *.class =(

odd 30.06.2009 08:25

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Короче решено.
Желательно в запаковщик добавить функции прикрепления заданного файла перед заголовком или генерацию N случайных байт от фонаря.

ViNT 30.06.2009 23:08

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Понятно, с лишними байтами в шифровщике разберусь, шифрование заголовка и маскировку допишу, на счет интерфейса - доработаю, это пока был тестовый вариант для проверки работоспособности основного кода. На счет окна с именами файлов - может лучше вообще выводить только имена без пути, или сделать возможность включения/отключения отображения пути, также можно все это переделать на основе TListView и добавить сопоставленные расширению иконки.

odd 01.07.2009 17:20

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Да, путь этот и не нужен никому. Желательно отображать: номер в архиве/тип данных/имя (без пути).
Буду ждать новую версию кодировщика. Хотя тестировать пока можно и на этом. Я пока буду улучшать работу с текстовыми файлами. Чтение побайтно делать вообще? Или не надо? Пока извлекает (закодированные и незакодированные) рисунки, звуки, текстовые файлы (извлекаются сразу целиком).

ViNT 01.07.2009 21:48

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Цитата:

Сообщение от odd (Сообщение 109571)
Да, путь этот и не нужен никому. Желательно отображать: номер в архиве/тип данных/имя (без пути).
Буду ждать новую версию кодировщика. Хотя тестировать пока можно и на этом. Я пока буду улучшать работу с текстовыми файлами. Чтение побайтно делать вообще? Или не надо? Пока извлекает (закодированные и незакодированные) рисунки, звуки, текстовые файлы (извлекаются сразу целиком).

А файлы куда извлекаются? В RMS?

Ошибку в кодировщике пофиксил, добавил запись файла в начало архива. Попробую приделать создание промежуточных файлов прямо в памяти и список переделаю. А можно еще сделать кнопку "Детальная информация", по нажатию которой выводить полную информацию о выделенном ресурсе и предпросмотр.

odd 02.07.2009 02:54

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Цитата:

Сообщение от ViNT (Сообщение 109601)
А файлы куда извлекаются? В RMS?

Файлы извлекаются в переменные. Текстовый файл - в строку, графика - в переменную типа Image, только звуки загружаются сразу в плеер без использования переменных.

ViNT 13.07.2009 15:30

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Вложений: 1
Еще некоторые изменения.
Сделано добавление файла в начало (при распаковке программой нужно указать количнство байт, которые следует пропустить, естественно, должно соответствовать размеру файла в начале пакета).

Изменени список файлов, убран путь, добавлена иконка, номер в пакете и размер файла.

Также есть окно полной информации, но оно пока нефункционально, не удается сделать нормальное выравнивание, буду делать специальное окно.

Дальше планирую добавить просмотр изображений, текста, воспроизведение звуковых файлов и просмотр прочих файлов в HEX-формате.

odd 14.07.2009 03:27

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Ура! Наконец-то. Можно будет уже выпустить первую версию библиотеки в свет.

А можно сделать так, чтоб при прикреплении в начало фейкового файла, его длина автоматически отображалась в поле "пропустить N байт"? А то напряжно смотреть какая там длина у файла.

ViNT 16.07.2009 02:52

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Вложений: 1
Цитата:

Сообщение от odd (Сообщение 110895)
А можно сделать так, чтоб при прикреплении в начало фейкового файла, его длина автоматически отображалась в поле "пропустить N байт"? А то напряжно смотреть какая там длина у файла.

Сам как-то не додумался, добавил. Также, переделал окно информации.

Дальше сделаю создание информационного файла для корректной распаковки пакета RESPacker'ом и шифрование заголовка(в этом билде забыл сделать).

dmitriy-dim 15.09.2010 17:48

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
скажите, пожалуйста! а каким образом извлекаемый mp3-файл сразу подается на воспроизведение, ведь для этого в функции:
openplayer
необходимо указать имя открываемого файла.
спасибо!

ViNT 15.09.2010 22:48

Ответ: Как запаковать и извлеч картинки и прочюю информацию в DAT?
 
Цитата:

Сообщение от dmitriy-dim (Сообщение 162193)
скажите, пожалуйста! а каким образом извлекаемый mp3-файл сразу подается на воспроизведение, ведь для этого в функции:
openplayer
необходимо указать имя открываемого файла.
спасибо!

Это в MP так, в j2me есть разные методы открытия плеера, в том числе, загрузка данных из потока. Здесь, видимо, он и используется.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot