Эти структуры присутствуют в файлах ELF.
Давайте рассмотрим заголовок ELF:
#define EI_NIDENT (16)
typedef struct
{
unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */
Elf32_Half e_type; /* Object file type */
Elf32_Half e_machine; /* Architecture */
Elf32_Word e_version; /* Object file version */
Elf32_Addr e_entry; /* Entry point virtual address */
Elf32_Off e_phoff; /* Program header table file offset */
Elf32_Off e_shoff; /* Section header table file offset */
Elf32_Word e_flags; /* Processor-specific flags */
Elf32_Half e_ehsize; /* ELF header size in bytes */
Elf32_Half e_phentsize; /* Program header table entry size */
Elf32_Half e_phnum; /* Program header table entry count */
Elf32_Half e_shentsize; /* Section header table entry size */
Elf32_Half e_shnum; /* Section header table entry count */
Elf32_Half e_shstrndx; /* Section header string table index */
} Elf32_Ehdr;
typedef struct
{
unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */
Elf64_Half e_type; /* Object file type */
Elf64_Half e_machine; /* Architecture */
Elf64_Word e_version; /* Object file version */
Elf64_Addr e_entry; /* Entry point virtual address */
Elf64_Off e_phoff; /* Program header table file offset */
Elf64_Off e_shoff; /* Section header table file offset */
Elf64_Word e_flags; /* Processor-specific flags */
Elf64_Half e_ehsize; /* ELF header size in bytes */
Elf64_Half e_phentsize; /* Program header table entry size */
Elf64_Half e_phnum; /* Program header table entry count */
Elf64_Half e_shentsize; /* Section header table entry size */
Elf64_Half e_shnum; /* Section header table entry count */
Elf64_Half e_shstrndx; /* Section header string table index */
} Elf64_Ehdr;
Заголовок ELF находится в начале каждого файла ELF.
На самом деле это означает, что первые 16 байт файлов ELF - это поля e_ident
заголовка ELF:
первый байт - 0x7f;
второй - 'E'
;
третий - 'L'
;
четвертый - 'F'
;
пятый - класс;
шестой - кодировка данных;
седьмой - версия файла;
восьмой - ABI ОС;
и т.д.
После поля e_ident
, следующие 2 байта - e_type
.
Если вы возглавите /bin/bash
, то сможете увидеть ELF
в самом начале.
Теперь если вы сделаете hexdump начала ELF файла:
$ xxd /bin/bash | head 00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............ 00000010: 0200 3e00 0100 0000 7005 4200 0000 0000 ..>.....p.B..... 00000020: 4000 0000 0000 0000 c0cd 0f00 0000 0000 @............... 00000030: 0000 0000 4000 3800 0900 4000 1d00 1c00 ....@.8...@..... 00000040: 0600 0000 0500 0000 4000 0000 0000 0000 ........@....... 00000050: 4000 4000 0000 0000 4000 4000 0000 0000 @.@.....@.@..... 00000060: f801 0000 0000 0000 f801 0000 0000 0000 ................ 00000070: 0800 0000 0000 0000 0300 0000 0400 0000 ................ 00000080: 3802 0000 0000 0000 3802 4000 0000 0000 8.......8.@..... 00000090: 3802 4000 0000 0000 1c00 0000 0000 0000 8.@.............
Первая строка этого hexdump - первые 16 байт (e_ident
):
первый байт действительно 0x7f
;
затем идет "ELF"
;
после этого идет класс 0x02
для ELFCLASS64
(ELF64);
затем кодировка, 0x01
для ELFDATA2LSB
;
и т.д.
Первые два байта второй строки - это e_type
. Они закодированы в LSB (из-за ELFDATA2LSB
), поэтому значение на самом деле 0x0002
, что означает ET_EXEC
(это исполняемый файл).
Следующие два байта - это архитектура (e_machine
): 0x003e
для EM_X86_64
, потому что это x86_64
исполняемый файл.
Вы должны быть в состоянии расшифровать вручную все поля в заголовке ELF и вы должны найти те же значения, что и те, которые даны readelf
. Исходя из этого, вы можете найти другие структуры ELF в файле, такие как ElfXX_Shdr
или ElfXX_Phdr
и расшифровать их на основе их определения (и вы должны найти те же значения, что и в readelf
).
Kali Linux - это дистрибутив для опытных пользователей Linux, в который входят инструменты для тестирования проникновения в сеть. Он предназначен для работы на виртуальной машине с небольшим количеством постоянных данных.
Kali может использоваться как универсальная система, но она не предназначена для этого, и попытки использовать ее для других целей часто приводят к разочарованию. (Источник: бесконечный поток вопросов, которые мы получаем на Stack Exchange от людей, которые пытались использовать Kali для чего-то, для чего он не предназначен.)
Kali предназначена для опытных пользователей . Если вы не знакомы с командной строкой Linux и сетями, используйте более дружелюбный дистрибутив, такой как elementary OS, Linux Mint или Ubuntu.
Несмотря на то, что вы можете обновлять пакеты в Kali, она не предназначена для долгосрочной системы с плавными обновлениями. Kali лучше всего запускать как разовую живую систему на виртуальной машине : просто храните несколько файлов конфигурации в своем домашнем каталоге или обращайтесь к ним с хоста. Если вы хотите обновиться, получите новый образ Kali. Для вашей основной системы запустите стабильный дистрибутив.
Если вам нужны дополнительные драйверы для поддержки вашего оборудования, вам будет легче найти или собрать их для популярных дистрибутивов, таких как Ubuntu и Fedora или RHEL / CentOS, чем для Kali. Запустите универсальный дистрибутив в качестве основной системы и запустите Kali на виртуальной машине.
Практически любой дистрибутив (включая Kali) можно использовать в качестве достойного рабочего стола. Даже Knoppix или openBSD могут стать настольным компьютером, если вы готовы принять вызов. Дело в том, что ОС поставляется с компилятором C и библиотекой C ( gcc
и glibc
в большинстве случаев, но llvm
может быть опцией), откуда вы можете скомпилировать практически все, что захотите. Конечно, вы ограничены программным обеспечением с открытым исходным кодом, поскольку вы компилируете его из исходного кода.
Черт, вы даже можете скомпилировать все с нуля .
Исключением из правила, согласно которому дистрибутив * BSD / Linux может использоваться в качестве эффективного рабочего стола, являются встроенные системы. Некоторые встроенные системы намеренно не используют компилятор C, поэтому вы не можете компилировать дополнительное программное обеспечение.
С учетом всего сказанного, Kali Linux использует репозитории Debian, из которых вы можете получить все, что есть в Debian, с помощью простого apt-get
(без компиляции). Включая несколько оконных менеджеров, почтовых программ, браузеров. На самом деле гораздо больше, чем вы можете пережить.