Skip to content

Commit

Permalink
Remove unnecessary logic from ClassWithId
Browse files Browse the repository at this point in the history
  • Loading branch information
zeroSteiner committed Apr 15, 2020
1 parent 6ae3df6 commit 2331948
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 21 deletions.
21 changes: 2 additions & 19 deletions lib/msf/util/dot_net_deserialization/types/record_values.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,41 +35,24 @@ class ClassWithId < BinData::Record
# see: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nrbf/2d168388-37f4-408a-b5e0-e48dbce73e26
RECORD_TYPE = Enums::RecordTypeEnum[:ClassWithId]
endian :little
optional_parameters :class_info, :member_type_info
obj_id :obj_id
int32 :metadata_id
member_values :member_values, class_info: -> { class_info }, member_type_info: -> { member_type_info }

def class_info
ci = eval_parameter(:ex_class_info)
return ci unless ci.nil?

stream = DotNetDeserialization.get_ancestor(self, SerializedStream)
object = stream.get_object(metadata_id)
object.class_info
end

def member_type_info
mti = eval_parameter(:ex_member_type_info)
return mti unless mti.nil?

stream = DotNetDeserialization.get_ancestor(self, SerializedStream)
object = stream.get_object(metadata_id)
object.member_type_info
end

def self.from_member_values(class_info:, member_type_info:, member_values:, **kwargs)
raise ::ArgumentError, 'Invalid member count' unless class_info.member_count == member_values.length

kwargs[:member_values] = Types::Primitives::MemberValues.new(
member_values,
class_info: class_info,
member_type_info: member_type_info
)

# pass class_info and member_type_info as *both* a value and a parameter
self.new(kwargs, ex_class_info: class_info, ex_member_type_info: member_type_info)
end
include Primitives::MemberValues::Factory
self.singleton_class.include Primitives::MemberValues::Factory
end

class ClassWithMembersAndTypes < BinData::Record
Expand Down
3 changes: 1 addition & 2 deletions spec/lib/msf/util/dot_net_deserialization_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@

it 'generates parsable gadget chains' do
Msf::Util::DotNetDeserialization::GadgetChains::NAMES.each do |gadget_chain|
stream = Msf::Util::DotNetDeserialization.generate(COMMAND, gadget_chain: gadget_chain)
serialized = stream
serialized = Msf::Util::DotNetDeserialization.generate(COMMAND, gadget_chain: gadget_chain)
stream = Msf::Util::DotNetDeserialization::Types::SerializedStream.new
stream.read(serialized)
expect(stream.to_binary_s).to eq serialized
Expand Down

0 comments on commit 2331948

Please sign in to comment.