More code from bmc, forgot to commit

git-svn-id: file:///home/svn/incoming/trunk@3164 4d416f70-5f16-0410-b530-b9f4589650da
unstable
HD Moore 2005-12-02 01:20:31 +00:00
parent 9b977bee1b
commit daa523ef70
6 changed files with 201 additions and 0 deletions

18
lib/rex/proto.ts.rb Normal file
View File

@ -0,0 +1,18 @@
#!/usr/bin/ruby
require 'test/unit'
require 'rex/proto/smb.ts'
require 'rex/proto/dcerpc.ts'
require 'rex/proto/http.ts'
class Rex::Proto::DCERPC::TestSuite
def self.suite
suite = Test::Unit::TestSuite.new("Rex::Proto::DCERPC::TestSuite")
suite << Rex::Proto::SMB::TestSuite.suite
suite << Rex::Proto::DCERPC::TestSuite.suite
suite << Rex::Proto::HTTP::TestSuite.suite
return suite
end
end

View File

@ -0,0 +1,21 @@
#!/usr/bin/ruby
require 'test/unit'
require 'rex/proto/dcerpc'
require 'rex/proto/dcerpc/uuid.rb.ut'
require 'rex/proto/dcerpc/response.rb.ut'
require 'rex/proto/dcerpc/packet.rb.ut'
require 'rex/proto/dcerpc/ndr.rb.ut'
class Rex::Proto::DCERPC::TestSuite
def self.suite
suite = Test::Unit::TestSuite.new("Rex::Proto::DCERPC::TestSuite")
suite << Rex::Proto::DCERPC::UUID::UnitTest.suite
suite << Rex::Proto::DCERPC::Response::UnitTest.suite
suite << Rex::Proto::DCERPC::Packet::UnitTest.suite
suite << Rex::Proto::DCERPC::NDR::UnitTest.suite
return suite
end
end

View File

@ -0,0 +1,64 @@
require "rex/text"
module Rex
module Proto
module DCERPC
class NDR
# Provide padding to align the string to the 32bit boundary
def self.align(string)
return "\x00" * ((4 - (string.length & 3)) & 3)
end
# Encode a 4 byte long
# use to encode:
# long element_1;
def self.long(string)
return [string].pack('V')
end
# Encode a 2 byte short
# use to encode:
# short element_1;
def self.short(string)
return [string].pack('v')
end
# Encode a single byte
# use to encode:
# byte element_1;
def self.byte(string)
return [string].pack('c')
end
# Encode a byte array
# use to encode:
# char element_1
def self.UniConformantArray(string)
return long(string.length) + string + align(string)
end
# Encode a string
# use to encode:
# w_char *element_1;
def self.UnicodeConformantVaryingString(string)
string += "\x00" # null pad
return long(string.length) + long(0) + long(string.length) + Rex::Text.to_unicode(string) + align(Rex::Text.to_unicode(string))
end
# Encode a string that is already unicode encoded
# use to encode:
# w_char *element_1;
def self.UnicodeConformantVaryingStringPreBuilt(string)
# if the string len is odd, thats bad!
if (string.length % 2)
string += "\x00"
end
return long(string.length / 2) + long(0) + long(string.length / 2) + string + align(string)
end
end
end
end
end

View File

@ -0,0 +1,41 @@
#!/usr/bin/ruby
$:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
require 'test/unit'
require 'rex/exceptions'
require 'rex/proto/dcerpc/ndr'
class Rex::Proto::DCERPC::NDR::UnitTest < Test::Unit::TestCase
Klass = Rex::Proto::DCERPC::NDR
def test_align
assert_equal(Klass.align('').length, 0, 'align 0')
assert_equal(Klass.align('f').length, 3, 'align 1')
assert_equal(Klass.align('fo').length, 2, 'align 2')
assert_equal(Klass.align('foo').length, 1, 'align 3')
assert_equal(Klass.align('fooo').length, 0, 'align 4')
assert_equal(Klass.align('foooo').length, 3, 'align 5')
end
def test_numbers
assert_equal(Klass.long(10), "\x0a\x00\x00\x00", 'long')
assert_equal(Klass.short(10), "\x0a\x00", 'short')
assert_equal(Klass.byte(10), "\x0a", 'byte')
end
def test_conformant_array
assert_equal(Klass.UniConformantArray('aaaaa').slice(0,9), "\x05\x00\x00\x00aaaaa", 'UniConformantArray')
assert_equal(Klass.UniConformantArray('aaaaa').length, 12, 'UniConformantArray length')
end
def test_conformant_string
assert_equal(Klass.UnicodeConformantVaryingString('aaaaa').slice(0,4+4+4+12), "\x06\x00\x00\x00" + "\x00\x00\x00\x00" + "\x06\x00\x00\x00" "a\x00a\x00a\x00a\x00a\x00\x00\x00", 'UniConformantVaryingString')
assert_equal(Klass.UnicodeConformantVaryingString('aaaaa').length, 24, 'UniConformantVaryingString length')
assert_equal(Klass.UnicodeConformantVaryingStringPreBuilt('aaaaa').slice(0,4+4+4+6), "\x03\x00\x00\x00" + "\x00\x00\x00\x00" + "\x03\x00\x00\x00" "aaaaa\x00", 'UniConformantVaryingStringPreBuilt')
assert_equal(Klass.UnicodeConformantVaryingStringPreBuilt('aaaaa').length, 20, 'UniConformantVaryingStringPreBuilt length')
end
end

29
lib/rex/proto/http.ts.rb Normal file
View File

@ -0,0 +1,29 @@
#!/usr/bin/ruby
require 'test/unit'
require 'rex/proto/http'
require 'rex/proto/http/client.rb.ut'
require 'rex/proto/http/server.rb.ut'
require 'rex/proto/http/packet.rb.ut'
require 'rex/proto/http/request.rb.ut'
require 'rex/proto/http/response.rb.ut'
require 'rex/proto/http/handler/erb.rb.ut'
require 'rex/proto/http/handler/proc.rb.ut'
class Rex::Proto::Http::TestSuite
def self.suite
suite = Test::Unit::TestSuite.new("Rex::Proto::Http::TestSuite")
suite << Rex::Proto::Http::Client::UnitTest.suite
suite << Rex::Proto::Http::Server::UnitTest.suite
suite << Rex::Proto::Http::Packet::UnitTest.suite
suite << Rex::Proto::Http::Request::UnitTest.suite
suite << Rex::Proto::Http::Response::UnitTest.suite
suite << Rex::Proto::Http::Handler::ERB::UnitTest.suite
suite << Rex::Proto::Http::Handler::Proc::UnitTest.suite
return suite
end
end

28
lib/rex/proto/smb.ts.rb Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/ruby
require 'test/unit'
require 'rex/proto/dcerpc'
require 'rex/proto/dcerpc/uuid.rb.ut'
require 'rex/proto/dcerpc/response.rb.ut'
require 'rex/proto/dcerpc/packet.rb.ut'
require 'rex/proto/smb/client.rb.ut.rb'
require 'rex/proto/smb/constants.rb.ut.rb'
require 'rex/proto/smb/crypt.rb.ut.rb'
require 'rex/proto/smb/simpleclient.rb.ut.rb'
require 'rex/proto/smb/utils.rb.ut.rb'
class Rex::Proto::SMB::TestSuite
def self.suite
suite = Test::Unit::TestSuite.new("Rex::Proto::SMB::TestSuite")
suite << Rex::Proto::SMB::Client::UnitTest.suite
suite << Rex::Proto::SMB::Constants::UnitTest.suite
suite << Rex::Proto::SMB::Crypt::UnitTest.suite
suite << Rex::Proto::SMB::SimpleClient::UnitTest.suite
suite << Rex::Proto::SMB::Utils::UnitTest.suite
return suite
end
end