module Msf module Util module DotNetDeserialization module Assemblies # see: # * https://docs.microsoft.com/en-us/dotnet/standard/assembly/ # * https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/versions-and-dependencies # * https://docs.microsoft.com/en-us/dotnet/standard/assembly/reference-strong-named class StrongName def initialize(name, version, public_key_token, culture: 'neutral') @name = name @version = version @public_key_token = public_key_token @culture = culture end attr_reader :name, :version, :public_key_token, :culture def to_s "#{name}, Version=#{version}, Culture=#{culture}, PublicKeyToken=#{public_key_token}" end def [](type_name) QualifiedName.new(type_name, self) end end # see: https://docs.microsoft.com/en-us/dotnet/api/system.type.assemblyqualifiedname class QualifiedName def initialize(name, assembly) @name = name @assembly = assembly end attr_reader :name, :assembly def to_s "#{name}, #{assembly}" end end VERSIONS = { '4.0.0.0' => { 'mscorlib' => StrongName.new('mscorlib', '4.0.0.0', 'b77a5c561934e089'), 'System' => StrongName.new('System', '4.0.0.0', 'b77a5c561934e089'), 'System.Configuration.Install' => StrongName.new('System.Configuration.Install', '4.0.0.0', 'b03f5f7f11d50a3a'), 'System.Data' => StrongName.new('System.Data', '4.0.0.0', 'b77a5c561934e089') } } end end end end