我有一个能产生外壳的工作外壳代码
我必须对其进行修改,以便在编译后隐藏二进制文件中的“/bin/sh”或“sh”。因此,我考虑将/bin/sh(2f 62 69 6e 2f 73 68)的十六进制值加上一些随机值,比如0x11111,并将该值移到寄存器中,在运行时减去0x11111,然后将运行时生成的值(变成/bin/sh)推送到堆栈中并执行
但我在第一步就出现了分割错误。我不明白为什么?
下面的代码工作正常。

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

请帮帮我。会很棒的。谢谢

最佳答案

密码不一样,不是吗?看这里:

sub ebx,ecx
push long eax

您计算ebx-ecx,但按下eaxeax为零。
应该是:
sub ebx,ecx
push long ebx

07-24 09:44
查看更多