|
|
|
|
@ -22,6 +22,7 @@
|
|
|
|
|
|
|
|
|
|
#include "util-binsearch.h"
|
|
|
|
|
#include "util-unittest.h"
|
|
|
|
|
#include "util-debug.h"
|
|
|
|
|
|
|
|
|
|
#include "app-layer-smb2.h"
|
|
|
|
|
|
|
|
|
|
@ -34,7 +35,7 @@ enum {
|
|
|
|
|
SMB_FIELD_MAX,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define DEBUG 1
|
|
|
|
|
//#define DEBUG 1
|
|
|
|
|
static int NBSSParseHeader(void *smb2_state, AppLayerParserState *pstate,
|
|
|
|
|
uint8_t *input, uint32_t input_len, AppLayerParserResult *output) {
|
|
|
|
|
SMB2State *sstate = (SMB2State *) smb2_state;
|
|
|
|
|
@ -84,7 +85,7 @@ static int SMB2ParseHeader(void *smb2_state, AppLayerParserState *pstate,
|
|
|
|
|
case 4:
|
|
|
|
|
if (input_len >= SMB2_HDR_LEN) {
|
|
|
|
|
if (memcmp(p, "\xfe\x53\x4d\x42", 4) != 0) {
|
|
|
|
|
printf("SMB2 Header did not validate\n");
|
|
|
|
|
//printf("SMB2 Header did not validate\n");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
sstate->smb2.StructureSize = *(p + 4);
|
|
|
|
|
@ -361,7 +362,7 @@ static int SMB2ParseHeader(void *smb2_state, AppLayerParserState *pstate,
|
|
|
|
|
return (p - input);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int SMB2Parse(void *smb2_state, AppLayerParserState *pstate,
|
|
|
|
|
static int SMB2Parse(Flow *f, void *smb2_state, AppLayerParserState *pstate,
|
|
|
|
|
uint8_t *input, uint32_t input_len, AppLayerParserResult *output) {
|
|
|
|
|
SMB2State *sstate = (SMB2State *) smb2_state;
|
|
|
|
|
uint32_t retval = 0;
|
|
|
|
|
@ -370,11 +371,12 @@ static int SMB2Parse(void *smb2_state, AppLayerParserState *pstate,
|
|
|
|
|
if (pstate == NULL)
|
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
|
|
while (sstate->bytesprocessed < NBSS_HDR_LEN) {
|
|
|
|
|
while (sstate->bytesprocessed < NBSS_HDR_LEN && input_len) {
|
|
|
|
|
retval = NBSSParseHeader(smb2_state, pstate, input, input_len, output);
|
|
|
|
|
parsed += retval;
|
|
|
|
|
input_len -= retval;
|
|
|
|
|
printf("\nNBSS Header (%u/%u) Type 0x%02x Length 0x%04x parsed %u input_len %u\n",
|
|
|
|
|
|
|
|
|
|
SCLogDebug("NBSS Header (%u/%u) Type 0x%02x Length 0x%04x parsed %u input_len %u",
|
|
|
|
|
sstate->bytesprocessed, NBSS_HDR_LEN, sstate->nbss.type,
|
|
|
|
|
sstate->nbss.length, parsed, input_len);
|
|
|
|
|
}
|
|
|
|
|
@ -386,7 +388,8 @@ static int SMB2Parse(void *smb2_state, AppLayerParserState *pstate,
|
|
|
|
|
retval = SMB2ParseHeader(smb2_state, pstate, input + parsed, input_len, output);
|
|
|
|
|
parsed += retval;
|
|
|
|
|
input_len -= retval;
|
|
|
|
|
printf("SMB2 Header (%u/%u) Command 0x%04x parsed %u input_len %u\n",
|
|
|
|
|
|
|
|
|
|
SCLogDebug("SMB2 Header (%u/%u) Command 0x%04x parsed %u input_len %u",
|
|
|
|
|
sstate->bytesprocessed, NBSS_HDR_LEN + SMB2_HDR_LEN,
|
|
|
|
|
sstate->smb2.Command, parsed, input_len);
|
|
|
|
|
}
|
|
|
|
|
|