Method: Rex::Java::Serialization::Model::Contents#encode_content

Defined in:
lib/rex/java/serialization/model/contents.rb

#encode_content(content) ⇒ String

Serializes a content

Parameters:

Returns:

  • (String)

    if serialization succeeds

Raises:



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/rex/java/serialization/model/contents.rb', line 66

def encode_content(content)
  encoded = ''

  case content
  when BlockData
    encoded << [TC_BLOCKDATA].pack('C')
  when BlockDataLong
    encoded << [TC_BLOCKDATALONG].pack('C')
  when EndBlockData
    encoded << [TC_ENDBLOCKDATA].pack('C')
  when NewObject
    encoded << [TC_OBJECT].pack('C')
  when NewClass
    encoded << [TC_CLASS].pack('C')
  when NewArray
    encoded << [TC_ARRAY].pack('C')
  when Utf
    encoded << [TC_STRING].pack('C')
  when LongUtf
    encoded << [TC_LONGSTRING].pack('C')
  when NewEnum
    encoded << [TC_ENUM].pack('C')
  when NewClassDesc
    encoded << [TC_CLASSDESC].pack('C')
  when ProxyClassDesc
    encoded << [TC_PROXYCLASSDESC].pack('C')
  when NullReference
    encoded << [TC_NULL].pack('C')
  when Reset
    encoded << [TC_RESET].pack('C')
  when Reference
    encoded << [TC_REFERENCE].pack('C')
  else
    raise Rex::Java::Serialization::EncodeError, 'Failed to serialize content'
  end

  encoded << content.encode
  encoded
end