Редактировать бинарный файл внутри самораспаковывающегося CAB-архива Windows?
У меня есть старый файл "Win32 Cabinet Self-Extractor" (расширение *.exe), в который я хотел бы внести небольшие изменения.
Я не знаю, откуда исходный файл или кто его создал, но можно открыть файл в 7-Zip и хотя бы просмотреть его содержимое.
Цель этого самораспаковывающегося установщика - установить часть прошивки на устройстве PCIe.
Один файл внутри архива необходимо слегка изменить, чтобы в самом начале была вставлена короткая последовательность двоичных файлов (серийный номер длиной 8 байт), увеличивая длину файла на 8 байт. Затем я хочу сохранить изменения и выйти из архива, чтобы новый файл был на месте старого. Я не меняю имена файлов в архиве.
Я использую Windows 7, и 7-Zip отказывается разрешить мне изменять файл на месте (возможно, неудивительно), говоря, что он "только для чтения" (exe не только для чтения в соответствии с проводником).
Есть ли способ сделать это?
К сожалению, я не могу загрузить файл, потому что он содержит конфиденциальную информацию о компании.
2 ответа
Вы должны сначала извлечь все файлы из CAB в какую-то папку. Это можно сделать с помощью 7-Zip, другой утилиты или утилиты Windows. expand
:
Expand mycab.cab -F:* C:\myfolder
Затем вы можете изменить свой файл внутри папки C:\myfolder
и снова сожмите его с помощью утилиты Windows makecab:
makecab /f filename.ddf
Файл директивы (.ddf) выглядит следующим образом:
.Set CabinetNameTemplate=mycab.cab
.Set SourceDir=C:\myfolder
.Set Cabinet=on
.Set Compress=on
"file1name.txt"
"file2name.txt"
Более подробную информацию о файлах DDF можно найти в статье Синтаксис файла директивы MAKECAB.
Полное руководство пользователя Microsoft можно найти в руководстве пользователя Microsoft MakeCAB.
Существует подход, аналогичный отличному ответу harrymc, который, на мой взгляд, является более быстрым и простым способом, ЕСЛИ, ЕСЛИ, у вас есть хотя бы элементарные навыки Visual Studio и C#. Кроме того, ответ harrymc не охватывал часть в конце, где вам нужно поместить файл заголовка EXE в передней части вашего CAB, чтобы сделать его самораспаковывающимся. Я включил это сюда.
ЧАСТЬ 1: Создайте свой CAB-файл с измененным двоичным файлом, заменяющим исходный. См. Мой ответ на этот вопрос:https://stackoverflow.com/questions/1939639/c-net-creating-a-cab-and-adding-files-to-it-without-an-external-library В общих чертах, шаги следующие: * Извлеките текущий CAB-файл в папку, например, C:\MyOriginal\CabfileExtractDir\, используя 7Zip или команду Expand. * Замените исходный двоичный файл в этой папке модифицированным двоичным файлом с правильным серийным номером. * Запустите программу CabMaker (БЕСПЛАТНО, на GitHub), как описано в моем ответе, чтобы получить результирующий файл CAB с вашим измененным файлом. CabMaker внутренне использует программу MakeCab. Обратите внимание, что CabMaker выполняет за вас задачу создания файла DDF. * В CabMaker вы должны указать C:\MyOriginal\CabfileExtractDir в качестве исходной папки и C:\MyEditedCabFile в качестве целевой папки и что-то вроде "MyModifiedFirmwareInstaller.cab" в качестве имени целевого файла, а затем нажмите "Создать CAB"..
ЧАСТЬ 2: Сделайте ваш CAB-файл самораспаковывающимся исполняемым файлом. * Просмотрите документы здесь. https://docs.microsoft.com/en-us/previous-versions/bb417343(v=msdn.10)?redirectedfrom=MSDN#microsoftmakecabusersguide Соответствующая часть, адаптированная к вашей ситуации, будет...
C:\> copy /b "%windir%\system32\extrac32.exe"+"C:\MyEditedCabFile\MyModifiedFirmwareInstaller.cab" "C:\MyEditedCabFile\MyModifiedFirmwareInstaller.exe"
C:\> del /q /f "MyModifiedFirmwareInstaller.cab"
ДОБАВЛЕНИЕ - На пути к более полностью автоматизированному процессу После просмотра процесса и получения файла DDF вы, вероятно, могли бы автоматизировать весь процесс, чтобы НЕ использовать CabMaker, использовать базовую командную строку MakeCab и DDF и адаптировать все это в сценарий пакетного файла., где вы параметризуете серийный номер и редактирование двоичного файла. Здесь это выходит за рамки, но вполне возможно.
Тебе этого не сделать. Файлы внутри сжаты и не могут быть изменены. Если вы это сделаете, архив будет поврежден. Возможность распаковки файлов уникальна для содержимого архива в целом. Вам нужно извлечь файлы, внести любые изменения, а затем воссоздать архив.
Я не использовал никаких инструментов для создания CAB много лет. Они могут позволить вам сделать это. Тем не менее, они просто делают шаги, описанные выше.