Sha256: ccc0f0f006524cdb892a34b5f71bd83835fc1ff93bc84b25292e059ca12de24f

Contents?: true

Size: 789 Bytes

Versions: 2

Compression:

Stored size: 789 Bytes

Contents

# -*- coding: binary -*-
require 'rex/text'

module Rex
module Proto
module SMB
class Crypt

	@@loaded_openssl = false

	begin
		require 'openssl'
		@@loaded_openssl = true
	rescue ::Exception
	end

	# Return a signed SMB packet
	def self.sign_smb_packet(mackey, sequence_counter, data)
		raise RuntimeError, "No OpenSSL support" if not @@loaded_openssl
		seq = Rex::Text::pack_int64le(sequence_counter)
		netbios_hdr = data.slice!(0,4)
		data[14,8] = seq
		signature = OpenSSL::Digest::MD5.digest(mackey + data)[0,8]
		data[14,8] = signature
		netbios_hdr + data
	end

	def self.is_signature_correct?(mackey, sequence_counter, data)
		signature1 = data[18,8]
		signature2 = sign_smb_packet(mackey, sequence_counter, data.dup)[18,8]
		return signature1 == signature2
	end

end
end
end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
librex-0.0.68 lib/rex/proto/smb/crypt.rb
librex-0.0.66 lib/rex/proto/smb/crypt.rb