如何解决分段故障ShellCode
我一直在尝试创建一个外壳代码,该外壳代码使用FSTENV GetPC技术采用XOR编码的外壳代码,对其进行解码并将控制权传递给它。代码是:
global _start
section .text
_start:
fldz
fstenv [esp -0xc]
pop esi
add esi,0x11
decode:
xor byte [esi],0xAA
jz Shellcode
inc esi
jmp short decode
Shellcode : db 0x9b,0x6a,0xfa,0xc2,0xc8,0xcb,0xd9,0xc3,0xc4,0x85,0x23,0x49,0x48,0xf9,0x4b,0x1a,0xa1,0x67,0x2a,0xaa
此代码基于我编写的另一个类似代码:
global _start
section .text
_start:
jmp short call_decoder
decoder :
pop esi
decode:
xor byte [esi],0xAA
jz Shellcode
inc esi
jmp short decode
call_decoder:
call decoder
Shellcode : db 0x9b,0xaa
现在,当使用nasm编译和执行它们时,都将导致SEGMENTATION FAULT。在C程序中使用时,第一个似乎无效,并导致SEGMENTATION错误,而第二个工作正常。
此外,对GDB的分析表明,在第一个错误中,XOR语句中发生了错误。 GDB输出如下:
Program received signal SIGSEGV,Segmentation fault.
Dump of assembler code from 0x804806b to 0x8048075:
=> 0x0804806b <decode+0>: xor BYTE PTR [esi],0xaa
0x0804806e <decode+3>: je 0x8048073 <Shellcode>
0x08048070 <decode+5>: inc esi
0x08048071 <decode+6>: jmp 0x804806b <decode>
0x08048073 <Shellcode+0>: fwait
0x08048074 <Shellcode+1>: push 0xfffffffa
End of assembler dump.
0x0804806b in decode ()
挂机定义为:
disas $eip,+10
同时ESI指向shellcode的第一个到第一个字节[如预期的那样?]
(gdb) x/xb $esi
0x8048073 <Shellcode>: 0x9b
用于创建可执行文件的命令是:
nasm -f elf32 -o <Linker Object> <Nasm File>
ld -o <Executable Name> <Linker Object>
那么第一个代码哪里出了问题,我该如何纠正?
PS:我使用了Here
的引用版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。