• 大小: 1.92MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-30
  • 语言: 其他
  • 标签:

资源简介

缓冲区溢出实验

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 

#pragma comment(lib“ws2_32“)
#include 

#define MAX_NUM 2
#define clear(p) ZeroMemory(p sizeof (p) );

//---------------------------------------------------------------------------
//  4bit binary to char 0-F
char Hex2Chr( unsigned char n )
{
n &= 0xF;
    if ( n < 10 )
     return ( char )( n + ‘0‘ );
    else
     return ( char )( n - 10 + ‘A‘ );
}
//---------------------------------------------------------------------------
//  char 0-F to 4bit binary
unsigned char Chr2Hex( char c )
{
if ( c >= ‘a‘ && c <= ‘z‘ )  //  it‘s toupper
     c = c - ‘a‘ + ‘A‘;
    if ( c >= ‘0‘ && c <= ‘9‘ )
     return ( int )( c - ‘0‘ );
    else if ( c >= ‘A‘ && c <= ‘F‘ )
     return ( int )( c - ‘A‘ + 10 );
    else
     return -1;
}
//---------------------------------------------------------------------------
//  base64 code table
//  0-63 : A-Z(25) a-z(51) 0-9(61) +(62) /(63)
char  base2Chr( unsigned char n )
{
n &= 0x3F;
if ( n < 26 )
     return ( char )( n + ‘A‘ );
    else if ( n < 52 )
     return ( char )( n - 26 + ‘a‘ );
    else if ( n < 62 )
     return ( char )( n - 52 + ‘0‘ );
    else if ( n == 62 )
     return ‘+‘;
    else
     return ‘/‘;
}
//---------------------------------------------------------------------------
unsigned char Chr2base( char c )
{
if ( c >= ‘A‘ && c <= ‘Z‘ )
     return ( unsigned char )( c - ‘A‘ );
    else if ( c >= ‘a‘ && c <= ‘z‘ )
     return ( unsigned char )( c - ‘a‘ + 26 );
    else if ( c >= ‘0‘ && c <= ‘9‘ )
     return ( unsigned char )( c - ‘0‘ + 52 );
    else if ( c == ‘+‘ )
     return 62;
    else if ( c == ‘/‘ )
     return 63;
    else
        return 64;  //  无效字符
}
//---------------------------------------------------------------------------
//  aLen 为 aSrc 的大小, aDest 所指的缓冲区必须至少为 aLen 的 3 倍!!!
//  返回 aDest 的长度
int QPEncode( char * const aDest const unsigned char * aSrc int aLen )
{
char * p = aDest;
    int    i = 0;

    while ( i++ < aLen )
    {
     *p++ = ‘=‘;
        *p++ = Hex2Chr( *aSrc >> 4 );
        *p++ = Hex2Chr( *aSrc++ );
    }
    *p = 0;  //  aDest is an ASCIIZ string
return ( p - aDest );  //  exclude the end of zero
}
//---------------------------------------------------------------------------
//  aDest 所指的缓冲区必须至少为 aSrc 长度的 1/3 !!!
//  返回 aDest 的长度
int QPDecode( unsigned char * const aDest const char * aSrc )
{
unsigned char * p = aDest;
    int             n = strlen( aSrc );
    unsigned char   ch cl;

    while ( *aSrc )  //  aSrc is an ASCIIZ string
    {
     if ( ( *aSrc == ‘=‘ ) && ( n - 2 > 0 ) )
        {
         ch = Chr2Hex( aSrc[1] );
            cl = Chr2Hex( aSrc[2] );
            if ( ( ch == ( unsigned char )-1 ) || ( cl == ( unsigned char )-1 ) )
             *p++ = *aSrc++;
            else
            {
*p++ = ( ch << 4 ) | cl;
      

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    .......      1425  2004-12-17 19:09  cn_xp(sp1).bmp

----------- ---------  ---------- -----  ----

                 1425                    1


评论

共有 条评论