rex-ole 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,46 @@
1
+ # -*- coding: binary -*-
2
+
3
+ ##
4
+ # Rex::OLE - an OLE implementation
5
+ # written in 2010 by Joshua J. Drake <jduck [at] metasploit.com>
6
+ ##
7
+
8
+ module Rex
9
+ module OLE
10
+
11
+ class SubStorage < DirEntry
12
+
13
+ def initialize(stg)
14
+ super
15
+
16
+ @_mse = STGTY_STORAGE
17
+ end
18
+
19
+
20
+ def close
21
+ end
22
+
23
+
24
+ # stream handling stuff
25
+ def create_stream(name, mode=STGM_WRITE)
26
+ @stg.create_stream(name, mode, self)
27
+ end
28
+
29
+ def open_stream(name, mode=STGM_READ)
30
+ @stg.open_stream(name, mode, self)
31
+ end
32
+
33
+
34
+ # storage handling stuff
35
+ def create_storage(name, mode=STGM_WRITE)
36
+ @stg.create_storage(name, mode, self)
37
+ end
38
+
39
+ def open_storage(name, mode=STGM_WRITE)
40
+ @stg.open_storage(name, mode, self)
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,154 @@
1
+ # -*- coding: binary -*-
2
+
3
+ ##
4
+ # Rex::OLE - an OLE implementation
5
+ # written in 2010 by Joshua J. Drake <jduck [at] metasploit.com>
6
+ ##
7
+
8
+ module Rex
9
+ module OLE
10
+
11
+ class Util
12
+
13
+ def self.Hexify32array(arr)
14
+ ret = ""
15
+ arr.each { |dw|
16
+ ret << " " if ret.length > 0
17
+ ret << "0x%08x" % dw
18
+ }
19
+ ret
20
+ end
21
+
22
+ def self.Printable(buf)
23
+ ret = ""
24
+ buf.unpack('C*').each { |byte|
25
+ ch = byte.chr
26
+ if (byte < 0x20 || byte > 0x7e)
27
+ ret << "\\x" + ch.unpack('H*')[0]
28
+ else
29
+ ret << ch
30
+ end
31
+ }
32
+ ret
33
+ end
34
+
35
+
36
+ def self.set_endian(endian)
37
+ @endian = endian
38
+ end
39
+
40
+ def self.get64(buf, offset)
41
+ @endian = LITTLE_ENDIAN if not @endian
42
+ if (@endian == LITTLE_ENDIAN)
43
+ arr = buf[offset,8].unpack('VV')
44
+ return (arr[0] + (arr[1] << 32))
45
+ else
46
+ arr = buf[offset,8].unpack('NN')
47
+ return ((arr[0] << 32) + arr[1])
48
+ end
49
+ end
50
+
51
+ def self.pack64(value)
52
+ @endian = LITTLE_ENDIAN if not @endian
53
+ arr = []
54
+ arr << (value & 0xffffffff)
55
+ arr << (value >> 32)
56
+ if (@endian == LITTLE_ENDIAN)
57
+ arr.pack('VV')
58
+ else
59
+ arr.reverse.pack('NN')
60
+ end
61
+ end
62
+
63
+ def self.get32(buf, offset)
64
+ @endian = LITTLE_ENDIAN if not @endian
65
+ if (@endian == LITTLE_ENDIAN)
66
+ buf[offset,4].unpack('V')[0]
67
+ else
68
+ buf[offset,4].unpack('N')[0]
69
+ end
70
+ end
71
+
72
+ def self.pack32(value)
73
+ @endian = LITTLE_ENDIAN if not @endian
74
+ if (@endian == LITTLE_ENDIAN)
75
+ [value].pack('V')
76
+ else
77
+ [value].pack('N')
78
+ end
79
+ end
80
+
81
+ def self.get32array(buf)
82
+ @endian = LITTLE_ENDIAN if not @endian
83
+ if (@endian == LITTLE_ENDIAN)
84
+ buf.unpack('V*')
85
+ else
86
+ buf.unpack('N*')
87
+ end
88
+ end
89
+
90
+ def self.pack32array(arr)
91
+ @endian = LITTLE_ENDIAN if not @endian
92
+ if (@endian == LITTLE_ENDIAN)
93
+ arr.pack('V*')
94
+ else
95
+ arr.pack('N*')
96
+ end
97
+ end
98
+
99
+ def self.get16(buf, offset)
100
+ @endian = LITTLE_ENDIAN if not @endian
101
+ if (@endian == LITTLE_ENDIAN)
102
+ buf[offset,2].unpack('v')[0]
103
+ else
104
+ buf[offset,2].unpack('n')[0]
105
+ end
106
+ end
107
+
108
+ def self.pack16(value)
109
+ @endian = LITTLE_ENDIAN if not @endian
110
+ if (@endian == LITTLE_ENDIAN)
111
+ [value].pack('v')
112
+ else
113
+ [value].pack('n')
114
+ end
115
+ end
116
+
117
+ def self.get8(buf, offset)
118
+ buf[offset,1].unpack('C')[0]
119
+ end
120
+
121
+ def self.pack8(value)
122
+ [value].pack('C')
123
+ end
124
+
125
+
126
+ def self.getUnicodeString(buf)
127
+ buf = buf.unpack('v*').pack('C*')
128
+ if (idx = buf.index(0x00.chr))
129
+ buf.slice!(idx, buf.length)
130
+ end
131
+ buf
132
+ end
133
+
134
+ def self.putUnicodeString(buf)
135
+ buf = buf.unpack('C*').pack('v*')
136
+ if (buf.length < 0x40)
137
+ buf << "\x00" * (0x40 - buf.length)
138
+ end
139
+ buf
140
+ end
141
+
142
+
143
+ def self.name_is_valid(name)
144
+ return nil if (name.length > 31)
145
+ (0..0x1f).to_a.each { |x|
146
+ return nil if (name.include?(x.chr))
147
+ }
148
+ return true
149
+ end
150
+
151
+ end
152
+
153
+ end
154
+ end
@@ -0,0 +1,5 @@
1
+ module Rex
2
+ module OLE
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
data/lib/rex/ole.rb ADDED
@@ -0,0 +1,203 @@
1
+ # -*- coding: binary -*-
2
+
3
+ ##
4
+ # Rex::OLE - an OLE implementation
5
+ # written in 2010 by Joshua J. Drake <jduck [at] metasploit.com>
6
+ #
7
+ # License: MSF_LICENSE
8
+ #
9
+ #
10
+ # This module implements Object-Linking-and-Embedding otherwise known as
11
+ # Compound File Binary File Format or Windows Compound Binary File Format.
12
+ # OLE is the container format for modern Excel, Word, PowerPoint, and many
13
+ # other file formats.
14
+ #
15
+ # NOTE: This implementation is almost fully compliant with [MS-CFB] v1.1
16
+ #
17
+ #
18
+ # SUPPORTS:
19
+ #
20
+ # 1. R/W v3 OLE files (v4 may work, but wasn't tested)
21
+ # 2. RO double-indirect fat sectors
22
+ # 3. RO fat sectors (including those in double-indirect parts)
23
+ # 4. WO support for less than 109 fat sectors :)
24
+ # 5. R/W minifat sectors
25
+ # 6. R/W ministream
26
+ # 7. R/W normal streams
27
+ # 8. R/W substorages (including nesting)
28
+ # 9. full directory support (hierarchal and flattened access)
29
+ # 10. big and little endian files (although only little endian was tested)
30
+ # 11. PropertySet streams (except .to_s)
31
+ #
32
+ #
33
+ # TODO (in order of priority):
34
+ #
35
+ # 1. support deleting storages/streams
36
+ # 2. create copyto and other typical interface functions
37
+ # 3. support writing DIF sectors > 109
38
+ # - may lead to allocating more fat sectors :-/
39
+ # 4. properly support mode params for open_stream/open_storage/etc
40
+ # 5. optimize to prevent unecessary loading/writing
41
+ # 6. support non-committal editing (open, change, close w/o save)
42
+ # 7. support timestamps
43
+ # 8. provide interface to change paramters (endian, etc)
44
+ #
45
+ #
46
+ # TO INVESTIGATE:
47
+ #
48
+ # 1. moving storage interface functions into something used by both
49
+ # the main storage and substorages (unifying the code) (mixin?)
50
+ # 2. eliminating flattening the directory prior to writing it out
51
+ #
52
+ ##
53
+
54
+ require 'rex/ole/version'
55
+ require 'rex/text'
56
+
57
+ module Rex
58
+ module OLE
59
+
60
+ # misc util
61
+ # NOTE: the v1.1 spec says that everything "MUST be stored in little-endian byte order"
62
+ BIG_ENDIAN = 0xfeff
63
+ LITTLE_ENDIAN = 0xfffe
64
+ # defines Util class
65
+ require 'rex/ole/util'
66
+ require 'rex/ole/clsid'
67
+
68
+
69
+ # constants for dealing with the header
70
+ HDR_SZ = 512
71
+ # signatures
72
+ SIG = "\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1"
73
+ SIG_BETA = "\x0e\x11\xfc\x0d\xd0\xcf\x11\xe0"
74
+ # defines Header class
75
+ require 'rex/ole/header'
76
+
77
+
78
+ # sector types
79
+ SECT_MAX = 0xfffffffa
80
+ SECT_DIF = 0xfffffffc
81
+ SECT_FAT = 0xfffffffd
82
+ SECT_END = 0xfffffffe
83
+ SECT_FREE = 0xffffffff
84
+ # defines DIFAT class
85
+ require 'rex/ole/difat'
86
+ # defines FAT class
87
+ require 'rex/ole/fat'
88
+ # defines MiniFAT class
89
+ require 'rex/ole/minifat'
90
+
91
+
92
+ # directory entries
93
+ DIRENTRY_SZ = 128
94
+ DIR_NOSTREAM = 0xffffffff
95
+ DIR_MAXREGSID = 0xfffffffa
96
+ # defines Directory class
97
+ require 'rex/ole/directory'
98
+
99
+ # types
100
+ STGTY_INVALID = 0
101
+ STGTY_STORAGE = 1
102
+ STGTY_STREAM = 2
103
+ STGTY_LOCKBYTES = 3
104
+ STGTY_PROPERTY = 4
105
+ STGTY_ROOT = 5
106
+ # for red/black tree
107
+ COLOR_RED = 0
108
+ COLOR_BLACK = 1
109
+ # defines DirEntry base class
110
+ require 'rex/ole/direntry'
111
+
112
+
113
+ # constants for storages
114
+ STGM_READ = 0
115
+ STGM_WRITE = 1
116
+ STGM_READWRITE = 2
117
+ # defines Storage class
118
+ require 'rex/ole/storage'
119
+ # defines SubStorage class
120
+ require 'rex/ole/substorage'
121
+ # defines Stream class
122
+ require 'rex/ole/stream'
123
+
124
+
125
+ # constants for property sets
126
+ # PropertyIds
127
+ PID_DICTIONARY = 0x00000000
128
+ PID_CODEPAGE = 0x00000001
129
+ PID_LOCALE = 0x80000000
130
+ PID_BEHAVIOR = 0x80000003
131
+ # Well-known PropertyIds
132
+ PIDSI_TITLE = 0x02
133
+ PIDSI_SUBJECT = 0x03
134
+ PIDSI_AUTHOR = 0x04
135
+ PIDSI_KEYWORDS = 0x05
136
+ PIDSI_COMMENTS = 0x06
137
+ PIDSI_TEMPLATE = 0x07
138
+ PIDSI_LASTAUTHOR = 0x08
139
+ PIDSI_REVNUMBER = 0x09
140
+ PIDSI_EDITTIME = 0x0a
141
+ PIDSI_LASTPRINTED = 0x0b
142
+ PIDSI_CREATE_DTM = 0x0c
143
+ PIDSI_LASTSAVE_DTM = 0x0d
144
+ PIDSI_PAGECOUNT = 0x0e
145
+ PIDSI_WORDCOUNT = 0x0f
146
+ PIDSI_CHARCOUNT = 0x10
147
+ PIDSI_THUMBNAIL = 0x11
148
+ PIDSI_APPNAME = 0x12
149
+ PIDSI_DOC_SECURITY = 0x13
150
+ # PropertyTypes
151
+ VT_EMPTY = 0x00
152
+ VT_NULL = 0x01
153
+ VT_I2 = 0x02
154
+ VT_I4 = 0x03
155
+ VT_R4 = 0x04
156
+ VT_R8 = 0x05
157
+ VT_CY = 0x06
158
+ VT_DATE = 0x07
159
+ VT_BSTR = 0x08
160
+ VT_ERROR = 0x0a
161
+ VT_BOOL = 0x0b
162
+ VT_VARIANT = 0x0c # used with VT_VECTOR
163
+ # 0xd
164
+ VT_DECIMAL = 0x0e
165
+ # 0xf
166
+ VT_I1 = 0x10
167
+ VT_UI1 = 0x11
168
+ VT_UI2 = 0x12
169
+ VT_UI4 = 0x13
170
+ VT_I8 = 0x14
171
+ VT_UI8 = 0x15
172
+ VT_INT = 0x16
173
+ VT_UINT = 0x17
174
+ VT_LPSTR = 0x1e
175
+ VT_LPWSTR = 0x1f
176
+ # 0x20-0x3f
177
+ VT_FILETIME = 0x40
178
+ VT_BLOB = 0x41
179
+ VT_STREAM = 0x42
180
+ VT_STORAGE = 0x43
181
+ VT_STREAMED_OBJ = 0x44
182
+ VT_STORED_OBJ = 0x45
183
+ VT_BLOB_OBJ = 0x46
184
+ VT_CF = 0x47 # Clipboard Format
185
+ VT_CLSID = 0x48
186
+ VT_VERSIONED_STREAM = 0x49
187
+ # Flags
188
+ VT_VECTOR = 0x1000
189
+ VT_ARRAY = 0x2000 # Requires OLE version >= 1
190
+ # Format IDs
191
+ FMTID_SummaryInformation = "\xe0\x85\x9f\xf2\xf9\x4f\x68\x10\xab\x91\x08\x00\x2b\x27\xb3\xd9"
192
+ FMTID_DocSummaryInformation = "\x02\xd5\xcd\xd5\x9c\x2e\x1b\x10\x93\x97\x08\x00\x2b\x2c\xf9\xae"
193
+ FMTID_UserDefinedProperties = "\x05\xd5\xcd\xd5\x9c\x2e\x1b\x10\x93\x97\x08\x00\x2b\x2c\xf9\xae"
194
+ FMTID_GlobalInfo = "\x00\x6f\x61\x56\x54\xc1\xce\x11\x85\x53\x00\xaa\x00\xa1\xf9\x5b"
195
+ FMTID_ImageContents = "\x00\x64\x61\x56\x54\xc1\xce\x11\x85\x53\x00\xaa\x00\xa1\xf9\x5b"
196
+ FMTID_ImageInfo = "\x00\x65\x61\x56\x54\xc1\xce\x11\x85\x53\x00\xaa\x00\xa1\xf9\x5b"
197
+ FMTID_PropertyBag = "\x01\x18\x00\x20\xe6\x5d\xd1\x11\x8e\x38\x00\xc0\x4f\xb9\x38\x6d"
198
+ # defines PropertySet class
199
+ require 'rex/ole/propset'
200
+
201
+
202
+ end
203
+ end
data/rex-ole.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rex/ole/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rex-ole"
8
+ spec.version = Rex::OLE::VERSION
9
+ spec.authors = ["Pearce Barry"]
10
+ spec.email = ["pearce_barry@rapid7.com"]
11
+
12
+ spec.summary = %q{Rex Library for working with OLE}
13
+ spec.description = %q{Ruby Exploitation(Rex) library gem for reading/writing Object-Linking-and-Embedding (OLE) files and streams}
14
+ spec.homepage = "https://github.com/rapid7/rex-ole"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.12"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "rspec", "~> 3.0"
24
+
25
+ spec.add_runtime_dependency "rex-text"
26
+ end
data.tar.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ �(e��pBd/Sw'�_��B9dZ�bj�1�r�=2���7W��
2
+ �8��� o]��?��fK�]vӾ~A~t�>�*��nj�fDie@8��P�Ғ�J��x`�������;�o6Ů���a����(A�������Q�ɀm���fo!o��iW�5ѽ�ǖk��9P<�AKv�6u�e�ރ0��������0"���޽~��|�߹�9�㪼9�|7՗t$ӝ�jQpW�rm�<|y=IҴ44�J���@(
metadata ADDED
@@ -0,0 +1,208 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rex-ole
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Pearce Barry
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
14
+ A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
15
+ b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
16
+ MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
17
+ YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
18
+ aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
19
+ jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
20
+ xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
21
+ 1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
22
+ snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
23
+ U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
24
+ 9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
25
+ BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
26
+ AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
27
+ yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
28
+ 38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
29
+ AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
30
+ DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
31
+ HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
32
+ -----END CERTIFICATE-----
33
+ - |
34
+ -----BEGIN CERTIFICATE-----
35
+ MIIEKDCCAxCgAwIBAgILBAAAAAABL07hNVwwDQYJKoZIhvcNAQEFBQAwVzELMAkG
36
+ A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
37
+ b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xMTA0MTMxMDAw
38
+ MDBaFw0xOTA0MTMxMDAwMDBaMFExCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
39
+ YWxTaWduIG52LXNhMScwJQYDVQQDEx5HbG9iYWxTaWduIENvZGVTaWduaW5nIENB
40
+ IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCyTxTnEL7XJnKr
41
+ NpfvU79ChF5Y0Yoo/ENGb34oRFALdV0A1zwKRJ4gaqT3RUo3YKNuPxL6bfq2RsNq
42
+ o7gMJygCVyjRUPdhOVW4w+ElhlI8vwUd17Oa+JokMUnVoqni05GrPjxz7/Yp8cg1
43
+ 0DB7f06SpQaPh+LO9cFjZqwYaSrBXrta6G6V/zuAYp2Zx8cvZtX9YhqCVVrG+kB3
44
+ jskwPBvw8jW4bFmc/enWyrRAHvcEytFnqXTjpQhU2YM1O46MIwx1tt6GSp4aPgpQ
45
+ STic0qiQv5j6yIwrJxF+KvvO3qmuOJMi+qbs+1xhdsNE1swMfi9tBoCidEC7tx/0
46
+ O9dzVB/zAgMBAAGjgfowgfcwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYB
47
+ Af8CAQAwHQYDVR0OBBYEFAhu2Lacir/tPtfDdF3MgB+oL1B6MEcGA1UdIARAMD4w
48
+ PAYEVR0gADA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNv
49
+ bS9yZXBvc2l0b3J5LzAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3JsLmdsb2Jh
50
+ bHNpZ24ubmV0L3Jvb3QuY3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMDMB8GA1UdIwQY
51
+ MBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA0GCSqGSIb3DQEBBQUAA4IBAQAiXMXd
52
+ PfQLcNjj9efFjgkBu7GWNlxaB63HqERJUSV6rg2kGTuSnM+5Qia7O2yX58fOEW1o
53
+ kdqNbfFTTVQ4jGHzyIJ2ab6BMgsxw2zJniAKWC/wSP5+SAeq10NYlHNUBDGpeA07
54
+ jLBwwT1+170vKsPi9Y8MkNxrpci+aF5dbfh40r5JlR4VeAiR+zTIvoStvODG3Rjb
55
+ 88rwe8IUPBi4A7qVPiEeP2Bpen9qA56NSvnwKCwwhF7sJnJCsW3LZMMSjNaES2dB
56
+ fLEDF3gJ462otpYtpH6AA0+I98FrWkYVzSwZi9hwnOUtSYhgcqikGVJwQ17a1kYD
57
+ sGgOJO9K9gslJO8k
58
+ -----END CERTIFICATE-----
59
+ - |
60
+ -----BEGIN CERTIFICATE-----
61
+ MIIEyjCCA7KgAwIBAgISESEyE8rNriS4+1dc8jOHEUL8MA0GCSqGSIb3DQEBBQUA
62
+ MFExCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMScwJQYD
63
+ VQQDEx5HbG9iYWxTaWduIENvZGVTaWduaW5nIENBIC0gRzIwHhcNMTMxMDExMTUx
64
+ NTM4WhcNMTYxMDExMTUxNTM4WjBgMQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFz
65
+ c2FjaHVzZXR0czEPMA0GA1UEBxMGQm9zdG9uMRMwEQYDVQQKEwpSYXBpZDcgTExD
66
+ MRMwEQYDVQQDEwpSYXBpZDcgTExDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
67
+ CgKCAQEAhD//7+739c69hssg0mD6CXgf2JkuWTcU81dgD7aKcoEPqU8e1FseBvDW
68
+ /Q5fNK2H2NgHV/Msn18zXuK0PkaJXqj/vDsuKB3Hq0BiR2AwyDdEw8K5MK5bgQc2
69
+ tmcVtEAejRoy1Uv5UyfaAYAxG6zsma3buV1fjnEAC3VouRg4+EX/f65H/a6srntK
70
+ 5Etp3D71k2f0oUl8dOqOmSsRJQQ5zSs4ktDvpjAmsvzoA+1svceLYU95mvQsIw2T
71
+ edpmibGMwGw/HmgV+YWBgF5UGvax6zbC2i6DF2YHnDfkNb8/1MEIaxOTAbJTazTK
72
+ 8laCQOyay6L1BNPQKjZBgOge8LZq1wIDAQABo4IBizCCAYcwDgYDVR0PAQH/BAQD
73
+ AgeAMEwGA1UdIARFMEMwQQYJKwYBBAGgMgEyMDQwMgYIKwYBBQUHAgEWJmh0dHBz
74
+ Oi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMAkGA1UdEwQCMAAwEwYD
75
+ VR0lBAwwCgYIKwYBBQUHAwMwPgYDVR0fBDcwNTAzoDGgL4YtaHR0cDovL2NybC5n
76
+ bG9iYWxzaWduLmNvbS9ncy9nc2NvZGVzaWduZzIuY3JsMIGGBggrBgEFBQcBAQR6
77
+ MHgwQAYIKwYBBQUHMAKGNGh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2Fj
78
+ ZXJ0L2dzY29kZXNpZ25nMi5jcnQwNAYIKwYBBQUHMAGGKGh0dHA6Ly9vY3NwMi5n
79
+ bG9iYWxzaWduLmNvbS9nc2NvZGVzaWduZzIwHQYDVR0OBBYEFE536JwFx9SpaEi3
80
+ w8pcq2GRFA5BMB8GA1UdIwQYMBaAFAhu2Lacir/tPtfDdF3MgB+oL1B6MA0GCSqG
81
+ SIb3DQEBBQUAA4IBAQAGpGXHtFLjTTivV+xQPwtZhfPuJ7f+VGTMSAAYWmfzyHXM
82
+ YMFYUWJzSFcuVR2YfxtbS45P7U5Qopd7jBQ0Ygk5h2a+B5nE4+UlhHj665d0zpYM
83
+ 1eWndMaO6WBOYnqtNyi8Dqqc1foKZDNHEDggYhGso7OIBunup+N4sPL9PwQ3eYe6
84
+ mUu8z0E4GXYViaMPOFkqaYnoYgf2L+7L5zKYT4h/NE/P7kj7EbduHgy/v/aAIrNl
85
+ 2SpuQH+SWteq3NXkAmFEEqvLJQ4sbptZt8OP8ghL3pVAvZNFmww/YVszSkShSzcg
86
+ QdihYCSEL2drS2cFd50jBeq71sxUtxbv82DUa2b+
87
+ -----END CERTIFICATE-----
88
+ date: 2016-07-21 00:00:00.000000000 Z
89
+ dependencies:
90
+ - !ruby/object:Gem::Dependency
91
+ name: bundler
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.12'
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.12'
104
+ - !ruby/object:Gem::Dependency
105
+ name: rake
106
+ requirement: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '10.0'
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '10.0'
118
+ - !ruby/object:Gem::Dependency
119
+ name: rspec
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.0'
125
+ type: :development
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3.0'
132
+ - !ruby/object:Gem::Dependency
133
+ name: rex-text
134
+ requirement: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ type: :runtime
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ description: Ruby Exploitation(Rex) library gem for reading/writing Object-Linking-and-Embedding
147
+ (OLE) files and streams
148
+ email:
149
+ - pearce_barry@rapid7.com
150
+ executables: []
151
+ extensions: []
152
+ extra_rdoc_files: []
153
+ files:
154
+ - ".gitignore"
155
+ - ".rspec"
156
+ - ".travis.yml"
157
+ - CODE_OF_CONDUCT.md
158
+ - Gemfile
159
+ - LICENSE
160
+ - README.md
161
+ - Rakefile
162
+ - bin/console
163
+ - bin/setup
164
+ - lib/rex/ole.rb
165
+ - lib/rex/ole/clsid.rb
166
+ - lib/rex/ole/difat.rb
167
+ - lib/rex/ole/directory.rb
168
+ - lib/rex/ole/direntry.rb
169
+ - lib/rex/ole/docs/dependencies.txt
170
+ - lib/rex/ole/docs/references.txt
171
+ - lib/rex/ole/fat.rb
172
+ - lib/rex/ole/header.rb
173
+ - lib/rex/ole/minifat.rb
174
+ - lib/rex/ole/propset.rb
175
+ - lib/rex/ole/samples/create_ole.rb
176
+ - lib/rex/ole/samples/dir.rb
177
+ - lib/rex/ole/samples/dump_stream.rb
178
+ - lib/rex/ole/samples/ole_info.rb
179
+ - lib/rex/ole/storage.rb
180
+ - lib/rex/ole/stream.rb
181
+ - lib/rex/ole/substorage.rb
182
+ - lib/rex/ole/util.rb
183
+ - lib/rex/ole/version.rb
184
+ - rex-ole.gemspec
185
+ homepage: https://github.com/rapid7/rex-ole
186
+ licenses: []
187
+ metadata: {}
188
+ post_install_message:
189
+ rdoc_options: []
190
+ require_paths:
191
+ - lib
192
+ required_ruby_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ required_rubygems_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ requirements: []
203
+ rubyforge_project:
204
+ rubygems_version: 2.4.8
205
+ signing_key:
206
+ specification_version: 4
207
+ summary: Rex Library for working with OLE
208
+ test_files: []
metadata.gz.sig ADDED
Binary file