herm1t LIVE!ng room - January 3rd, 2008 [entries|archive|friends|userinfo]
herm1t

[ website | twilight corner in the herm1t's cave ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

January 3rd, 2008

[Jan. 3rd, 2008|12:37 pm]
[Current Mood | giggly]

[info]zloiuser@lj запостил ссылку на зин defaced. забавные они.
С помощью ELF бинарников можно определить версию оси. В самом начале elf- заголовка идёт e_ident[]. Это массив из 16 байт, вот они:
А вот самый обыкновенный линуксовый бинарь:
00000000 7F 45 4C 46 01 01 01 00 00 00 00 00 00 00 00 00 .ELF............
Что у нас тут? Правильно ELFOSABI_NONE. Заглянули бы в загрузчик FreeBSD, там на эту тему был роскошный длинный комментарий. Не говоря уже о всяких феерических способах брендинга. Даже вспомнился очень давний флейм на эту тему в фидошке. Ж-) Про IP адреса и push/ret - это даже не баян. CALL-ы/JMP-ы - улыбнуло. С затиранием .fini (подонковские словечки: "инфецирование" - напрягают) понравилось - простенько и со вкусом, только в этом месте автор зажег:
Теперь попробуем автоматизировать процесс, будем находить секцию .fini автоматически. Суть в том что у .fini будет фиксированный размер. Стало быть секцию эту можно найти по размеру (0x1b для Linux и 0x06 для FreeBSD). Алгоритм такой: из elf заголовка вытягиваем адрес табилцы секций,
Если вы знаете автора, то скажите ему, что можно просто искать секции по имени:
  char *strtab  = (char*)ehdr + shdr[ehdr->e_shstrndx].sh_offset;
  for (...)
     if (! strcmp(strtab + shdr[i].sh_name, ".fini"))
        ...
Увы, такие утилиты как sstrip... Решение - поиск .fini по сигнатуре.
Своеобразно :-) Можно было бы и попроще, что-нибудь, к примеру DT_FINI в .dynamic. "Нейродизассемблер" я комментировать не буду, немедленно скачивайте журнал и читайте сами. Оно того стоит. Ж-)))
LinkLeave a comment

navigation
[ viewing | January 3rd, 2008 ]
[ go | Previous Day|Next Day ]