| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как бы сделать zip не zip'ом |
| Автор: Snowy 26.11.2004, 10:39 |
| Проблема такая: Нужно хранить информацию в zip'е. Файл шифруется паролем. Программа распаковывает файлы напрямую в память. Расширение у файла совершенно левое. Но как бы сделать еще так, чтобы архиватор не видел, вообще, что это зип и не показывал даже список файлов? Простая подмена заголовка не проходит. RAR, например, не может распаковать, но все равно уверенно говорит, что это zip, только поврежденный и показывает список файлов. Причем могет еще и восстановить поврежденный заголовок. Может у кого есть умные мысли по этому поводу? |
| Автор: Jureth 26.11.2004, 10:48 |
| Заксорь весь файл - процесс несложный, легко обратимый, но с уверенностью сказать что это - zip не сможет никто. |
| Автор: Girder 26.11.2004, 10:56 | ||
|
| Автор: Snowy 26.11.2004, 11:24 |
| ксорить файл не лучший вариант: Хотелось бы перед началом работы восстановить файл, чтобы можно было работать, а при завершении работы снова его поломать. Ксор подойдет, но если файлик достаточно крупный будет, то это может занять гораздо большее время. Как вариант да. Но каждый раз перебирать весь файл... Сейчас просто меняю первые 2 байта с PK на MZ Насчет двух заголовков проверил... Нашел три |
| Автор: Snowy 26.11.2004, 11:53 |
| Вот, блин. Почитал описание, поковырял зипы. Там заголовок в начале, заголовок в конце, да еще заголовок перед каждым файлом. А, если там 100 файлов, то и заголовков будет уже за 202. Идет первый заголовок, потом заголовок-файл, заголовок-файл. В конце зипа еще один заголовок и снова заголовки всех файлов в архиве. Замучаешься менять! А RAR сканит побайтно весь файл в поисказ заголовков. Хоть 200 метров спереди положи, все равно находит. И распаковывает! Не ксорить же в самом деле... |
| Автор: oleg1973 26.11.2004, 12:04 |
| неужели так сложно 1) зазиповать 2) заксорить и все |
| Автор: Akella 27.11.2004, 11:22 | ||||
|
| Автор: Akina 29.11.2004, 10:02 | ||
1) Сканируешь файл, находишь все заголовки. 2) Составляешь таблицу смещений всех заголовков, пишешь е в конец файла, обозначая старт-сигнатурой и защищая контрольной суммой. 3) Правишь все заголовки до неопознаваемости. При распаковке (в смысле перед) просто восстанавливаешь заголовки. Хвост можно не отрезать - подумаешь архивер ругнется что там в конце грязь... |
| Автор: Snowy 29.11.2004, 12:14 |
| Спасибо, уже разобрался. У меня тоже такая идея была. Но пошла немножко дальше. Зачем класть в хвост таблицу со смещениями, когда она там уже есть! Сам зип уже позаботился, как искать быстро начало файла. Для скорости можно туда закинуть смещения начала хвостовой таблицы. От него по смещению 2A получаем 4 байта - адрес в файле. По этому адрему меняем 2 байта на любые другие. Затем смещаемся от этого адреса на 1A, получаем длину имени файла. Затем возвращаемся в самое начало, сдвигаем на длину имени файла, и там заголовок следующего файла. И так далее, пока не дойдем до коментария. Кстати, архиватор не ругнется - в хвосте сидит коментарий (даже если мы его туда и не клали, то все равно есть пустой). Теперь осталось это только реализовать... |