亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? smb_andx_decode.c

?? 著名的入侵檢測系統snort的最新版本的源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * smb_andx_decode.c * * Copyright (C) 2004-2006 Sourcefire,Inc * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License Version 2 as * published by the Free Software Foundation.  You may not use, modify or * distribute this program under any other version of the GNU General * Public License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Description: * * This performs the decoding of SMB AndX commands. * * NOTES: * - 08.12.04:  Initial Development.  SAS * */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <stdlib.h>#ifdef HAVE_WCHAR_H#include <wchar.h>#endif#include <string.h>#include "debug.h"#include "bounds.h"#include "snort_dcerpc.h"#include "smb_structs.h"#include "smb_andx_structs.h"#include "smb_andx_decode.h"#include "dcerpc_util.h"#include "dcerpc.h"#define FIELD_ACCT_NAME 0#define FIELD_PRIM_DOMAIN 1#define SESS_AUTH_FIELD(i) ((i == FIELD_ACCT_NAME) ? "AccountName" : ((i == FIELD_PRIM_DOMAIN) ? "PrimaryDomain"  : "Unknown"))#define FIELD_NATIVE_OS 0#define FIELD_NATIVE_LANMAN 1#define SESS_NATIVE_FIELD(i) ((i == FIELD_NATIVE_OS) ? "NativeOS" : ((i == FIELD_NATIVE_LANMAN) ? "NativeLanMan" : "Unknown"))/* Externs */extern DCERPC         *_dcerpc;extern SFSnortPacket  *_dcerpc_pkt;extern u_int8_t        _disable_smb_fragmentation;extern u_int16_t       _max_frag_size;static void ReassembleSMBWriteX(SMB_WRITEX_REQ *writeX, u_int8_t *smb_data);static int SMB_Fragmentation(u_int8_t *smb_hdr, SMB_WRITEX_REQ *writeX,                               u_int8_t *smb_data, u_int16_t data_size);static int GetSMBStringLength(u_int8_t *data, u_int16_t data_size, int unicode);#ifdef DEBUG_DCERPC_PRINTstatic void PrintSMBString(char *pre, u_int8_t *str, u_int16_t str_len, int unicode);#endif/* smb_data is guaranteed to be at least an SMB_WRITEX_REQ length away from writeX * if it's farther it's because there was padding */static void ReassembleSMBWriteX(SMB_WRITEX_REQ *writeX, u_int8_t *smb_data){    SMB_WRITEX_REQ temp_writeX;    u_int16_t      smb_hdr_len = sizeof(SMB_HDR) + sizeof(NBT_HDR);    u_int16_t      writeX_len = (u_int16_t)(smb_data - (u_int8_t *)writeX);    u_int32_t      check_len;    int            ret;    int            padding = writeX_len - sizeof(SMB_WRITEX_REQ);    check_len = (u_int32_t)smb_hdr_len + (u_int32_t)writeX_len + (u_int32_t)_dcerpc->write_andx_buf_len;    /* Make sure we have room to fit into alternate buffer */    if ( check_len > _dpd.altBufferLen )    {        DEBUG_WRAP(DebugMessage(DEBUG_DCERPC, "Reassembled SMB packet greater than %d bytes, skipping.",															_dpd.altBufferLen));        goto dcerpc_fragfree;    }    /* Mock up header */    ret = SafeMemcpy(&temp_writeX, writeX, sizeof(SMB_WRITEX_REQ), &temp_writeX, (u_int8_t *)&temp_writeX + sizeof(SMB_WRITEX_REQ));    if (ret == 0)    {        DEBUG_WRAP(DebugMessage(DEBUG_DCERPC, "WriteAndX header too big: %u, skipping SMB reassembly.",                                 _dpd.altBufferLen));        goto dcerpc_fragfree;    }    temp_writeX.remaining = smb_htons(_dcerpc->write_andx_buf_len);    temp_writeX.dataLength = smb_htons(_dcerpc->write_andx_buf_len);    temp_writeX.dataOffset = smb_htons(sizeof(SMB_HDR) + sizeof(SMB_WRITEX_REQ) + padding);    temp_writeX.andXCommand = 0xFF;    temp_writeX.andXOffset = 0x0000;    /* Copy headers into buffer */    /* SMB Header */    ret = SafeMemcpy(_dpd.altBuffer, _dcerpc_pkt->payload, smb_hdr_len,                            _dpd.altBuffer, _dpd.altBuffer + _dpd.altBufferLen);    if ( ret == 0 )    {        DEBUG_WRAP(DebugMessage(DEBUG_DCERPC, "WriteAndX header too big: %u, skipping SMB reassembly.",															_dpd.altBufferLen));        goto dcerpc_fragfree;    }    _dcerpc_pkt->normalized_payload_size = smb_hdr_len;        /* Write AndX header */    ret = SafeMemcpy(_dpd.altBuffer + _dcerpc_pkt->normalized_payload_size, &temp_writeX,                     sizeof(SMB_WRITEX_REQ), _dpd.altBuffer, _dpd.altBuffer + _dpd.altBufferLen);    if ( ret == 0 )    {        DEBUG_WRAP(DebugMessage(DEBUG_DCERPC, "WriteAndX header too big: %u, skipping SMB reassembly.",															_dpd.altBufferLen));        goto dcerpc_fragfree;    }    _dcerpc_pkt->normalized_payload_size += sizeof(SMB_WRITEX_REQ);    /* Account for optional padding byte in WriteAndX header.  It is never used so we don't write it. */    _dcerpc_pkt->normalized_payload_size += padding;        /* Copy data into buffer */    ret = SafeMemcpy(_dpd.altBuffer + _dcerpc_pkt->normalized_payload_size, _dcerpc->write_andx_buf,                    _dcerpc->write_andx_buf_len, _dpd.altBuffer, _dpd.altBuffer + _dpd.altBufferLen);    if ( ret == 0 )    {        DEBUG_WRAP(DebugMessage(DEBUG_DCERPC, "WriteAndX header too big: %u, skipping SMB reassembly.",															_dpd.altBufferLen));        goto dcerpc_fragfree;    }    _dcerpc_pkt->normalized_payload_size += _dcerpc->write_andx_buf_len;    _dcerpc_pkt->flags |= FLAG_ALT_DECODE;    if (_dcerpc->write_andx_buf_len > 0)        ProcessDCERPCMessage(_dcerpc_pkt->payload + sizeof(NBT_HDR),                             sizeof(SMB_HDR) + writeX_len,                             _dcerpc->write_andx_buf, _dcerpc->write_andx_buf_len);dcerpc_fragfree:    /* Get ready for next write */    DCERPC_FragFree(_dcerpc->write_andx_buf, _dcerpc->write_andx_buf_size);    _dcerpc->write_andx_buf = NULL;    _dcerpc->write_andx_buf_len = 0;    _dcerpc->write_andx_buf_size = 0;    _dcerpc->fragmentation &= ~SMB_FRAGMENTATION;    _dcerpc->fragmentation &= ~SUSPEND_FRAGMENTATION;}int SMB_Fragmentation(u_int8_t *smb_hdr, SMB_WRITEX_REQ *writeX, u_int8_t *smb_data, u_int16_t data_size){    u_int16_t writeX_length, temp_len;    int       success = 0;    int ret = 0;    /* Check for fragmentation */    if ( _disable_smb_fragmentation )        return 0;    /* If not yet reassembling, attempt to parse as full DCE/RPC packet */    if ( !(_dcerpc->fragmentation & SMB_FRAGMENTATION) )    {        success = ProcessDCERPCMessage(smb_hdr, smb_data - smb_hdr, smb_data, data_size);        if ( success )            return 0;    }    /* Set up writeX buffer to save SMB data.  Ignore dataLengthHigh, since we won't        handle fragments that big.  */    writeX_length = data_size;    /* Allocate space for buffer        For now, ignore offset, since servers seem to */    if ( _dcerpc->fragmentation & SUSPEND_FRAGMENTATION )        return 0;    if ( _dcerpc->write_andx_buf == NULL )    {        if ( writeX_length > _max_frag_size )            writeX_length = _max_frag_size;        _dcerpc->write_andx_buf = (u_int8_t *) DCERPC_FragAlloc(NULL, 0, &writeX_length);        if ( writeX_length == 0 )        {            DEBUG_WRAP(DebugMessage(DEBUG_DCERPC, "Memcap reached, ignoring SMB fragmentation reassembly.\n"););            DCERPC_FragFree(_dcerpc->write_andx_buf, 0);            _dcerpc->write_andx_buf = NULL;            _dcerpc->fragmentation |= SUSPEND_FRAGMENTATION;            return 0;        }                if ( !_dcerpc->write_andx_buf )            DynamicPreprocessorFatalMessage("Failed to allocate space for first SMB Write AndX\n");        _dcerpc->write_andx_buf_size = writeX_length;        _dcerpc->write_andx_buf_len  = 0;    }    else    {        u_int16_t new_size;        if ( writeX_length > _max_frag_size )            writeX_length = _max_frag_size;        if ( _dcerpc->write_andx_buf_size >= (0xFFFF - writeX_length) )        {            DEBUG_WRAP(DebugMessage(DEBUG_DCERPC, "SMB fragmentation overflow.\n"););            _dcerpc->fragmentation |= SUSPEND_FRAGMENTATION;                        DCERPC_FragFree(_dcerpc->write_andx_buf, _dcerpc->write_andx_buf_size);            _dcerpc->write_andx_buf = NULL;            _dcerpc->write_andx_buf_len = 0;            _dcerpc->write_andx_buf_size = 0;            return 0;        }        new_size = _dcerpc->write_andx_buf_size + writeX_length;        _dcerpc->write_andx_buf = (u_int8_t *) DCERPC_FragAlloc(_dcerpc->write_andx_buf,                                             _dcerpc->write_andx_buf_size, &new_size);                    if ( new_size == _dcerpc->write_andx_buf_size )        {            DEBUG_WRAP(DebugMessage(DEBUG_DCERPC, "Memcap reached, suspending SMB fragmentation reassembly.\n"););            _dcerpc->fragmentation |= SUSPEND_FRAGMENTATION;                        DCERPC_FragFree(_dcerpc->write_andx_buf, _dcerpc->write_andx_buf_size);            _dcerpc->write_andx_buf = NULL;            _dcerpc->write_andx_buf_len = 0;            _dcerpc->write_andx_buf_size = 0;            return 0;        }        if ( !_dcerpc->write_andx_buf )            DynamicPreprocessorFatalMessage("Failed to reallocate space for SMB Write AndX\n");        _dcerpc->write_andx_buf_size = new_size;    }    /* SMB frag */    if ( writeX_length > (_dcerpc->write_andx_buf_size - _dcerpc->write_andx_buf_len) )    {        writeX_length = _dcerpc->write_andx_buf_size - _dcerpc->write_andx_buf_len;    }    /* Make sure data to be copied is within source buffer */    if ( (smb_data + writeX_length) > (_dcerpc_pkt->payload + _dcerpc_pkt->payload_size) )    {        temp_len = _dcerpc_pkt->payload + _dcerpc_pkt->payload_size - smb_data;        if ( writeX_length > temp_len )        {            writeX_length = temp_len;        }    }    ret = SafeMemcpy(_dcerpc->write_andx_buf + _dcerpc->write_andx_buf_len, smb_data, writeX_length,                     _dcerpc->write_andx_buf, _dcerpc->write_andx_buf + _dcerpc->write_andx_buf_size);    if (ret == 0)    {        DCERPC_FragFree(_dcerpc->write_andx_buf, _dcerpc->write_andx_buf_size);        _dcerpc->write_andx_buf = NULL;        _dcerpc->write_andx_buf_len = 0;        _dcerpc->write_andx_buf_size = 0;        _dcerpc->fragmentation |= SUSPEND_FRAGMENTATION;        return 0;    }    _dcerpc->write_andx_buf_len += writeX_length;    _dcerpc->fragmentation |= SMB_FRAGMENTATION;    if ( IsCompleteDCERPCMessage(_dcerpc->write_andx_buf, _dcerpc->write_andx_buf_len) )    {        ReassembleSMBWriteX(writeX, smb_data);        _dcerpc->fragmentation &= ~SMB_FRAGMENTATION;    }    return 0;}/* IPC$ has to occur at the end of this path - path_len should include null termination */static int IsIPC(u_int8_t *path, int path_len, u_int32_t isUnicode){    const u_int8_t ipc[] = {'I', 'P', 'C', '$', '\0'};    const u_int16_t ipc_len = 5;    const u_int8_t unicode_ipc[] = {'I', '\0', 'P', '\0', 'C', '\0', '$', '\0', '\0', '\0'};    const u_int16_t unicode_ipc_len = 10;    if (isUnicode)    {        if (path_len < unicode_ipc_len)            return 0;        /* go to end of path then back up the length of the          * unicode_ipc string */        path = (path + path_len) - unicode_ipc_len;        if (memcmp(path, unicode_ipc, unicode_ipc_len) == 0)            return 1;    }    else    {        if (path_len < ipc_len)            return 0;        /* go to end of path and back up the length of the         * ipc string */        path = (path + path_len) - ipc_len;        if (memcmp(path, ipc, ipc_len) == 0)            return 1;    }            return 0;}/* returns -1 if not null terminated  * returns -2 for other error * otherwise returns length of null terminated string * including null terminating bytes */static int GetSMBStringLength(u_int8_t *data, u_int16_t data_size, int unicode){    u_int16_t size_left;    if (data == NULL)        return -2;    size_left = data_size;    if (unicode)    {        while (size_left >= sizeof(uni_char_t))        {            size_left -= sizeof(uni_char_t);            if (*((uni_char_t *)data) == 0x0000)            {                return (int)(data_size - size_left);            }            data += sizeof(uni_char_t);        }    }    else    {        while (size_left >= sizeof(char))        {            size_left -= sizeof(char);            if (*((char *)data) == 0x00)            {                return (int)(data_size - size_left);            }            data += sizeof(char);        }    }    return -1;}#ifdef DEBUG_DCERPC_PRINTstatic void PrintSMBString(char *pre, u_int8_t *str, u_int16_t str_len, int unicode){    if (pre == NULL || str == NULL || str_len == 0)        return;    printf("%s", pre);    if (unicode)    {        int i = 0;        while (i < str_len)        {            printf("%c", str[i]);            i += sizeof(uni_char_t);        }    }    else    {        printf("%.*s", str_len, str);    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产福利在线观看| 亚洲精品免费播放| 蜜乳av一区二区| 日韩欧美在线不卡| 奇米888四色在线精品| 日韩欧美二区三区| 成人免费视频播放| 亚洲欧美日韩国产手机在线| 色哟哟一区二区在线观看| 亚洲电影中文字幕在线观看| 欧美日韩aaaaa| 国产精品麻豆久久久| 色视频成人在线观看免| 一区二区三区精品| 欧美一区二区黄色| 成人一区二区三区在线观看| 亚洲最大成人网4388xx| 欧美日韩精品一二三区| 国产在线视频一区二区| 中文字幕日本乱码精品影院| 欧美乱妇23p| 国产一区二区伦理片| 亚洲乱码中文字幕综合| 日韩亚洲电影在线| 99久久精品国产毛片| 日日摸夜夜添夜夜添亚洲女人| 亚洲精品一区二区三区蜜桃下载| av一二三不卡影片| 日本成人在线不卡视频| 国产精品无人区| 7777精品伊人久久久大香线蕉的| 国产伦精品一区二区三区免费迷| 亚洲女女做受ⅹxx高潮| 欧美精品一区二区三区在线| 99精品视频在线观看| 久久精品国产99国产| 最新成人av在线| 精品奇米国产一区二区三区| 日本高清免费不卡视频| 精品午夜久久福利影院| 亚洲一本大道在线| 日本一区二区免费在线| 69久久夜色精品国产69蝌蚪网| 成人性色生活片| 日本午夜一区二区| 一区二区三区四区蜜桃| 国产亚洲综合在线| 欧美一区二区不卡视频| 91女厕偷拍女厕偷拍高清| 国产精品一色哟哟哟| 三级欧美在线一区| 亚洲精品免费看| 国产精品视频免费看| 精品久久国产97色综合| 欧美影院一区二区| 91尤物视频在线观看| 成人在线一区二区三区| 美国一区二区三区在线播放| 亚洲一区欧美一区| 亚洲美女视频在线观看| 中文字幕五月欧美| 国产精品丝袜久久久久久app| 精品国产一区二区三区四区四 | 亚洲一区二区三区精品在线| 国产精品久久久久影院亚瑟| 久久综合九色综合欧美亚洲| 91精品黄色片免费大全| 欧美日韩国产综合久久| 在线观看亚洲a| 欧美性猛片xxxx免费看久爱| 欧美在线小视频| 欧美午夜精品免费| 色狠狠一区二区三区香蕉| www.66久久| 91香蕉视频污在线| 色一情一乱一乱一91av| 色94色欧美sute亚洲线路二| 97久久人人超碰| 色综合久久天天| 欧美日韩一二区| 欧美日韩免费观看一区三区| 欧美午夜精品一区二区三区| 欧美日韩性生活| 91麻豆精品国产91久久久久久久久| 欧美视频一区二区三区| 欧美老肥妇做.爰bbww视频| 欧美喷潮久久久xxxxx| 91精品麻豆日日躁夜夜躁| 69堂国产成人免费视频| 欧美不卡123| 国产农村妇女毛片精品久久麻豆| 亚洲国产高清在线观看视频| 国产精品热久久久久夜色精品三区| 欧美国产禁国产网站cc| 中文字幕中文字幕一区| 亚洲午夜一区二区| 蜜桃精品视频在线| 国产.精品.日韩.另类.中文.在线.播放| 国产经典欧美精品| 91亚洲精品久久久蜜桃| 欧美二区在线观看| 久久久影视传媒| 国产精品高潮久久久久无| 亚洲一区二区三区在线播放| 免费成人深夜小野草| 国产福利91精品| 一本久久a久久免费精品不卡| 欧美日韩国产a| 久久精品夜色噜噜亚洲aⅴ| 亚洲男同性视频| 日本不卡中文字幕| 成人久久久精品乱码一区二区三区| 色综合色综合色综合色综合色综合 | 国产成人无遮挡在线视频| 色综合久久中文综合久久牛| 91精品蜜臀在线一区尤物| 中文字幕第一区综合| 丝袜诱惑亚洲看片| 成人精品免费网站| 91精品国产高清一区二区三区蜜臀| 久久久久久97三级| 天堂va蜜桃一区二区三区漫画版 | 蜜臀va亚洲va欧美va天堂 | 在线观看亚洲精品视频| 日韩精品一区二| 一区二区三区在线免费播放| 精一区二区三区| 欧美视频一区二区| 国产精品福利一区二区三区| 日本不卡视频在线| 欧美在线三级电影| 国产精品高清亚洲| 国产成人免费高清| 欧美一区三区四区| 亚洲午夜羞羞片| 色综合色狠狠综合色| 欧美国产97人人爽人人喊| 男人操女人的视频在线观看欧美 | 一卡二卡欧美日韩| 国产成人8x视频一区二区| 欧美一区二区大片| 亚洲第一激情av| 在线免费观看成人短视频| 国产欧美一区二区三区在线看蜜臀| 日韩和欧美一区二区| 91福利资源站| 中文字幕字幕中文在线中不卡视频| 韩国精品在线观看| 欧美成人精精品一区二区频| 日韩精品亚洲一区二区三区免费| 99久久精品国产一区二区三区| 久久久精品国产免大香伊 | 国产亚洲一二三区| 精品午夜久久福利影院 | a美女胸又www黄视频久久| 欧美精品一区二区三区蜜桃视频| 亚洲成a人v欧美综合天堂下载| 91在线观看一区二区| 中文字幕在线视频一区| 国产一区在线看| 久久精品亚洲国产奇米99| 黑人精品欧美一区二区蜜桃 | 国产精品1区二区.| 久久久天堂av| 国产麻豆成人传媒免费观看| 久久久影视传媒| 风间由美性色一区二区三区| 久久夜色精品一区| 国产不卡免费视频| 国产精品丝袜久久久久久app| 高清av一区二区| 中文字幕在线观看不卡| 97久久超碰国产精品电影| 亚洲色大成网站www久久九九| www.欧美.com| 夜夜嗨av一区二区三区网页| 91福利精品视频| 午夜一区二区三区在线观看| 欧美日本高清视频在线观看| 日韩电影一二三区| 精品国产一区二区三区av性色| 国产真实精品久久二三区| 国产日韩精品一区| aaa欧美日韩| 亚洲二区在线视频| 精品少妇一区二区三区免费观看| 国产在线一区二区综合免费视频| 久久精品欧美日韩| 91在线观看视频| 亚洲国产精品麻豆| 精品处破学生在线二十三| 成人午夜精品在线| 亚洲午夜三级在线| 精品久久久久av影院| 99精品偷自拍| 天堂va蜜桃一区二区三区| 久久亚洲综合av| 在线观看免费亚洲| 极品尤物av久久免费看| 自拍视频在线观看一区二区|