Как исполняемый файл Windows может быть только 128 байтов - PullRequest
0 голосов
/ 17 октября 2019

Просмотрите этот пост , в котором описывается методика помещения исполняемого кода в первые 128 байтов файла DICOM, т.е. в раздел преамбулы. Таким образом, DICOM можно рассматривать как как DICOM, так и исполняемый файл PE.

An extract from the link

Это git-репо демонстрирует одинаковое,Однако они не показывают код, вместо этого есть только двоичные файлы.

Теперь мой вопрос. Как сохранить исполняемый файл только в 128 байтах, потому что, как я понимаю, минимальный exe-файл будет занимать как минимум несколько КБ из этого , этого и этого SO сообщений?

Ответы [ 2 ]

1 голос
/ 18 октября 2019

При взгляде на image 1 все выглядит довольно просто: действительный заголовок DOS помещается в свободную область, а полное изображение PE встраивается позже в файл, автор помещает его между двумя законными мета DICOMзаписи для примера. Заголовок DOS действительно короткий и имеет поле с именем e_lfanew, которое содержит смещение файла IMAGE_NT_HEADERS. Другими словами, вам не нужны 128 байтов для полного изображения, вы можете встроить его в любое место файла, если это не мешает DICOM, все, что нужно в начале - это заголовок dos.

0 голосов
/ 24 октября 2019

Прежде чем ответить, как поместить исполняемый файл в 128 байт, нам нужно сначала разобраться с несколькими вещами.

  1. В файле dicom должны быть символы DICM (расширение файла) в байтах 121-124 (раздел префикса) для распознавания как файл dicom
  2. Исполняемый файл Windows должен иметь заголовок DOS в первых 64 байтах файла, чтобы иметь возможность быть исполняемым в соответствии с PE (Portable Executable)Формат файла.
  3. Комбинируя вышеупомянутые 2 пункта, создается новый формат файла, называемый PEDICOM, который является как dicom, так и исполняемым файлом. PEDICOM имеет архитектуру, показанную на рисунке выше.
  4. PEDICOM содержит заголовок и содержимое исполняемого файла в разных разделах, поскольку весь исполняемый файл не может уместиться в 128 байтов.
  5. Windows предоставляет список структур и API-интерфейсов Win32 для чтения / записи этих PE-файлов по разделам в заголовке winnt.h.

Создание файла PEDICOM:

  1. Заголовок DOS (IMAGE_DOS_HEADER) имеет 1 поле с именем e_lfanew, которое содержит смещение фактического содержимого PE. Это позволяет хранить весь исполняемый код как минимум в двух ячейках памяти.
  2. Заголовок PE (IMAGE_NT_HEADER) имеет количество разделов и указателей на разделы (код, данные, стек и т. Д.)

Теперь, чтобы ответить на исходный вопрос, весь исполняемый файл не может храниться в 128 байтах. Однако 128 байтов данных достаточно, чтобы объявить файл исполняемым, то есть dos header и dos stub могут храниться в 128 байтах, в то время как остальная часть исполняемого файла может храниться где-то еще, в данном случае в закрытом теге dicom. и поле в заголовке может указывать на это. Сделайте содержащий файл допустимым и допустимым исполняемым файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...