Sha256: d7c4407b29b2d93853f3ca97eb1106c67ba19aafd56232f9a666b37c4d829f03

Contents?: true

Size: 766 Bytes

Versions: 38

Compression:

Stored size: 766 Bytes

Contents

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

38 entries across 38 versions & 1 rubygems

Version Path
librex-0.0.35 lib/rex/proto/smb/crypt.rb
librex-0.0.34 lib/rex/proto/smb/crypt.rb
librex-0.0.33 lib/rex/proto/smb/crypt.rb
librex-0.0.32 lib/rex/proto/smb/crypt.rb
librex-0.0.31 lib/rex/proto/smb/crypt.rb
librex-0.0.30 lib/rex/proto/smb/crypt.rb
librex-0.0.29 lib/rex/proto/smb/crypt.rb
librex-0.0.28 lib/rex/proto/smb/crypt.rb
librex-0.0.27 lib/rex/proto/smb/crypt.rb
librex-0.0.26 lib/rex/proto/smb/crypt.rb
librex-0.0.25 lib/rex/proto/smb/crypt.rb
librex-0.0.23 lib/rex/proto/smb/crypt.rb
librex-0.0.21 lib/rex/proto/smb/crypt.rb
librex-0.0.19 lib/rex/proto/smb/crypt.rb
librex-0.0.17 lib/rex/proto/smb/crypt.rb
librex-0.0.13 lib/rex/proto/smb/crypt.rb
librex-0.0.12 lib/rex/proto/smb/crypt.rb
librex-0.0.7 lib/rex/proto/smb/crypt.rb