~ hints ~
Тут будут собраны всякие небольшие фишки, которые не тянут на отдельную
статью, но тем не менее интересны.
[0] detect OS via ELF
С помощью ELF бинарников можно определить версию оси. В самом начале elf-
заголовка идёт e_ident[]. Это массив из 16 байт, вот они :
e_ident[0] = 0x7f
e_indet[1] = 'E'
e_ident[2] = 'L'
e_ident[3] = 'F'
e_ident[4] = класс архитектуры (1: 32-bit arch, 2: 64-bit arch)
e_ident[5] = формат данных (1 для Little endian, 2 для Big endian)
e_ident[7] = тип операционной системы
SYSV 0x00
HPUX 0x01
NetBSD 0x02
Linux 0x03
HURD 0x04
86Open 0x05
Solaris 0x06
Monterey 0x07
IRIX 0x08
FreeBSD 0x09
Tru64 UNIX 0x0a
Novell Modesto 0x0b
OpenBSD 0x0c
standalone 0xff
...
[1] ip address masking
Ковыряли червяка одного и нашли интересную фишку - ip адреса в hex-виде
нормально воспринимаются консолью например:
$ ping 0x7f000001 <- равносильно -> ping 127.0.0.1
Вот такой html-код тоже работает (из тела червя):
<iframe src=http://0xcbdf9f69/adsense.php width=1 height=1 style="display:none">
0xcbdf9f60 == 203.223.159.105
Выглядит весьма элитно так писать адреса =)
[2] direct jump
Супер тема, не знаю точно, наверное эта техника уже давно каким-нить
вирмейкером описана, но... позиционно независимый jump :
push $addr
ret
Всего 6 байт и мы попадаем куда надо, при этом $addr из стека вынимается.
Для сравнения следущий стандартный пример:
push $addr
jmp *(%esp)
Занимает 7 байт и в стеке остаётся адрес прыжка. Так что push-ret это
весьма удобная техника.