Module: Rex::Encoder::NDR

Defined in:
lib/rex/encoder/ndr.rb

Defined Under Namespace

Classes: UnitTest

Class Method Summary collapse

Class Method Details

.align(string) ⇒ Object

Provide padding to align the string to the 32bit boundary



8
9
10
# File 'lib/rex/encoder/ndr.rb', line 8

def NDR.align(string)
	return "\x00" * ((4 - (string.length & 3)) & 3)
end

.byte(string) ⇒ Object

Encode a single byte use to encode:

byte element_1;


29
30
31
# File 'lib/rex/encoder/ndr.rb', line 29

def NDR.byte(string)
	return [string].pack('c')
end

.long(string) ⇒ Object

Encode a 4 byte long use to encode:

long element_1;


15
16
17
# File 'lib/rex/encoder/ndr.rb', line 15

def NDR.long(string)
	return [string].pack('V')
end

.short(string) ⇒ Object

Encode a 2 byte short use to encode:

short element_1;


22
23
24
# File 'lib/rex/encoder/ndr.rb', line 22

def NDR.short(string)
	return [string].pack('v')
end

.string(string) ⇒ Object

Encode a string use to encode:

char *element_1;


43
44
45
46
# File 'lib/rex/encoder/ndr.rb', line 43

def NDR.string(string)
	string << "\x00" # null pad
	return long(string.length) + long(0) + long(string.length) + string + align(string)
end

.UnicodeConformantVaryingString(string) ⇒ Object

alias to wstring, going away soon



77
78
79
# File 'lib/rex/encoder/ndr.rb', line 77

def NDR.UnicodeConformantVaryingString(string)
	NDR.wstring(string)
end

.UnicodeConformantVaryingStringPreBuilt(string) ⇒ Object

alias to wstring_prebuilt, going away soon



82
83
84
# File 'lib/rex/encoder/ndr.rb', line 82

def NDR.UnicodeConformantVaryingStringPreBuilt(string)
	NDR.wstring_prebuilt(string)
end

.UniConformantArray(string) ⇒ Object

Encode a byte array use to encode:

char  element_1


36
37
38
# File 'lib/rex/encoder/ndr.rb', line 36

def NDR.UniConformantArray(string)
	return long(string.length) + string + align(string)
end

.uwstring(string) ⇒ Object

Encode a string and make it unique use to encode:

[unique] w_char *element_1;


59
60
61
62
# File 'lib/rex/encoder/ndr.rb', line 59

def NDR.uwstring(string)
	string  = string + "\x00" # null pad
	return long(rand(0xffffffff))+long(string.length) + long(0) + long(string.length) + Rex::Text.to_unicode(string) + align(Rex::Text.to_unicode(string))
end

.wstring(string) ⇒ Object

Encode a string use to encode:

w_char *element_1;


51
52
53
54
# File 'lib/rex/encoder/ndr.rb', line 51

def NDR.wstring(string)
	string  = string + "\x00" # null pad
	return long(string.length) + long(0) + long(string.length) + Rex::Text.to_unicode(string) + align(Rex::Text.to_unicode(string))
end

.wstring_prebuilt(string) ⇒ Object

Encode a string that is already unicode encoded use to encode:

w_char *element_1;


67
68
69
70
71
72
73
74
# File 'lib/rex/encoder/ndr.rb', line 67

def NDR.wstring_prebuilt(string)
	# if the string len is odd, thats bad!
	if string.length % 2 > 0
		string = string + "\x00"
	end
	len = string.length / 2;
	return long(len) + long(0) + long(len) + string + align(string)
end