|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
Как распаковать файл ZIP функциями из Cabinet.dll или чем отличается ZIP от MSZIP05.03.2025, 23:14. Показов 3397. Ответов 38
Всем привет!
Я тут решил поэкспериментировать и узнать чем же отличается ZIP от MSZIP. Моя идея заключалась в том, чтобы распаковывать простые ZIP-файлы кодом функций из Cabinet.dll, распаковывая буфер MSZIP. Идея была до ужаса проста: взять буфер ZIP и перенести в CAB и приклеить его в буфер MSZIP для того чтобы попробовать распаковать файл таким образом. Как вы думаете, получилось у меня это или нет? Получилось! Но только наполовину. Не всегда буфер MSZIP совпадает с буфером обычного ZIP. Я решил для этого освоить новые функции Windows 8 из Cabinet.dll и попробовать ими распаковывать буфер обычного ZIP. Мои эксперименты длились несколько дней и всё чего я смог достичь это то что половина файлов у меня всё-таки распаковывается таким образом. Я поэтому даже немного переделал версию своего класса для распаковки ZIP файлов, пытаясь достичь распаковки буфера ZIP, но правильным образом мне всё-таки этого достичь не удалось... Итак, представляю вам версию своего творчества, но только для ознакомления, а не для постоянного использования, так как мне не удалось на 100% разобраться с Cabinet.dll и сделать так чтобы распаковывались все файлы. Сейчас половину файлов не распаковывается у меня этим кодом... Буду признателен и благодарен если кто-нибудь мне когда-нибудь подскажет, что же можно изменить в этом коде, для того чтобы распаковывались все файлы, и возможно ли это вообще (это тоже вопрос!).
1
|
|
| 05.03.2025, 23:14 | |
|
Ответы с готовыми решениями:
38
Zip в zip. Как распаковать одним махом? Как распаковать ZIP-файл в 7z?
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||||||||||
| 05.03.2025, 23:19 [ТС] | |||||||||||
|
Вот я создал примерчик, для того чтобы Вы увидели как всё это работает у меня. Скорость распаковки при этом, кстати сказать, просто фантастическая! 0 миллисекунд!
Класс только для ознакомления:
1
|
|||||||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 05.03.2025, 23:26 [ТС] | |
|
Досадно здесь то, что мне пришлось взламывать заголовочную структуру буфера MSZIP не зная при этом, самой этой структуры, где что находится, и куда что должно записываться, документации нет никакой на эту тему вообще, не нашёл у Microsoft, поэтому, то что я сделал, это я всё сделал лишь методом тыка. Даже один байт я так и не смог разгадать какой он должен быть поэтому пришлось его делать с помощью перебора всех возможных комбинаций...
0
|
|
| 06.03.2025, 02:30 | ||||
|
Добавлено через 13 минут
0
|
||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||||
| 06.03.2025, 04:08 [ТС] | |||||
|
CentralFileHeader и LocalFileHeader это две разные структуры. Я думал ты вникал в структуру ZIP-файлов. Заголовки определяющие список файлов есть как в начале так и в конце файлов ZIP. Правильный способ чтения ZIP - это чтение ZIP с конца файла именно, точно так как это делал PKUNZIP.EXE во времена MS-DOS. Есть другие сейчас скрипты которые читают ZIP файлы только сначала, и не лезут вообще в конец файла - это откровенно ленивая и неправильная политика, так как при таком чтении ZIP например невозможно будет прочесть SFX-EXE. Добавлено через 2 минуты testuser2, прочитай на досуге подробнее техническую документацию по формату файла ZIP, вот например очень информативная статья по этому поводу: https://habr.com/ru/companies/... es/569464/ Добавлено через 2 минуты Добавлено через 52 секунды Добавлено через 1 минуту Добавлено через 6 минут Тему вообще я эту поднял для того чтобы понять чем же отличается ZIP от MSZIP ведь что такое MSZIP в формате файла CAB? Это тот же самый буфер для файла, который есть в простом ZIP. Тут вот и самое интересное. Я думал о том, чтобы взять, вырезать из обычного файла ZIP буфер упакованного файла, и вставить, например, в CAB файл, заменить буфер внутри CAB упакованного в MSZIP. И на основе этого уже эксперементировать. Я точно до сих пор не знаю есть ли вообще различия в ZIP и MSZIP, в интернете нет таких сведений нигде. Однако, в официальной документации Microsoft я нашёл утверждение того что MSZIP использует в точности ту же оригинальную технологию ZIP: https://learn.microsoft.com/en... 91da21ca97 [RFC1951] Я думаю, что RFC1951 это и есть стандарт ZIP который относится как к простому ZIP так и к MSZIP. Добавлено через 4 минуты И на основе всех этих своих догадок, я сейчас думаю о том, что в Cabinet.dll есть код, способный распаковывать файлы ZIP и при чём этот код, внутри Cabinet.dll, есть начиная с Windows 95! Главное это правильным образом заставить работать, а это не так просто!
0
|
|||||
| 06.03.2025, 07:41 | |||||
|
Добавлено через 49 минут
0
|
|||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||
| 06.03.2025, 12:34 [ТС] | ||
|
Добавлено через 1 минуту не смог проследить никакой закономерности вообще, всегда разный почему-то. Единственную закономерность которую я смог проследить это если файл одинаковое количество байт то и байт этот одинаковый. Но вот дальше, хоть и понимая, что это зависит от размера файла, всё равно не смог проследить никакой закономерности, оно как буд-то по рандому этот байт выставляет...
0
|
||
| 06.03.2025, 16:21 | ||||||
|
Такая мысль, может этот заголовок не обязателен. Согласно вот здесь говорится, что блоки MSZIP должны содержать впереди лишь 2-байтную сигнатуру MSZIP (0x43 and 0x4B) и все, дальше идут компрессионные блоки RFC1951
Добавлено через 2 часа 36 минут Мне этот магический байт напомнил получение контрольной суммы в коде-примере алгоритма Хоффмана, взятого отсюда. Когда изучал этот код, мне это показалось слегка бредом, поскольку контрольная сумма получалась именно в переменную типа Byte.
1
|
||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||
| 06.03.2025, 23:07 [ТС] | ||
|
0
|
||
| 07.03.2025, 01:48 | ||
|
0
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||
| 07.03.2025, 13:45 [ТС] | |||
|
testuser2, да вряд ли это количество блоков, ZIP разбивается на N количество 32-килобайтных чанок...
А учитывая, что я много раз пробовал на маленьких разных файлах до 32 КБ то я не думаю, что это количество блоков вообще... Добавлено через 3 минуты ZIP поэтому и плохо сжимает, я думаю, потому что размер блока всего 32 КБ со времён MS_DOS Добавлено через 40 минут Добавлено через 11 минут Добавлено через 3 минуты К сожалению без исходного кода функции Decompress мы никак не сможем это разгадать... Вот почему мне не нравится их политика закрытого кода, в отличии от ReactOS... Добавлено через 2 минуты И вообще почему MS не создало простой API-функции для распаковки ZIP вообще этого не понимаю...
0
|
|||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 07.03.2025, 15:39 [ТС] | |
|
testuser2, я вообще даже не буду больше пытаться разгадать этот магический байт. Всё равно эта технология только от Win 8. Я теперь буду работать над переклейкой буфера из ZIP в CAB для того чтобы проверить возможно ли это. Взять буфер из файла ZIP вырезать его от туда и вклеить в файл CAB (который MSZIP) вот моя основная идея сейчас. И проверю я сейчас это вручную, через гексоды.
Добавлено через 1 час 27 минут Но для этого нужно уметь создавать CAB-файл с нуля. Вот здесь прочитал про основной заголовок: https://www.file-recovery.com/... format.htm Но там есть ещё и дополнительный заголовок, который я не знаю как прочесть и вот эта структура тоже будет загадкой очень большой, без описания, которого я пока не смог нигде найти вообще... Добавлено через 2 минуты Просто переклеить буфер из ZIP в CAB пока не получилось, нужно ещё знать какие байты где менять. Это сложнее чем я думал...
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||
| 07.03.2025, 15:54 [ТС] | |||
|
Добавлено через 2 минуты
0
|
|||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 07.03.2025, 18:01 [ТС] | |
|
testuser2, ой не понимаю я тебя
0
|
|
| 08.03.2025, 04:40 | |
|
HackerVlad, ты же переписывал модуль с Делфи где все на коллбеках, там нету разве функций распаковки буфера? 7zip, кстати, с открытым исходным кодом, там есть распаковка cab, но это надо понимать cpp https://github.com/ip7z/7zip/b... Stream.cpp
1
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||
| 08.03.2025, 12:24 [ТС] | ||
|
Добавлено через 57 секунд ааа... хотя я распаковку ещё не выкладывал, точно... Добавлено через 1 минуту ну всё равно как ты буфер туда засунешь, там оно должно сразу целым файлом заглатывать с заголовочными структурами Добавлено через 33 минуты testuser2, мне надо найти описание структуры дополнительного заголовка для CAB
0
|
||
| 08.03.2025, 12:24 | |
|
Помогаю со студенческими работами здесь
20
Открыть zip архив и распаковать pdf файл с паролем Как распаковать файл из архива внутри архива? Ionic.Zip Как в Access97 распаковать ZIP Как распаковать Zip архив? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|