Сейчас на форуме: localhost1, vsv1, asfa, tyns777 (+5 невидимых)

 eXeL@B —› Вопросы новичков —› Извлечение .cab архива из инсталлятора.
Посл.ответ Сообщение

Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 20 апреля 2020 22:25
· Личное сообщение · #1

Привет всем. Может кто то уже сталкивался с подобным. Если я правильно понял документацию, размер архива указан по смещению 8 байт в заголовке. Однако при попытке извлечения, архивы не всегда, но как правило получаются битыми.
Размер оказывается либо больше, либо меньше, того что указан в заголовке. Не могу понять что я упустил??



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 21 апреля 2020 06:44
· Личное сообщение · #2

Можно поподробнее, из какого именно инсталлятора вы хотите извлечь cab файл и откуда инфа про смещение в 8 байт?



Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 21 апреля 2020 08:36
· Личное сообщение · #3

_MBK_Вы знаете я долго ковырялся в хекс редакторе и пришел к выводу что пытался вытащить архив который уже находится в архиве.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 21 апреля 2020 09:09
· Личное сообщение · #4

Звучит, конечно, очень интригующе, но можно все таки какие то подробности? Или проблема решена?




Ранг: 55.9 (постоянный), 29thx
Активность: 0.120.22
Статус: Участник

Создано: 21 апреля 2020 09:43
· Личное сообщение · #5

_MBK_, ну так есть же документация по формату.
.pdf][MS-CAB]: Cabinet File Format - Microsoft Download Center
Microsoft Cabinet Format
Code:
  1. struct CFHEADER
  2.          {
  3.            u1  signature[4]inet file signature */
  4.            u4  reserved1     /* reserved */
  5.            u4  cbCabinet    /* size of this cabinet file in bytes */
  6.            u4  reserved2     /* reserved */
  7.            u4  coffFiles/* offset of the first CFFILE entry */
  8.            u4  reserved3     /* reserved */
  9.            u1  versionMinor   /* cabinet file format version, minor */
  10.            u1  versionMajor   /* cabinet file format version, major */
  11.            u2  cFolders  /* number of CFFOLDER entries in this */
  12.                                           /*    cabinet */
  13.            u2  cFiles      /* number of CFFILE entries in this cabinet */
  14.            u2  flags        /* cabinet file option indicators */
  15.            u2  setID        /* must be the same for all cabinets in a */
  16.                                           /*    set */
  17.            u2  iCabinet; /* number of this cabinet file in a set */
  18.            u2  cbCFHeader; /* (optional) size of per-cabinet reserved */
  19.                                           /*    area */
  20.            u1  cbCFFolder; /* (optional) size of per-folder reserved */
  21.                                           /*    area */
  22.            u1  cbCFData; /* (optional) size of per-datablock reserved */
  23.                                           /*    area */
  24.            u1  abReserve[]; /* (optional) per-cabinet reserved area */
  25.            u1  szCabinetPrev[]; /* (optional) name of previous cabinet file */
  26.            u1  szDiskPrev[]; /* (optional) name of previous disk */
  27.            u1  szCabinetNext[]; /* (optional) name of next cabinet file */
  28.            u1  szDiskNext[]; /* (optional) name of next disk */
  29.          };




Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 21 апреля 2020 09:48
· Личное сообщение · #6

Ну так ему ж не из cab извлекать надо, а наоборот, cab откуда то. Да и где там смещение 8 байт?



Ранг: 56.2 (постоянный), 22thx
Активность: 0.030.08
Статус: Участник

Создано: 21 апреля 2020 11:19
· Личное сообщение · #7

в инсталляторах кабы бывают не только майкрософтовские, но также инсталшилдовсие…




Ранг: 55.9 (постоянный), 29thx
Активность: 0.120.22
Статус: Участник

Создано: 21 апреля 2020 13:30 · Поправил: Adler
· Личное сообщение · #8

_MBK_, ну так что бы его откуда-то извлечь, надо найти начальную сигнатуру и распарсив заголовок получить его размер. Заморачивался как то с похожим, но надо было PE файлы и популярные форматы картинок и архивов извлекать.
Да и что не так с заголовком? 4 байта файловая сигнатура, потом 4 зарезервировано и 4 - размер. Вот схематическая структура (в битах) из другого документа по ссылке выше - --> Link <--
Вот первый попавшийся .cab из винды - --> Link <--
Файл больше чем указано в 08-0B, но файл имеет цифровую подпись - --> Link <--
Если обрезать цифровую подпись после 4BF52, то файл распакуется корректно. Т.е. вполне соответствует тому, что размер файла указан со смещением 8 бит.
А вот в инсталляторах, как уже написали, бывают .cab в каком то своем формате.
В каком-то инсталляторе как-то встречал, по начальным сигнатурам это cab, но никаким архиватором не распаковывается. Оказалось под тот формат есть свой унпакер. Соответственно и формат заголовка у него может быть другой.

P.S. zombi-vadim, если хочется настоящего садо-мазо - распарси RAR, что бы его размер вычислить

| Сообщение посчитали полезным: _MBK_

Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 21 апреля 2020 13:47
· Личное сообщение · #9

Ага, я тупанул сходу не заметил что имелся в виду именно размер кабинета



Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 21 апреля 2020 19:00
· Личное сообщение · #10

Adler пишет:
если хочется настоящего садо-мазо - распарси RAR, что бы его размер вычислить

Я как раз пытаюсь это сделать. Если у вас есть какая то полезная инфа буду вам очень благодарен.




Ранг: 55.9 (постоянный), 29thx
Активность: 0.120.22
Статус: Участник

Создано: 21 апреля 2020 19:59 · Поправил: Adler
· Личное сообщение · #11

zombi-vadim, с инфой проблем нет особо, формат довольно детально расписан. Просто Рошал видимо какой-то садо-мазохизский кайф ловил когда это придумывал.
Там нет единого поля с размером, а куча параметров динамичнской длины с замудренной логикой их определения (по значению определенного бита). При том некоторые параметры могут быть, а могут и не быть, надо опираться на значения других параметров.
И это надо все распарсить, что бы добраться до нужного поля с размером блока, тип которого еще надо определить, т.к. формат заголовков блоков разный. Типов блоков там штук 5, которые могут быть, а могут и не быть.
Я пересмотрел несколько примеров кода некоторых программ, которые с раром работают и забил, решив что не такой он и часто встречаемый формат внутри каких то других файлов Просто не стал заморачиваться.
В общем там все понятно, просто алгоритм куда более замудренный чем у pe, png, zip и др. вместе взятых.
Наверное самым ценным будет изучение исходника unrar, с ним много чего становится понятней.



Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 21 апреля 2020 20:29
· Личное сообщение · #12

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




Ранг: 55.9 (постоянный), 29thx
Активность: 0.120.22
Статус: Участник

Создано: 21 апреля 2020 20:44 · Поправил: Adler
· Личное сообщение · #13

zombi-vadim, ну там не все так плохо на самом деле В целом "на пальцах" я с ним разобрался, но весь этот мазохизм воплощать в код мне стало просто лень. Там бы кода по разбору одного рара было бы в два раза больше, чем всего мини парсера вместе с другими форматами.
Я брал маленький готовый rar файл (так что бы он весь в пол экрана по высоте в хекс редакторе помещался) и наглядно в хекс редакторе его разбирал параллельно с разбором доков. Так со всеми форматами делал, это довольно наглядно и сильно упрощает понимание...



Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 21 апреля 2020 21:25
· Личное сообщение · #14

AdlerПодскажите пожалуйста тогда в каком блоке его искать, этот размер архива.




Ранг: 55.9 (постоянный), 29thx
Активность: 0.120.22
Статус: Участник

Создано: 21 апреля 2020 23:19 · Поправил: Adler
· Личное сообщение · #15

zombi-vadim, ни в каком. Там нет единого поля с размером файла, его нужно вычислить. Файл нужно разбирать поблочно, считать размер каждого блока и складывать. Вверху ссылку же на документацию по формату дал. Там в каждом заголовке есть какой-нибудь "... size", вот и смотрите что это. Что-то конкретно не подскажу, т.к. разбирался с этим несколько месяцев назад и уже не помню ничего, а курить мануал по новой нет желания.

| Сообщение посчитали полезным: zombi-vadim

Ранг: 16.3 (новичок), 2thx
Активность: 0.150.22
Статус: Участник

Создано: 21 апреля 2020 23:56
· Личное сообщение · #16

Спасибо попробую покурить эту штуку, чем то похожа на zip...


 eXeL@B —› Вопросы новичков —› Извлечение .cab архива из инсталлятора.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати