Class: Rex::Java::Serialization::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/rex/java/serialization/builder.rb

Overview

This class provides a builder to help in the construction of Java serialized contents.

Instance Method Summary collapse

Instance Method Details

#new_array(opts = {}) ⇒ Rex::Java::Serialization::Model::NewArray

Creates a Rex::Java::Serialization::Model::NewArray

Parameters:

Options Hash (opts):

Returns:

See Also:



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/rex/java/serialization/builder.rb', line 18

def new_array(opts = {})
  class_desc = opts[:description] || new_class(opts)
  type = opts[:values_type] || ''
  values = opts[:values] || []

  array = Rex::Java::Serialization::Model::NewArray.new
  array.array_description = Rex::Java::Serialization::Model::ClassDesc.new
  array.array_description.description = class_desc
  array.type = type
  array.values = values

  array
end

#new_class(opts = {}) ⇒ Rex::Java::Serialization::Model::NewClassDesc

Creates a Rex::Java::Serialization::Model::NewClassDesc

Parameters:

Options Hash (opts):

Returns:



61
62
63
64
65
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
# File 'lib/rex/java/serialization/builder.rb', line 61

def new_class(opts = {})
  class_name = opts[:name] || ''
  serial_version = opts[:serial] || 0
  flags = opts[:flags] || 2
  fields = opts[:fields] || []
  annotations = opts[:annotations] || [Rex::Java::Serialization::Model::NullReference.new,
                                       Rex::Java::Serialization::Model::EndBlockData.new]
  super_class = opts[:super_class] || Rex::Java::Serialization::Model::NullReference.new

  class_desc = Rex::Java::Serialization::Model::NewClassDesc.new
  class_desc.class_name = Rex::Java::Serialization::Model::Utf.new(nil, class_name)
  class_desc.serial_version = serial_version
  class_desc.flags = flags
  class_desc.fields = []

  fields.each do |f|
    field = Rex::Java::Serialization::Model::Field.new
    field.type = f[0]
    field.name = Rex::Java::Serialization::Model::Utf.new(nil, f[1])
    field.field_type = Rex::Java::Serialization::Model::Utf.new(nil, f[2]) if f[2]
    class_desc.fields << field
  end

  class_desc.class_annotation = Rex::Java::Serialization::Model::Annotation.new
  class_desc.class_annotation.contents = annotations
  class_desc.super_class = Rex::Java::Serialization::Model::ClassDesc.new
  class_desc.super_class.description = super_class

  class_desc
end

#new_object(opts = {}) ⇒ Rex::Java::Serialization::Model::NewObject

Creates a Rex::Java::Serialization::Model::NewObject

Parameters:

Options Hash (opts):

Returns:

See Also:



39
40
41
42
43
44
45
46
47
48
49
# File 'lib/rex/java/serialization/builder.rb', line 39

def new_object(opts = {})
  class_desc = opts[:description] || new_class(opts)
  data = opts[:data] || []

  object = Rex::Java::Serialization::Model::NewObject.new
  object.class_desc = Rex::Java::Serialization::Model::ClassDesc.new
  object.class_desc.description = class_desc
  object.class_data = data

  object
end