Секреты покорения эльфов



         

Имплантация чужеродного кода в ELF-файл - часть 5


Это не самый оптимальный вариант и его можно здорово оптимизировать, если переписать так:

xor eax,eax

add al, 4

xor ebx,ebx

inc ebx

mov ecx, offset begin_msg

mov edx,ecx

add edx, sizeof(msg)

int 80h

pop esi

xor ebp, ebp

jmp

80482C3h

Листинг 6 оптимизированный вариант

Теперь прокручивая файл в hex-редакторе, найдем и выпишем стартовые адреса всех цепочек NOP'ов, пригодных для внедрения. А какие цепочки пригодны для внедрения? Если две соседние цепочки расположены в пределах досягаемости короткого перехода (грубо — в пределах сотни байт), 3х NOP'ов будет вполне достаточно (2 байта на команду перехода, один — на любую однобайтовую команду полезного кода, например, inc ebx или pop esi). В противном случае нам необходимо иметь цепочку по крайней мере из 6ти NOP'ов — пять на команду близкого перехода и один на полезную команду.

В нашем случае получается:

8048306h                                10 байт

80483a2                  14 байт

8048464                  12 байт

Листинг 7 перечень стартовых адресов цепочек NOP'ов пригодных для внедрения и их длина

Итого — 36 байт. Вполне достойное место для демонстрационной программы! Начинаем заполнять цепочки NOP'ов полезным кодом. С первой попытки у нас получается:

8048306              31 c0                      xor    eax, eax

8048308              04 04                      add    al, 4

804830a              e9 93 00 00 00                    jmp    80483a2h

804830f              90                         nop

Листинг 8 заполняем первую цепочку NOP'ов (предварительный вариант)

При этом один последний NOP остается потерян, но по-другому не получается. Команда XOR EBX,EBX занимает два байта и сюда не лезет. А что, если переставить команды местами? Перенести add al,4 в следующую цепочку NOP, а вместо нее вставить XOR EBX,EBX/INC EBX

8048306              31c0                       xor    eax, eax

8048308              31db                       xor    ebx, ebx




Содержание  Назад  Вперед