module Rex::Encoder::NDR

Private Class Methods

UniConformantArray(string) click to toggle source

Encode a byte array use to encode:

char  element_1
# File lib/rex/encoder/ndr.rb, line 36
def NDR.UniConformantArray(string)
  return long(string.length) + string + align(string)
end
UnicodeConformantVaryingString(string) click to toggle source

alias to wstring, going away soon

# File lib/rex/encoder/ndr.rb, line 77
def NDR.UnicodeConformantVaryingString(string)
  NDR.wstring(string)
end
UnicodeConformantVaryingStringPreBuilt(string) click to toggle source

alias to wstring_prebuilt, going away soon

# File lib/rex/encoder/ndr.rb, line 82
def NDR.UnicodeConformantVaryingStringPreBuilt(string)
  NDR.wstring_prebuilt(string)
end
align(string) click to toggle source

Provide padding to align the string to the 32bit boundary

# File lib/rex/encoder/ndr.rb, line 8
def NDR.align(string)
  return "\x00" * ((4 - (string.length & 3)) & 3)
end
byte(string) click to toggle source

Encode a single byte use to encode:

byte element_1;
# File lib/rex/encoder/ndr.rb, line 29
def NDR.byte(string)
  return [string].pack('C')
end
long(string) click to toggle source

Encode a 4 byte long use to encode:

long element_1;
# File lib/rex/encoder/ndr.rb, line 15
def NDR.long(string)
  return [string].pack('V')
end
short(string) click to toggle source

Encode a 2 byte short use to encode:

short element_1;
# File lib/rex/encoder/ndr.rb, line 22
def NDR.short(string)
  return [string].pack('v')
end
string(string) click to toggle source

Encode a string use to encode:

char *element_1;
# 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
uwstring(string) click to toggle source

Encode a string and make it unique use to encode:

[unique] w_char *element_1;
# 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) click to toggle source

Encode a string use to encode:

w_char *element_1;
# 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) click to toggle source

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

w_char *element_1;
# 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