Files
2021-09-05 23:21:37 -05:00

61 lines
956 B
C

/**
*
* Reflective Loader
*
* GuidePoint Security LLC
*
* Threat and Attack Simulation
*
**/
#include "Common.h"
/*!
*
* Purpose:
*
* Creates a hash summary of the input buffer.
* If a length is not provided, it assumes it
* is NULL terminated.
*
!*/
D_SEC( E ) UINT32 HashString( _In_ PVOID Buffer, _In_opt_ ULONG Length )
{
UCHAR Cur = 0;
ULONG Djb = 0;
PUCHAR Ptr = NULL;
Djb = 5381;
Ptr = C_PTR( Buffer );
while ( TRUE ) {
/* Get the current character */
Cur = * Ptr;
if ( ! Length ) {
/* NULL terminated? */
if ( ! * Ptr ) {
break;
};
} else {
/* Position exceed the length of the buffer? */
if ( ( ULONG )( Ptr - ( PUCHAR ) Buffer ) >= Length ) {
break;
};
/* NULL terminated? */
if ( ! * Ptr ) {
++Ptr; continue;
};
};
/* Lowercase */
if ( Cur >= 'a' ) {
Cur -= 0x20;
};
/* Hash the character */
Djb = ( ( Djb << 5 ) + Djb ) + Cur; ++Ptr;
};
return Djb;
};