Сейчас на форуме: localhost1, vsv1, asfa, tyns777 (+5 невидимых) |
eXeL@B —› Вопросы новичков —› Извлечение .cab архива из инсталлятора. |
Посл.ответ | Сообщение |
|
Создано: 20 апреля 2020 22:25 · Личное сообщение · #1 Привет всем. Может кто то уже сталкивался с подобным. Если я правильно понял документацию, размер архива указан по смещению 8 байт в заголовке. Однако при попытке извлечения, архивы не всегда, но как правило получаются битыми. Размер оказывается либо больше, либо меньше, того что указан в заголовке. Не могу понять что я упустил?? |
|
Создано: 21 апреля 2020 06:44 · Личное сообщение · #2 |
|
Создано: 21 апреля 2020 08:36 · Личное сообщение · #3 |
|
Создано: 21 апреля 2020 09:09 · Личное сообщение · #4 |
|
Создано: 21 апреля 2020 09:43 · Личное сообщение · #5 _MBK_, ну так есть же документация по формату. Code:
|
|
Создано: 21 апреля 2020 09:48 · Личное сообщение · #6 |
|
Создано: 21 апреля 2020 11:19 · Личное сообщение · #7 |
|
Создано: 21 апреля 2020 13:30 · Поправил: Adler · Личное сообщение · #8 _MBK_, ну так что бы его откуда-то извлечь, надо найти начальную сигнатуру и распарсив заголовок получить его размер. Заморачивался как то с похожим, но надо было PE файлы и популярные форматы картинок и архивов извлекать. Да и что не так с заголовком? 4 байта файловая сигнатура, потом 4 зарезервировано и 4 - размер. Вот схематическая структура (в битах) из другого документа по ссылке выше - Вот первый попавшийся .cab из винды - Файл больше чем указано в 08-0B, но файл имеет цифровую подпись - Если обрезать цифровую подпись после 4BF52, то файл распакуется корректно. Т.е. вполне соответствует тому, что размер файла указан со смещением 8 бит. А вот в инсталляторах, как уже написали, бывают .cab в каком то своем формате. В каком-то инсталляторе как-то встречал, по начальным сигнатурам это cab, но никаким архиватором не распаковывается. Оказалось под тот формат есть свой унпакер. Соответственно и формат заголовка у него может быть другой. P.S. zombi-vadim, если хочется настоящего садо-мазо - распарси RAR, что бы его размер вычислить | Сообщение посчитали полезным: _MBK_ |
|
Создано: 21 апреля 2020 13:47 · Личное сообщение · #9 |
|
Создано: 21 апреля 2020 19:00 · Личное сообщение · #10 |
|
Создано: 21 апреля 2020 19:59 · Поправил: Adler · Личное сообщение · #11 zombi-vadim, с инфой проблем нет особо, формат довольно Там нет единого поля с размером, а куча параметров динамичнской длины с замудренной логикой их определения (по значению определенного бита). При том некоторые параметры могут быть, а могут и не быть, надо опираться на значения других параметров. И это надо все распарсить, что бы добраться до нужного поля с размером блока, тип которого еще надо определить, т.к. формат заголовков блоков разный. Типов блоков там штук 5, которые могут быть, а могут и не быть. Я пересмотрел несколько примеров кода некоторых программ, которые с раром работают и забил, решив что не такой он и часто встречаемый формат внутри каких то других файлов Просто не стал заморачиваться. В общем там все понятно, просто алгоритм куда более замудренный чем у pe, png, zip и др. вместе взятых. Наверное самым ценным будет изучение исходника unrar, с ним много чего становится понятней. |
|
Создано: 21 апреля 2020 20:29 · Личное сообщение · #12 |
|
Создано: 21 апреля 2020 20:44 · Поправил: Adler · Личное сообщение · #13 zombi-vadim, ну там не все так плохо на самом деле В целом "на пальцах" я с ним разобрался, но весь этот мазохизм воплощать в код мне стало просто лень. Там бы кода по разбору одного рара было бы в два раза больше, чем всего мини парсера вместе с другими форматами. Я брал маленький готовый rar файл (так что бы он весь в пол экрана по высоте в хекс редакторе помещался) и наглядно в хекс редакторе его разбирал параллельно с разбором доков. Так со всеми форматами делал, это довольно наглядно и сильно упрощает понимание... |
|
Создано: 21 апреля 2020 21:25 · Личное сообщение · #14 |
|
Создано: 21 апреля 2020 23:19 · Поправил: Adler · Личное сообщение · #15 zombi-vadim, ни в каком. Там нет единого поля с размером файла, его нужно вычислить. Файл нужно разбирать поблочно, считать размер каждого блока и складывать. Вверху ссылку же на документацию по формату дал. Там в каждом заголовке есть какой-нибудь "... size", вот и смотрите что это. Что-то конкретно не подскажу, т.к. разбирался с этим несколько месяцев назад и уже не помню ничего, а курить мануал по новой нет желания. | Сообщение посчитали полезным: zombi-vadim |
|
Создано: 21 апреля 2020 23:56 · Личное сообщение · #16 |
eXeL@B —› Вопросы новичков —› Извлечение .cab архива из инсталлятора. |