Module: Rex::Encoder::NDR
- Defined in:
- lib/rex/encoder/ndr.rb
Defined Under Namespace
Classes: UnitTest
Class Method Summary collapse
-
.align(string) ⇒ Object
Provide padding to align the string to the 32bit boundary.
-
.byte(string) ⇒ Object
Encode a single byte use to encode: byte element_1;.
-
.long(string) ⇒ Object
Encode a 4 byte long use to encode: long element_1;.
-
.short(string) ⇒ Object
Encode a 2 byte short use to encode: short element_1;.
-
.string(string) ⇒ Object
Encode a string use to encode: char *element_1;.
-
.UnicodeConformantVaryingString(string) ⇒ Object
alias to wstring, going away soon.
-
.UnicodeConformantVaryingStringPreBuilt(string) ⇒ Object
alias to wstring_prebuilt, going away soon.
-
.UniConformantArray(string) ⇒ Object
Encode a byte array use to encode: char element_1.
-
.uwstring(string) ⇒ Object
Encode a string and make it unique use to encode: [unique] w_char *element_1;.
-
.wstring(string) ⇒ Object
Encode a string use to encode: w_char *element_1;.
-
.wstring_prebuilt(string) ⇒ Object
Encode a string that is already unicode encoded use to encode: w_char *element_1;.
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 |