hello的shellcode

来源:互联网 发布:主播用的唱歌软件 编辑:程序博客网 时间:2024/05/17 07:56

方法一,用mov,代码:


  1. ;hello_mov.asm  
  2. section .data  
  3.         msg db "Hello, world!", 0xA  
  4.         len equ $ - msg  
  5. section .text  
  6. global _start  
  7.         _start:  
  8.         mov edx, len  
  9.         mov ecx, msg  
  10.         mov ebx, 1  
  11.         mov eax, 4  
  12.         int 0x80  
  13.   
  14.         mov ebx, 0  
  15.         mov eax, 1  
  16.         int 0x80  


方法二,用xor,代码:

 


  1. ;hello_xor.asm  
  2. section .data  
  3.         msg db "Hello, world!", 0xA  
  4.         len equ $ - msg  
  5. section .text  
  6. global _start  
  7.         _start:  
  8.         xor eax,eax  
  9.         xor ebx,ebx  
  10.         xor ecx,ecx  
  11.         xor edx,edx  
  12.   
  13.         mov dl, len  
  14.         mov ecx, msg  
  15.         mov bl, 1  
  16.         mov al, 4  
  17.         int 0x80  
  18.   
  19.         mov bl, 0  
  20.         mov al, 1  
  21.         int 0x80  

编译连接后,再反汇编看一下


  1. [root@localhost shellcode]# nasm -f elf hello_mov.asm  
  2. [root@localhost shellcode]#   
  3. [root@localhost shellcode]# ld -o hello_mov hello_mov.o  
  4. [root@localhost shellcode]#   
  5. [root@localhost shellcode]#   
  6. [root@localhost shellcode]# ./hello_mov   
  7. Hello, world!  
  8. [root@localhost shellcode]# objdump -d hello_mov  
  9.   
  10. hello_mov:     file format elf32-i386  
  11.   
  12.   
  13. Disassembly of section .text:  
  14.   
  15. 08048080 <_start>:  
  16.  8048080:       ba 0e 00 00 00          mov    $0xe,%edx  
  17.  8048085:       b9 a4 90 04 08          mov    $0x80490a4,%ecx  
  18.  804808a:       bb 01 00 00 00          mov    $0x1,%ebx  
  19.  804808f:       b8 04 00 00 00          mov    $0x4,%eax  
  20.  8048094:       cd 80                   int    $0x80  
  21.  8048096:       bb 00 00 00 00          mov    $0x0,%ebx  
  22.  804809b:       b8 01 00 00 00          mov    $0x1,%eax  
  23.  80480a0:       cd 80                   int    $0x80  
  24. [root@localhost shellcode]#   


  1. [root@localhost shellcode]# nasm -f elf hello_xor.asm   
  2. [root@localhost shellcode]# ld -o hello_xor hello_xor.o  
  3. [root@localhost shellcode]# ./hello_xor   
  4. Hello, world!  
  5. [root@localhost shellcode]# objdump -d hello_xor  
  6.   
  7. hello_xor:     file format elf32-i386  
  8.   
  9.   
  10. Disassembly of section .text:  
  11.   
  12. 08048080 <_start>:  
  13.  8048080:       31 c0                   xor    %eax,%eax  
  14.  8048082:       31 db                   xor    %ebx,%ebx  
  15.  8048084:       31 c9                   xor    %ecx,%ecx  
  16.  8048086:       31 d2                   xor    %edx,%edx  
  17.  8048088:       b2 0e                   mov    $0xe,%dl  
  18.  804808a:       b9 9c 90 04 08          mov    $0x804909c,%ecx  
  19.  804808f:       b3 01                   mov    $0x1,%bl  
  20.  8048091:       b0 04                   mov    $0x4,%al  
  21.  8048093:       cd 80                   int    $0x80  
  22.  8048095:       b3 00                   mov    $0x0,%bl  
  23.  8048097:       b0 01                   mov    $0x1,%al  
  24.  8048099:       cd 80                   int    $0x80  
  25. [root@localhost shellcode]#   


比较了一下:


  1. mov ecx,0  
  2. 是5个字节,而  
  3. xor ecx,ecx  
copy
  1. 则是2个字节  

所以,我看到一般性的shellcode代码里,都是用xor eax,eax来代替mov eax,0
原创粉丝点击