pedump 0.5.2 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/pedump/loader.rb CHANGED
@@ -15,7 +15,15 @@ class PEdump::Loader
15
15
 
16
16
  # shortcuts
17
17
  alias :pe :pe_hdr
18
- def ep; @pe_hdr.ioh.AddressOfEntryPoint; end
18
+
19
+ def ep
20
+ if @pe_hdr
21
+ @pe_hdr.try(:ioh).try(:AddressOfEntryPoint)
22
+ elsif @te_hdr
23
+ @te_hdr.AddressOfEntryPoint - @delta
24
+ end
25
+ end
26
+
19
27
  def ep= v; @pe_hdr.ioh.AddressOfEntryPoint=v; end
20
28
 
21
29
  ########################################################################
@@ -23,12 +31,24 @@ class PEdump::Loader
23
31
  ########################################################################
24
32
 
25
33
  def initialize io = nil, params = {}
34
+ # @delta is for EFI TE loading, based on https://github.com/gdbinit/TELoader/blob/master/teloader.cpp
35
+ @delta = 0
26
36
  @pedump = PEdump.new(io, params)
27
37
  if io
28
38
  @mz_hdr = @pedump.mz
29
39
  @dos_stub = @pedump.dos_stub
30
40
  @pe_hdr = @pedump.pe
31
- @image_base = params[:image_base] || @pe_hdr.try(:ioh).try(:ImageBase) || 0
41
+ @te_hdr = @pedump.te
42
+
43
+ @image_base = params[:image_base]
44
+ if @pe_hdr
45
+ @image_base ||= @pe_hdr.try(:ioh).try(:ImageBase)
46
+ elsif @te_hdr
47
+ @image_base ||= @te_hdr.ImageBase
48
+ @delta = @pedump.te_shift
49
+ end
50
+ @image_base ||= 0
51
+
32
52
  load_sections @pedump.sections, io
33
53
  end
34
54
  @find_limit = params[:find_limit] || DEFAULT_FIND_LIMIT
@@ -38,7 +58,7 @@ class PEdump::Loader
38
58
  if section_hdrs.is_a?(Array)
39
59
  @sections = section_hdrs.map do |x|
40
60
  raise "unknown section hdr: #{x.inspect}" unless x.is_a?(PEdump::IMAGE_SECTION_HEADER)
41
- Section.new(x, :deferred_load_io => f, :image_base => @image_base )
61
+ Section.new(x, :deferred_load_io => f, :image_base => @image_base, :delta => @delta )
42
62
  end
43
63
  if f.respond_to?(:seek) && f.respond_to?(:read)
44
64
  #
@@ -249,10 +269,12 @@ class PEdump::Loader
249
269
  def names
250
270
  return @names if @names
251
271
  @names = {}
252
- if oep = @pe_hdr.try(:ioh).try(:AddressOfEntryPoint)
253
- oep += @image_base
254
- @names[oep] = 'start'
272
+
273
+ oep = ep()
274
+ if oep
275
+ @names[oep + @image_base] = 'start'
255
276
  end
277
+
256
278
  _parse_imports
257
279
  _parse_exports
258
280
  #TODO: debug info
@@ -110,7 +110,34 @@ class PEdump
110
110
  16 => :MemoryInfoListStream, # MINIDUMP_MEMORY_INFO_LIST
111
111
  17 => :ThreadInfoListStream,
112
112
  18 => :HandleOperationListStream,
113
- 0xffff => :LastReservedStream
113
+ 0xffff => :LastReservedStream,
114
+
115
+ # Special types saved by google breakpad
116
+ # https://chromium.googlesource.com/breakpad/breakpad/+/846b6335c5b0ba46dfa2ed96fccfa3f7a02fa2f1/src/google_breakpad/common/minidump_format.h#311
117
+ 0x47670001 => :BreakpadInfoStream,
118
+ 0x47670002 => :BreakpadAssertionInfoStream,
119
+ 0x47670003 => :BreakpadLinuxCpuInfo,
120
+ 0x47670004 => :BreakpadLinuxProcStatus,
121
+ 0x47670005 => :BreakpadLinuxLsbRelease,
122
+ 0x47670006 => :BreakpadLinuxCmdLine,
123
+ 0x47670007 => :BreakpadLinuxEnviron,
124
+ 0x47670008 => :BreakpadLinuxAuxv,
125
+ 0x47670009 => :BreakpadLinuxMaps,
126
+ 0x4767000A => :BreakpadLinuxDsoDebug,
127
+
128
+ # Saved by crashpad
129
+ # https://chromium.googlesource.com/crashpad/crashpad/+/doc/minidump/minidump_extensions.h#95
130
+ 0x43500001 => :CrashpadInfo,
131
+
132
+ # Saved by Syzyasan
133
+ # https://github.com/google/syzygy/blob/c8bb4927f07fec0de8834c4774ddaafef0bc099f/syzygy/kasko/api/client.h#L28
134
+ # https://github.com/google/syzygy/blob/master/syzygy/crashdata/crashdata.proto
135
+ 0x4B6B0001 => :SyzyasanCrashdata,
136
+
137
+ # Saved by Chromium
138
+ 0x4B6B0002 => :ChromiumStabilityReport,
139
+ 0x4B6B0003 => :ChromiumSystemProfile,
140
+ 0x4B6B0004 => :ChromiumGwpAsanData,
114
141
  }
115
142
 
116
143
  class Loader
@@ -134,9 +161,16 @@ class PEdump
134
161
  end
135
162
  end
136
163
 
164
+ def stream_by_name(name)
165
+ type = MINIDUMP_STREAM_TYPE.invert[name]
166
+ raise "Unknown type symbol #{name}!" if !type
167
+
168
+ streams.find { |s| s.StreamType == type }
169
+ end
170
+
137
171
  def memory_info_list
138
172
  # MINIDUMP_MEMORY_INFO_LIST
139
- stream = streams.find{ |s| s.StreamType == 16 }
173
+ stream = stream_by_name(:MemoryInfoListStream)
140
174
  return nil unless stream
141
175
  io.seek stream.Location.Rva
142
176
  MINIDUMP_MEMORY_INFO_LIST.read io
@@ -144,7 +178,7 @@ class PEdump
144
178
 
145
179
  def memory_list
146
180
  # MINIDUMP_MEMORY_LIST
147
- stream = streams.find{ |s| s.StreamType == 5 }
181
+ stream = stream_by_name(:MemoryListStream)
148
182
  return nil unless stream
149
183
  io.seek stream.Location.Rva
150
184
  MINIDUMP_MEMORY_LIST.read io
@@ -152,7 +186,7 @@ class PEdump
152
186
 
153
187
  def memory64_list
154
188
  # MINIDUMP_MEMORY64_LIST
155
- stream = streams.find{ |s| s.StreamType == 9 }
189
+ stream = stream_by_name(:Memory64ListStream)
156
190
  return nil unless stream
157
191
  io.seek stream.Location.Rva
158
192
  MINIDUMP_MEMORY64_LIST.read io
@@ -216,21 +250,102 @@ end # module PEdump
216
250
 
217
251
  if $0 == __FILE__
218
252
  require 'pp'
253
+ require 'optparse'
254
+
255
+ options = {}
256
+ opt_parse = OptionParser.new do |opts|
257
+ opts.banner = "Usage: #{$0} [options] <minidump>"
258
+
259
+ opts.on("--all", "Print all of the following sections") do
260
+ options[:all] = true
261
+ end
262
+ opts.on("--header", "Print minidump header") do
263
+ options[:header] = true
264
+ end
265
+ opts.on("--streams", "Print out the streams present") do
266
+ options[:streams] = true
267
+ end
268
+ opts.on("--memory-ranges", "Print out memory ranges included in the minidump") do
269
+ options[:memory_ranges] = true
270
+ end
271
+ opts.on("--breakpad", "Print out breakpad text sections if present") do
272
+ options[:breakpad] = true
273
+ end
274
+ opts.separator ''
275
+
276
+ opts.on("--memory <address>", "Print the memory range beginning at address") do |m|
277
+ options[:memory] = m.hex
278
+ end
279
+ opts.separator ''
280
+
281
+ opts.on("-h", "--help", "Help") do
282
+ puts opts
283
+ exit 0
284
+ end
285
+ end
286
+
287
+ opt_parse.parse!
219
288
 
220
- raise "gimme a fname" if ARGV.empty?
221
- io = open(ARGV.first,"rb")
289
+ if ARGV.empty?
290
+ $stderr.puts opt_parse.help
291
+ exit 1
292
+ end
222
293
 
294
+ io = open(ARGV.first, "rb")
223
295
  md = PEdump::Loader::Minidump.new io
224
- pp md.hdr
225
- puts
226
- puts "[.] #{md.memory_ranges.size} memory ranges"
227
- puts "[.] #{md.memory_ranges(:merge => true).size} merged memory ranges"
228
- puts
229
296
 
230
- # pp md.memory_info_list
231
- # pp md.memory_list
297
+ if options[:all] || options[:header]
298
+ pp md.hdr
299
+ puts
300
+ end
301
+
302
+ if options[:all] || options[:streams]
303
+ puts "[.] Streams present in the minidump:"
304
+ md.streams.each do |s|
305
+ if PEdump::MINIDUMP_STREAM_TYPE[s.StreamType]
306
+ puts "[.] #{PEdump::MINIDUMP_STREAM_TYPE[s.StreamType]}"
307
+ else
308
+ puts "[.] Unknown stream type #{s.StreamType}"
309
+ end
310
+ end
311
+ puts
312
+ end
313
+
314
+ if options[:all] || options[:breakpad]
315
+ [ :BreakpadLinuxCpuInfo, :BreakpadLinuxProcStatus, :BreakpadLinuxMaps,
316
+ :BreakpadLinuxCmdLine, :BreakpadLinuxEnviron ].each { |name|
317
+ stream = md.stream_by_name(name)
318
+ next if !stream
319
+
320
+ io.seek stream.Location.Rva
321
+ contents = io.read(stream.Location.DataSize)
322
+
323
+ if contents !~ /[^[:print:][:space:]]/
324
+ puts "[.] Section #{name}:"
325
+ puts contents
326
+ else
327
+ puts "[.] Section #{name}: #{contents.inspect}"
328
+ end
329
+ puts
330
+ }
331
+ end
332
+
333
+ if options[:all] || options[:memory_ranges]
334
+ puts "[.] #{md.memory_ranges.size} memory ranges"
335
+ puts "[.] #{md.memory_ranges(:merge => true).size} merged memory ranges"
336
+ puts
337
+
338
+ printf "[.] %16s %8s\n", "addr", "size"
339
+ md.memory_ranges(:merge => true).sort_by { |mr| mr.va }.each do |mr|
340
+ printf "[.] %16x %8x\n", mr.va, mr.size
341
+ end
342
+ end
343
+
344
+ if options[:memory]
345
+ mr = md.memory_ranges(:merge => true).find { |r| r.va == options[:memory] }
346
+ raise "Could not find the specified region" if !mr
232
347
 
233
- md.memory_ranges(:merge => true).each do |mr|
234
- printf "[.] %8x %8x %8x\n", mr.file_offset, mr.va, mr.size
348
+ io.seek(mr.file_offset)
349
+ print io.read(mr.size)
235
350
  end
236
351
  end
@@ -10,15 +10,16 @@ class PEdump::Loader
10
10
  @hdr = x.dup
11
11
  end
12
12
  @data = EMPTY_DATA.dup
13
+ @delta = args[:delta] || 0
13
14
  @deferred_load_io = args[:deferred_load_io]
14
- @deferred_load_pos = args[:deferred_load_pos] || (@hdr && @hdr.PointerToRawData)
15
+ @deferred_load_pos = args[:deferred_load_pos] || (@hdr && (@hdr.PointerToRawData - @delta))
15
16
  @deferred_load_size = args[:deferred_load_size] || (@hdr && @hdr.SizeOfRawData)
16
17
  @image_base = args[:image_base] || 0
17
18
  end
18
19
 
19
20
  def name; @hdr.Name; end
20
- def va ; @hdr.VirtualAddress + @image_base; end
21
- def rva ; @hdr.VirtualAddress; end
21
+ def va ; @hdr.VirtualAddress + @image_base - @delta; end
22
+ def rva ; @hdr.VirtualAddress - @delta; end
22
23
  def vsize; @hdr.VirtualSize; end
23
24
  def flags; @hdr.Characteristics; end
24
25
  def flags= f; @hdr.Characteristics= f; end
@@ -51,6 +52,7 @@ class PEdump::Loader
51
52
  @data.size > 0 ? @data.size.to_s(16) : (@deferred_load_io ? "<defer>" : 0)
52
53
  ]
53
54
  r << (" dlpos=%8x" % @deferred_load_pos) if @deferred_load_pos
55
+ r << (" delta=%3x" % @delta) if @delta != 0
54
56
  r << ">"
55
57
  end
56
58
  end
data/lib/pedump/ne.rb CHANGED
@@ -405,7 +405,7 @@ class PEdump
405
405
  begin
406
406
  ne_offset = mz(f) && mz(f).lfanew
407
407
  if ne_offset.nil?
408
- logger.fatal "[!] NULL NE offset (e_lfanew)."
408
+ logger.debug "[!] NULL NE offset (e_lfanew)."
409
409
  nil
410
410
  elsif ne_offset > f.size
411
411
  logger.fatal "[!] NE offset beyond EOF."
data/lib/pedump/pe.rb CHANGED
@@ -24,78 +24,87 @@ class PEdump
24
24
  signature + ifh.pack + ioh.pack
25
25
  end
26
26
 
27
- def self.read f, args = {}
27
+ def self.read_sections f, nToRead, args = {}
28
28
  force = args[:force]
29
29
 
30
+ if nToRead > 0xffff
31
+ if force.is_a?(Numeric) && force > 1
32
+ PEdump.logger.warn "[!] too many sections (#{nToRead}). forced. reading all"
33
+ else
34
+ PEdump.logger.warn "[!] too many sections (#{nToRead}). not forced, reading first 65535"
35
+ nToRead = 65535
36
+ end
37
+ end
38
+
39
+ sections = []
40
+ nToRead.times do
41
+ break if f.eof?
42
+ sections << IMAGE_SECTION_HEADER.read(f)
43
+ end
44
+
45
+ if sections.any?
46
+ # zero all missing values of last section
47
+ sections.last.tap do |last_section|
48
+ last_section.each_pair do |k,v|
49
+ last_section[k] = 0 if v.nil?
50
+ end
51
+ end
52
+ end
53
+
54
+ sections
55
+ end
56
+
57
+ def self.read f, args = {}
30
58
  pe_offset = f.tell
31
59
  pe_sig = f.read 4
32
60
  #logger.error "[!] 'NE' format is not supported!" if pe_sig == "NE\x00\x00"
33
61
  if pe_sig != "PE\x00\x00"
34
- if force
62
+ if args[:force]
35
63
  logger.warn "[?] no PE signature (want: 'PE\\x00\\x00', got: #{pe_sig.inspect})"
36
64
  else
37
65
  logger.debug "[?] no PE signature (want: 'PE\\x00\\x00', got: #{pe_sig.inspect}). (not forced)"
38
66
  return nil
39
67
  end
40
68
  end
41
- PE.new(pe_sig).tap do |pe|
42
- pe.image_file_header = IMAGE_FILE_HEADER.read(f)
43
- ioh_offset = f.tell # offset to IMAGE_OPTIONAL_HEADER
44
- if pe.ifh.SizeOfOptionalHeader.to_i > 0
45
- if pe.x64?
46
- pe.image_optional_header = IMAGE_OPTIONAL_HEADER64.read(f, pe.ifh.SizeOfOptionalHeader)
47
- else
48
- pe.image_optional_header = IMAGE_OPTIONAL_HEADER32.read(f, pe.ifh.SizeOfOptionalHeader)
49
- end
69
+ pe = PE.new(pe_sig)
70
+ pe.image_file_header = IMAGE_FILE_HEADER.read(f)
71
+ ioh_offset = f.tell # offset to IMAGE_OPTIONAL_HEADER
72
+ if pe.ifh.SizeOfOptionalHeader.to_i > 0
73
+ if pe.x64?
74
+ pe.image_optional_header = IMAGE_OPTIONAL_HEADER64.read(f, pe.ifh.SizeOfOptionalHeader)
75
+ else
76
+ pe.image_optional_header = IMAGE_OPTIONAL_HEADER32.read(f, pe.ifh.SizeOfOptionalHeader)
50
77
  end
78
+ end
51
79
 
52
- if (nToRead=pe.ifh.NumberOfSections.to_i) > 0xffff
53
- if force.is_a?(Numeric) && force > 1
54
- logger.warn "[!] too many sections (#{pe.ifh.NumberOfSections}). forced. reading all"
55
- else
56
- logger.warn "[!] too many sections (#{pe.ifh.NumberOfSections}). not forced, reading first 65535"
57
- nToRead = 65535
58
- end
59
- end
80
+ nToRead=pe.ifh.NumberOfSections.to_i
60
81
 
61
- # The Windows loader expects to find the PE section headers after the optional header. It calculates the address of the first section header by adding SizeOfOptionalHeader to the beginning of the optional header.
62
- # // http://www.phreedom.org/research/tinype/
63
- f.seek( ioh_offset + pe.ifh.SizeOfOptionalHeader.to_i )
64
- pe.sections = []
65
- nToRead.times do
66
- break if f.eof?
67
- pe.sections << IMAGE_SECTION_HEADER.read(f)
68
- end
82
+ # The Windows loader expects to find the PE section headers after the optional header. It calculates the address of the first section header by adding SizeOfOptionalHeader to the beginning of the optional header.
83
+ # // http://www.phreedom.org/research/tinype/
84
+ f.seek( ioh_offset + pe.ifh.SizeOfOptionalHeader.to_i )
85
+ pe.sections = read_sections(f, nToRead, args)
69
86
 
70
- if pe.sections.any?
71
- # zero all missing values of last section
72
- pe.sections.last.tap do |last_section|
73
- last_section.each_pair do |k,v|
74
- last_section[k] = 0 if v.nil?
75
- end
76
- end
77
- end
87
+ pe_end = f.tell
88
+ if s=pe.sections.find{ |s| (pe_offset...pe_end).include?(s.va) }
89
+ if args[:pass2]
90
+ # already called with CompositeIO ?
91
+ PEdump.logger.error "[!] section with va=0x#{s.va.to_s(16)} overwrites PE header! 2nd time?!"
78
92
 
79
- pe_end = f.tell
80
- if s=pe.sections.find{ |s| (pe_offset...pe_end).include?(s.va) }
81
- if args[:pass2]
82
- # already called with CompositeIO ?
83
- logger.error "[!] section with va=0x#{s.va.to_s(16)} overwrites PE header! 2nd time?!"
84
-
85
- elsif pe_end-pe_offset < 0x100_000
86
- logger.warn "[!] section with va=0x#{s.va.to_s(16)} overwrites PE header! trying to rebuild..."
87
- f.seek pe_offset
88
- data = f.read(s.va-pe_offset)
89
- f.seek s.PointerToRawData
90
- io = CompositeIO.new(StringIO.new(data), f)
91
- args1 = args.dup
92
- args1[:pass2] = true
93
- return PE.read(io, args1)
94
- else
95
- logger.error "[!] section with va=0x#{s.va.to_s(16)} overwrites PE header! too big to rebuild!"
96
- end
93
+ elsif pe_end-pe_offset < 0x100_000
94
+ PEdump.logger.warn "[!] section with va=0x#{s.va.to_s(16)} overwrites PE header! trying to rebuild..."
95
+ f.seek pe_offset
96
+ data = f.read(s.va-pe_offset)
97
+ f.seek s.PointerToRawData
98
+ io = CompositeIO.new(StringIO.new(data), f)
99
+ args1 = args.dup
100
+ args1[:pass2] = true
101
+ return PE.read(io, args1)
102
+ else
103
+ PEdump.logger.error "[!] section with va=0x#{s.va.to_s(16)} overwrites PE header! too big to rebuild!"
97
104
  end
98
105
  end
106
+
107
+ pe
99
108
  end
100
109
 
101
110
  def self.logger; PEdump.logger; end
@@ -106,7 +115,7 @@ class PEdump
106
115
  begin
107
116
  pe_offset = mz(f) && mz(f).lfanew
108
117
  if pe_offset.nil?
109
- logger.fatal "[!] NULL PE offset (e_lfanew). cannot continue."
118
+ logger.debug "[!] NULL PE offset (e_lfanew). cannot continue."
110
119
  nil
111
120
  elsif pe_offset > f.size
112
121
  logger.fatal "[!] PE offset beyond EOF. cannot continue."
@@ -0,0 +1,562 @@
1
+ class PEdump
2
+ # data from https://raw.githubusercontent.com/dishather/richprint/master/comp_id.txt
3
+ RICH_IDS = {
4
+ 0x00010000 => "[---] Unmarked objects",
5
+ 0x00000000 => "[---] Unmarked objects (old)",
6
+ 0x01047086 => "[ C ] VS2019 v16.6.2 build 28806",
7
+ 0x01037086 => "[ASM] VS2019 v16.6.2 build 28806",
8
+ 0x01057086 => "[C++] VS2019 v16.6.2 build 28806",
9
+ 0x00ff7086 => "[RES] VS2019 v16.6.2 build 28806",
10
+ 0x01027086 => "[LNK] VS2019 v16.6.2 build 28806",
11
+ 0x01007086 => "[EXP] VS2019 v16.6.2 build 28806",
12
+ 0x01017086 => "[IMP] VS2019 v16.6.2 build 28806",
13
+ 0x01047085 => "[ C ] VS2019 v16.6.0 build 28805",
14
+ 0x01037085 => "[ASM] VS2019 v16.6.0 build 28805",
15
+ 0x01057085 => "[C++] VS2019 v16.6.0 build 28805",
16
+ 0x00ff7085 => "[RES] VS2019 v16.6.0 build 28805",
17
+ 0x01027085 => "[LNK] VS2019 v16.6.0 build 28805",
18
+ 0x01007085 => "[EXP] VS2019 v16.6.0 build 28805",
19
+ 0x01017085 => "[IMP] VS2019 v16.6.0 build 28805",
20
+ 0x01046fc6 => "[ C ] VS2019 v16.5.5 build 28614",
21
+ 0x01036fc6 => "[ASM] VS2019 v16.5.5 build 28614",
22
+ 0x01056fc6 => "[C++] VS2019 v16.5.5 build 28614",
23
+ 0x00ff6fc6 => "[RES] VS2019 v16.5.5 build 28614",
24
+ 0x01026fc6 => "[LNK] VS2019 v16.5.5 build 28614",
25
+ 0x01006fc6 => "[EXP] VS2019 v16.5.5 build 28614",
26
+ 0x01016fc6 => "[IMP] VS2019 v16.5.5 build 28614",
27
+ 0x01046fc4 => "[ C ] VS2019 v16.5.2 build 28612 (*)",
28
+ 0x01036fc4 => "[ASM] VS2019 v16.5.2 build 28612 (*)",
29
+ 0x01056fc4 => "[C++] VS2019 v16.5.2 build 28612 (*)",
30
+ 0x00ff6fc4 => "[RES] VS2019 v16.5.2 build 28612 (*)",
31
+ 0x01026fc4 => "[LNK] VS2019 v16.5.2 build 28612 (*)",
32
+ 0x01016fc4 => "[IMP] VS2019 v16.5.2 build 28612 (*)",
33
+ 0x01006fc4 => "[EXP] VS2019 v16.5.2 build 28612 (*)",
34
+ 0x01046fc3 => "[ C ] VS2019 v16.5.1 build 28611 (*)",
35
+ 0x01036fc3 => "[ASM] VS2019 v16.5.1 build 28611 (*)",
36
+ 0x01056fc3 => "[C++] VS2019 v16.5.1 build 28611 (*)",
37
+ 0x00ff6fc3 => "[RES] VS2019 v16.5.1 build 28611 (*)",
38
+ 0x01026fc3 => "[LNK] VS2019 v16.5.1 build 28611 (*)",
39
+ 0x01016fc3 => "[IMP] VS2019 v16.5.1 build 28611 (*)",
40
+ 0x01006fc3 => "[EXP] VS2019 v16.5.1 build 28611 (*)",
41
+ 0x01046fc2 => "[ C ] VS2019 v16.5.0 build 28610 (*)",
42
+ 0x01036fc2 => "[ASM] VS2019 v16.5.0 build 28610 (*)",
43
+ 0x01056fc2 => "[C++] VS2019 v16.5.0 build 28610 (*)",
44
+ 0x00ff6fc2 => "[RES] VS2019 v16.5.0 build 28610 (*)",
45
+ 0x01026fc2 => "[LNK] VS2019 v16.5.0 build 28610 (*)",
46
+ 0x01016fc2 => "[IMP] VS2019 v16.5.0 build 28610 (*)",
47
+ 0x01006fc2 => "[EXP] VS2019 v16.5.0 build 28610 (*)",
48
+ 0x01046e9f => "[ C ] VS2019 v16.4.6 build 28319 (*)",
49
+ 0x01036e9f => "[ASM] VS2019 v16.4.6 build 28319 (*)",
50
+ 0x01056e9f => "[C++] VS2019 v16.4.6 build 28319 (*)",
51
+ 0x00ff6e9f => "[RES] VS2019 v16.4.6 build 28319 (*)",
52
+ 0x01026e9f => "[LNK] VS2019 v16.4.6 build 28319 (*)",
53
+ 0x01006e9f => "[EXP] VS2019 v16.4.6 build 28319 (*)",
54
+ 0x01016e9f => "[IMP] VS2019 v16.4.6 build 28319 (*)",
55
+ 0x01046e9c => "[ C ] VS2019 v16.4.4 build 28316 (*)",
56
+ 0x01036e9c => "[ASM] VS2019 v16.4.4 build 28316 (*)",
57
+ 0x01056e9c => "[C++] VS2019 v16.4.4 build 28316 (*)",
58
+ 0x00ff6e9c => "[RES] VS2019 v16.4.4 build 28316 (*)",
59
+ 0x01026e9c => "[LNK] VS2019 v16.4.4 build 28316 (*)",
60
+ 0x01006e9c => "[EXP] VS2019 v16.4.4 build 28316 (*)",
61
+ 0x01016e9c => "[IMP] VS2019 v16.4.4 build 28316 (*)",
62
+ 0x01046e9b => "[ C ] VS2019 v16.4.3 build 28315",
63
+ 0x01036e9b => "[ASM] VS2019 v16.4.3 build 28315",
64
+ 0x01056e9b => "[C++] VS2019 v16.4.3 build 28315",
65
+ 0x00ff6e9b => "[RES] VS2019 v16.4.3 build 28315",
66
+ 0x01026e9b => "[LNK] VS2019 v16.4.3 build 28315",
67
+ 0x01006e9b => "[EXP] VS2019 v16.4.3 build 28315",
68
+ 0x01016e9b => "[IMP] VS2019 v16.4.3 build 28315",
69
+ 0x01046e9a => "[ C ] VS2019 v16.4.0 build 28314 (*)",
70
+ 0x01036e9a => "[ASM] VS2019 v16.4.0 build 28314 (*)",
71
+ 0x01056e9a => "[C++] VS2019 v16.4.0 build 28314 (*)",
72
+ 0x00ff6e9a => "[RES] VS2019 v16.4.0 build 28314 (*)",
73
+ 0x01026e9a => "[LNK] VS2019 v16.4.0 build 28314 (*)",
74
+ 0x01016e9a => "[IMP] VS2019 v16.4.0 build 28314 (*)",
75
+ 0x01006e9a => "[EXP] VS2019 v16.4.0 build 28314 (*)",
76
+ 0x01046dc9 => "[ C ] VS2019 v16.3.2 build 28105 (*)",
77
+ 0x01036dc9 => "[ASM] VS2019 v16.3.2 build 28105 (*)",
78
+ 0x01056dc9 => "[C++] VS2019 v16.3.2 build 28105 (*)",
79
+ 0x00ff6dc9 => "[RES] VS2019 v16.3.2 build 28105 (*)",
80
+ 0x01026dc9 => "[LNK] VS2019 v16.3.2 build 28105 (*)",
81
+ 0x01016dc9 => "[IMP] VS2019 v16.3.2 build 28105 (*)",
82
+ 0x01006dc9 => "[EXP] VS2019 v16.3.2 build 28105 (*)",
83
+ 0x01046d01 => "[ C ] VS2019 v16.2.3 build 27905 (*)",
84
+ 0x01036d01 => "[ASM] VS2019 v16.2.3 build 27905 (*)",
85
+ 0x01056d01 => "[C++] VS2019 v16.2.3 build 27905 (*)",
86
+ 0x00ff6d01 => "[RES] VS2019 v16.2.3 build 27905 (*)",
87
+ 0x01026d01 => "[LNK] VS2019 v16.2.3 build 27905 (*)",
88
+ 0x01016d01 => "[IMP] VS2019 v16.2.3 build 27905 (*)",
89
+ 0x01006d01 => "[EXP] VS2019 v16.2.3 build 27905 (*)",
90
+ 0x01046c36 => "[ C ] VS2019 v16.1.2 build 27702 (*)",
91
+ 0x01036c36 => "[ASM] VS2019 v16.1.2 build 27702 (*)",
92
+ 0x01056c36 => "[C++] VS2019 v16.1.2 build 27702 (*)",
93
+ 0x00ff6c36 => "[RES] VS2019 v16.1.2 build 27702 (*)",
94
+ 0x01026c36 => "[LNK] VS2019 v16.1.2 build 27702 (*)",
95
+ 0x01016c36 => "[IMP] VS2019 v16.1.2 build 27702 (*)",
96
+ 0x01006c36 => "[EXP] VS2019 v16.1.2 build 27702 (*)",
97
+ 0x01046b74 => "[ C ] VS2019 v16.0.0 build 27508",
98
+ 0x01036b74 => "[ASM] VS2019 v16.0.0 build 27508",
99
+ 0x01056b74 => "[C++] VS2019 v16.0.0 build 27508",
100
+ 0x00ff6b74 => "[RES] VS2019 v16.0.0 build 27508",
101
+ 0x01026b74 => "[LNK] VS2019 v16.0.0 build 27508",
102
+ 0x01006b74 => "[EXP] VS2019 v16.0.0 build 27508",
103
+ 0x01016b74 => "[IMP] VS2019 v16.0.0 build 27508",
104
+ 0x01046996 => "[ C ] VS2017 v15.9.11 build 27030 (*)",
105
+ 0x01036996 => "[ASM] VS2017 v15.9.11 build 27030 (*)",
106
+ 0x01056996 => "[C++] VS2017 v15.9.11 build 27030 (*)",
107
+ 0x00ff6996 => "[RES] VS2017 v15.9.11 build 27030 (*)",
108
+ 0x01026996 => "[LNK] VS2017 v15.9.11 build 27030 (*)",
109
+ 0x01016996 => "[IMP] VS2017 v15.9.11 build 27030 (*)",
110
+ 0x01006996 => "[EXP] VS2017 v15.9.11 build 27030 (*)",
111
+ 0x01046993 => "[ C ] VS2017 v15.9.7 build 27027 (*)",
112
+ 0x01036993 => "[ASM] VS2017 v15.9.7 build 27027 (*)",
113
+ 0x01056993 => "[C++] VS2017 v15.9.7 build 27027 (*)",
114
+ 0x00ff6993 => "[RES] VS2017 v15.9.7 build 27027 (*)",
115
+ 0x01026993 => "[LNK] VS2017 v15.9.7 build 27027 (*)",
116
+ 0x01016993 => "[IMP] VS2017 v15.9.7 build 27027 (*)",
117
+ 0x01006993 => "[EXP] VS2017 v15.9.7 build 27027 (*)",
118
+ 0x01046992 => "[ C ] VS2017 v15.9.5 build 27026 (*)",
119
+ 0x01036992 => "[ASM] VS2017 v15.9.5 build 27026 (*)",
120
+ 0x01056992 => "[C++] VS2017 v15.9.5 build 27026 (*)",
121
+ 0x00ff6992 => "[RES] VS2017 v15.9.5 build 27026 (*)",
122
+ 0x01026992 => "[LNK] VS2017 v15.9.5 build 27026 (*)",
123
+ 0x01016992 => "[IMP] VS2017 v15.9.5 build 27026 (*)",
124
+ 0x01006992 => "[EXP] VS2017 v15.9.5 build 27026 (*)",
125
+ 0x01046991 => "[ C ] VS2017 v15.9.4 build 27025 (*)",
126
+ 0x01036991 => "[ASM] VS2017 v15.9.4 build 27025 (*)",
127
+ 0x01056991 => "[C++] VS2017 v15.9.4 build 27025 (*)",
128
+ 0x00ff6991 => "[RES] VS2017 v15.9.4 build 27025 (*)",
129
+ 0x01026991 => "[LNK] VS2017 v15.9.4 build 27025 (*)",
130
+ 0x01016991 => "[IMP] VS2017 v15.9.4 build 27025 (*)",
131
+ 0x01006991 => "[EXP] VS2017 v15.9.4 build 27025 (*)",
132
+ 0x0104698f => "[ C ] VS2017 v15.9.1 build 27023 (*)",
133
+ 0x0103698f => "[ASM] VS2017 v15.9.1 build 27023 (*)",
134
+ 0x0105698f => "[C++] VS2017 v15.9.1 build 27023 (*)",
135
+ 0x00ff698f => "[RES] VS2017 v15.9.1 build 27023 (*)",
136
+ 0x0102698f => "[LNK] VS2017 v15.9.1 build 27023 (*)",
137
+ 0x0101698f => "[IMP] VS2017 v15.9.1 build 27023 (*)",
138
+ 0x0100698f => "[EXP] VS2017 v15.9.1 build 27023 (*)",
139
+ 0x0104686c => "[ C ] VS2017 v15.8.5 build 26732 (*)",
140
+ 0x0103686c => "[ASM] VS2017 v15.8.5 build 26732 (*)",
141
+ 0x0105686c => "[C++] VS2017 v15.8.5 build 26732 (*)",
142
+ 0x00ff686c => "[RES] VS2017 v15.8.5 build 26732 (*)",
143
+ 0x0102686c => "[LNK] VS2017 v15.8.5 build 26732 (*)",
144
+ 0x0101686c => "[IMP] VS2017 v15.8.5 build 26732 (*)",
145
+ 0x0100686c => "[EXP] VS2017 v15.8.5 build 26732 (*)",
146
+ 0x0104686a => "[ C ] VS2017 v15.8.9? build 26730 (*)",
147
+ 0x0103686a => "[ASM] VS2017 v15.8.9? build 26730 (*)",
148
+ 0x0105686a => "[C++] VS2017 v15.8.9? build 26730 (*)",
149
+ 0x00ff686a => "[RES] VS2017 v15.8.9? build 26730 (*)",
150
+ 0x0102686a => "[LNK] VS2017 v15.8.9? build 26730 (*)",
151
+ 0x0101686a => "[IMP] VS2017 v15.8.9? build 26730 (*)",
152
+ 0x0100686a => "[EXP] VS2017 v15.8.9? build 26730 (*)",
153
+ 0x01046869 => "[ C ] VS2017 v15.8.4 build 26729 (*)",
154
+ 0x01036869 => "[ASM] VS2017 v15.8.4 build 26729 (*)",
155
+ 0x01056869 => "[C++] VS2017 v15.8.4 build 26729 (*)",
156
+ 0x00ff6869 => "[RES] VS2017 v15.8.4 build 26729 (*)",
157
+ 0x01026869 => "[LNK] VS2017 v15.8.4 build 26729 (*)",
158
+ 0x01016869 => "[IMP] VS2017 v15.8.4 build 26729 (*)",
159
+ 0x01006869 => "[EXP] VS2017 v15.8.4 build 26729 (*)",
160
+ 0x01046866 => "[ C ] VS2017 v15.8.0 build 26726 (*)",
161
+ 0x01036866 => "[ASM] VS2017 v15.8.0 build 26726 (*)",
162
+ 0x01056866 => "[C++] VS2017 v15.8.0 build 26726 (*)",
163
+ 0x00ff6866 => "[RES] VS2017 v15.8.0 build 26726 (*)",
164
+ 0x01026866 => "[LNK] VS2017 v15.8.0 build 26726 (*)",
165
+ 0x01016866 => "[IMP] VS2017 v15.8.0 build 26726 (*)",
166
+ 0x01006866 => "[EXP] VS2017 v15.8.0 build 26726 (*)",
167
+ 0x01046741 => "[ C ] VS2017 v15.7.5 build 26433 (*)",
168
+ 0x01036741 => "[ASM] VS2017 v15.7.5 build 26433 (*)",
169
+ 0x01056741 => "[C++] VS2017 v15.7.5 build 26433 (*)",
170
+ 0x00ff6741 => "[RES] VS2017 v15.7.5 build 26433 (*)",
171
+ 0x01026741 => "[LNK] VS2017 v15.7.5 build 26433 (*)",
172
+ 0x01016741 => "[IMP] VS2017 v15.7.5 build 26433 (*)",
173
+ 0x01006741 => "[EXP] VS2017 v15.7.5 build 26433 (*)",
174
+ 0x0104673f => "[ C ] VS2017 v15.7.4 build 26431 (*)",
175
+ 0x0103673f => "[ASM] VS2017 v15.7.4 build 26431 (*)",
176
+ 0x0105673f => "[C++] VS2017 v15.7.4 build 26431 (*)",
177
+ 0x00ff673f => "[RES] VS2017 v15.7.4 build 26431 (*)",
178
+ 0x0102673f => "[LNK] VS2017 v15.7.4 build 26431 (*)",
179
+ 0x0101673f => "[IMP] VS2017 v15.7.4 build 26431 (*)",
180
+ 0x0100673f => "[EXP] VS2017 v15.7.4 build 26431 (*)",
181
+ 0x0104673e => "[ C ] VS2017 v15.7.3 build 26430 (*)",
182
+ 0x0103673e => "[ASM] VS2017 v15.7.3 build 26430 (*)",
183
+ 0x0105673e => "[C++] VS2017 v15.7.3 build 26430 (*)",
184
+ 0x00ff673e => "[RES] VS2017 v15.7.3 build 26430 (*)",
185
+ 0x0102673e => "[LNK] VS2017 v15.7.3 build 26430 (*)",
186
+ 0x0101673e => "[IMP] VS2017 v15.7.3 build 26430 (*)",
187
+ 0x0100673e => "[EXP] VS2017 v15.7.3 build 26430 (*)",
188
+ 0x0104673d => "[ C ] VS2017 v15.7.2 build 26429 (*)",
189
+ 0x0103673d => "[ASM] VS2017 v15.7.2 build 26429 (*)",
190
+ 0x0105673d => "[C++] VS2017 v15.7.2 build 26429 (*)",
191
+ 0x00ff673d => "[RES] VS2017 v15.7.2 build 26429 (*)",
192
+ 0x0102673d => "[LNK] VS2017 v15.7.2 build 26429 (*)",
193
+ 0x0101673d => "[IMP] VS2017 v15.7.2 build 26429 (*)",
194
+ 0x0100673d => "[EXP] VS2017 v15.7.2 build 26429 (*)",
195
+ 0x0104673c => "[ C ] VS2017 v15.7.1 build 26428 (*)",
196
+ 0x0103673c => "[ASM] VS2017 v15.7.1 build 26428 (*)",
197
+ 0x0105673c => "[C++] VS2017 v15.7.1 build 26428 (*)",
198
+ 0x00ff673c => "[RES] VS2017 v15.7.1 build 26428 (*)",
199
+ 0x0102673c => "[LNK] VS2017 v15.7.1 build 26428 (*)",
200
+ 0x0101673c => "[IMP] VS2017 v15.7.1 build 26428 (*)",
201
+ 0x0100673c => "[EXP] VS2017 v15.7.1 build 26428 (*)",
202
+ 0x01046614 => "[ C ] VS2017 v15.6.7 build 26132 (*)",
203
+ 0x01036614 => "[ASM] VS2017 v15.6.7 build 26132 (*)",
204
+ 0x01056614 => "[C++] VS2017 v15.6.7 build 26132 (*)",
205
+ 0x00ff6614 => "[RES] VS2017 v15.6.7 build 26132 (*)",
206
+ 0x01026614 => "[LNK] VS2017 v15.6.7 build 26132 (*)",
207
+ 0x01016614 => "[IMP] VS2017 v15.6.7 build 26132 (*)",
208
+ 0x01006614 => "[EXP] VS2017 v15.6.7 build 26132 (*)",
209
+ 0x01046613 => "[ C ] VS2017 v15.6.6 build 26131 (*)",
210
+ 0x01036613 => "[ASM] VS2017 v15.6.6 build 26131 (*)",
211
+ 0x01056613 => "[C++] VS2017 v15.6.6 build 26131 (*)",
212
+ 0x00ff6613 => "[RES] VS2017 v15.6.6 build 26131 (*)",
213
+ 0x01026613 => "[LNK] VS2017 v15.6.6 build 26131 (*)",
214
+ 0x01016613 => "[IMP] VS2017 v15.6.6 build 26131 (*)",
215
+ 0x01006613 => "[EXP] VS2017 v15.6.6 build 26131 (*)",
216
+ 0x01046611 => "[ C ] VS2017 v15.6.3 build 26129 (*)",
217
+ 0x01036611 => "[ASM] VS2017 v15.6.3 build 26129 (*)",
218
+ 0x01056611 => "[C++] VS2017 v15.6.3 build 26129 (*)",
219
+ 0x00ff6611 => "[RES] VS2017 v15.6.3 build 26129 (*)",
220
+ 0x01026611 => "[LNK] VS2017 v15.6.3 build 26129 (*)",
221
+ 0x01016611 => "[IMP] VS2017 v15.6.3 build 26129 (*)",
222
+ 0x01006611 => "[EXP] VS2017 v15.6.3 build 26129 (*)",
223
+ 0x01046610 => "[ C ] VS2017 v15.6.0 build 26128 (*)",
224
+ 0x01036610 => "[ASM] VS2017 v15.6.0 build 26128 (*)",
225
+ 0x01056610 => "[C++] VS2017 v15.6.0 build 26128 (*)",
226
+ 0x00ff6610 => "[RES] VS2017 v15.6.0 build 26128 (*)",
227
+ 0x01026610 => "[LNK] VS2017 v15.6.0 build 26128 (*)",
228
+ 0x01016610 => "[IMP] VS2017 v15.6.0 build 26128 (*)",
229
+ 0x01006610 => "[EXP] VS2017 v15.6.0 build 26128 (*)",
230
+ 0x010464eb => "[ C ] VS2017 v15.5.6 build 25835 (*)",
231
+ 0x010364eb => "[ASM] VS2017 v15.5.6 build 25835 (*)",
232
+ 0x010564eb => "[C++] VS2017 v15.5.6 build 25835 (*)",
233
+ 0x00ff64eb => "[RES] VS2017 v15.5.6 build 25835 (*)",
234
+ 0x010264eb => "[LNK] VS2017 v15.5.6 build 25835 (*)",
235
+ 0x010164eb => "[IMP] VS2017 v15.5.6 build 25835 (*)",
236
+ 0x010064eb => "[EXP] VS2017 v15.5.6 build 25835 (*)",
237
+ 0x010464ea => "[ C ] VS2017 v15.5.4 build 25834",
238
+ 0x010364ea => "[ASM] VS2017 v15.5.4 build 25834",
239
+ 0x010564ea => "[C++] VS2017 v15.5.4 build 25834",
240
+ 0x00ff64ea => "[RES] VS2017 v15.5.4 build 25834",
241
+ 0x010264ea => "[LNK] VS2017 v15.5.4 build 25834",
242
+ 0x010064ea => "[EXP] VS2017 v15.5.4 build 25834",
243
+ 0x010164ea => "[IMP] VS2017 v15.5.4 build 25834",
244
+ 0x010464e7 => "[ C ] VS2017 v15.5.2 build 25831 (*)",
245
+ 0x010364e7 => "[ASM] VS2017 v15.5.2 build 25831 (*)",
246
+ 0x010564e7 => "[C++] VS2017 v15.5.2 build 25831 (*)",
247
+ 0x00ff64e7 => "[RES] VS2017 v15.5.2 build 25831 (*)",
248
+ 0x010264e7 => "[LNK] VS2017 v15.5.2 build 25831 (*)",
249
+ 0x010164e7 => "[IMP] VS2017 v15.5.2 build 25831 (*)",
250
+ 0x010064e7 => "[EXP] VS2017 v15.5.2 build 25831 (*)",
251
+ 0x010463cb => "[ C ] VS2017 v15.4.5 build 25547 (*)",
252
+ 0x010363cb => "[ASM] VS2017 v15.4.5 build 25547 (*)",
253
+ 0x010563cb => "[C++] VS2017 v15.4.5 build 25547 (*)",
254
+ 0x00ff63cb => "[RES] VS2017 v15.4.5 build 25547 (*)",
255
+ 0x010263cb => "[LNK] VS2017 v15.4.5 build 25547 (*)",
256
+ 0x010163cb => "[IMP] VS2017 v15.4.5 build 25547 (*)",
257
+ 0x010063cb => "[EXP] VS2017 v15.4.5 build 25547 (*)",
258
+ 0x010463c6 => "[ C ] VS2017 v15.4.4 build 25542 (*)",
259
+ 0x010363c6 => "[ASM] VS2017 v15.4.4 build 25542 (*)",
260
+ 0x010563c6 => "[C++] VS2017 v15.4.4 build 25542 (*)",
261
+ 0x00ff63c6 => "[RES] VS2017 v15.4.4 build 25542 (*)",
262
+ 0x010263c6 => "[LNK] VS2017 v15.4.4 build 25542 (*)",
263
+ 0x010163c6 => "[IMP] VS2017 v15.4.4 build 25542 (*)",
264
+ 0x010063c6 => "[EXP] VS2017 v15.4.4 build 25542 (*)",
265
+ 0x010463a3 => "[ C ] VS2017 v15.3.3 build 25507 (*)",
266
+ 0x010363a3 => "[ASM] VS2017 v15.3.3 build 25507 (*)",
267
+ 0x010563a3 => "[C++] VS2017 v15.3.3 build 25507 (*)",
268
+ 0x00ff63a3 => "[RES] VS2017 v15.3.3 build 25507 (*)",
269
+ 0x010263a3 => "[LNK] VS2017 v15.3.3 build 25507 (*)",
270
+ 0x010163a3 => "[IMP] VS2017 v15.3.3 build 25507 (*)",
271
+ 0x010063a3 => "[EXP] VS2017 v15.3.3 build 25507 (*)",
272
+ 0x010463a2 => "[ C ] VS2017 v15.3 build 25506 (*)",
273
+ 0x010363a2 => "[ASM] VS2017 v15.3 build 25506 (*)",
274
+ 0x010563a2 => "[C++] VS2017 v15.3 build 25506 (*)",
275
+ 0x00ff63a2 => "[RES] VS2017 v15.3 build 25506 (*)",
276
+ 0x010263a2 => "[LNK] VS2017 v15.3 build 25506 (*)",
277
+ 0x010163a2 => "[IMP] VS2017 v15.3 build 25506 (*)",
278
+ 0x010063a2 => "[EXP] VS2017 v15.3 build 25506 (*)",
279
+ 0x010461b9 => "[ C ] VS2017 v15.0 build 25017 (*)",
280
+ 0x010361b9 => "[ASM] VS2017 v15.0 build 25017 (*)",
281
+ 0x010561b9 => "[C++] VS2017 v15.0 build 25017 (*)",
282
+ 0x00ff61b9 => "[RES] VS2017 v15.0 build 25017 (*)",
283
+ 0x010261b9 => "[LNK] VS2017 v15.0 build 25017 (*)",
284
+ 0x010161b9 => "[IMP] VS2017 v15.0 build 25017 (*)",
285
+ 0x010061b9 => "[EXP] VS2017 v15.0 build 25017 (*)",
286
+ 0x01045e97 => "[ C ] VS2015 UPD3.1 build 24215",
287
+ 0x01055e97 => "[C++] VS2015 UPD3.1 build 24215",
288
+ 0x01025e97 => "[LNK] VS2015 UPD3.1 build 24215",
289
+ 0x01005e97 => "[EXP] VS2015 UPD3.1 build 24215",
290
+ 0x01015e97 => "[IMP] VS2015 UPD3.1 build 24215",
291
+ 0x01045e95 => "[ C ] VS2015 UPD3 build 24213",
292
+ 0x01035e92 => "[ASM] VS2015 UPD3 build 24210",
293
+ 0x01055e95 => "[C++] VS2015 UPD3 build 24213",
294
+ 0x00ff5e92 => "[RES] VS2015 UPD3 build 24210",
295
+ 0x01025e95 => "[LNK] VS2015 UPD3 build 24213",
296
+ 0x01005e95 => "[EXP] VS2015 UPD3 build 24213",
297
+ 0x01015e95 => "[IMP] VS2015 UPD3 build 24213",
298
+ 0x01045e92 => "[ C ] VS2015 Update 3 [14.0] build 24210 (*)",
299
+ 0x01055e92 => "[C++] VS2015 Update 3 [14.0] build 24210 (*)",
300
+ 0x01025e92 => "[LNK] VS2015 Update 3 [14.0] build 24210 (*)",
301
+ 0x01015e92 => "[IMP] VS2015 Update 3 [14.0] build 24210 (*)",
302
+ 0x01005e92 => "[EXP] VS2015 Update 3 [14.0] build 24210 (*)",
303
+ 0x01045d6e => "[ C ] VS2015 UPD2 build 23918",
304
+ 0x01035d6e => "[ASM] VS2015 UPD2 build 23918",
305
+ 0x01055d6e => "[C++] VS2015 UPD2 build 23918",
306
+ 0x00ff5d6e => "[RES] VS2015 UPD2 build 23918",
307
+ 0x01025d6e => "[LNK] VS2015 UPD2 build 23918",
308
+ 0x01005d6e => "[EXP] VS2015 UPD2 build 23918",
309
+ 0x01015d6e => "[IMP] VS2015 UPD2 build 23918",
310
+ 0x01045bd2 => "[ C ] VS2015 UPD1 build 23506",
311
+ 0x01035bd2 => "[ASM] VS2015 UPD1 build 23506",
312
+ 0x01055bd2 => "[C++] VS2015 UPD1 build 23506",
313
+ 0x00ff5bd2 => "[RES] VS2015 UPD1 build 23506",
314
+ 0x01025bd2 => "[LNK] VS2015 UPD1 build 23506",
315
+ 0x01005bd2 => "[EXP] VS2015 UPD1 build 23506",
316
+ 0x01015bd2 => "[IMP] VS2015 UPD1 build 23506",
317
+ 0x010459f2 => "[ C ] VS2015 [14.0] build 23026",
318
+ 0x010359f2 => "[ASM] VS2015 [14.0] build 23026",
319
+ 0x010559f2 => "[C++] VS2015 [14.0] build 23026",
320
+ 0x00ff59f2 => "[RES] VS2015 [14.0] build 23026",
321
+ 0x010259f2 => "[LNK] VS2015 [14.0] build 23026",
322
+ 0x010059f2 => "[EXP] VS2015 [14.0] build 23026",
323
+ 0x010159f2 => "[IMP] VS2015 [14.0] build 23026",
324
+ 0x00e0527a => "[ C ] VS2013 Nobemver CTP [12.0] build 21114 (*)",
325
+ 0x00df527a => "[ASM] VS2013 Nobemver CTP [12.0] build 21114 (*)",
326
+ 0x00e1527a => "[C++] VS2013 Nobemver CTP [12.0] build 21114 (*)",
327
+ 0x00db527a => "[RES] VS2013 Nobemver CTP [12.0] build 21114 (*)",
328
+ 0x00de527a => "[LNK] VS2013 Nobemver CTP [12.0] build 21114 (*)",
329
+ 0x00dd527a => "[IMP] VS2013 Nobemver CTP [12.0] build 21114 (*)",
330
+ 0x00dc527a => "[EXP] VS2013 Nobemver CTP [12.0] build 21114 (*)",
331
+ 0x00e09eb5 => "[ C ] VS2013 UPD5 build 40629",
332
+ 0x00e19eb5 => "[C++] VS2013 UPD5 build 40629",
333
+ 0x00db9eb5 => "[RES] VS2013 Update 5 [12.0] build 40629 (*)",
334
+ 0x00de9eb5 => "[LNK] VS2013 UPD5 build 40629",
335
+ 0x00dc9eb5 => "[EXP] VS2013 UPD5 build 40629",
336
+ 0x00dd9eb5 => "[IMP] VS2013 UPD5 build 40629",
337
+ 0x00df9eb5 => "[ASM] VS2013 UPD5 build 40629",
338
+ 0x00e0797d => "[ C ] VS2013 UPD4 build 31101 (*)",
339
+ 0x00e1797d => "[C++] VS2013 UPD4 build 31101 (*)",
340
+ 0x00db797d => "[RES] VS2013 UPD4 build 31101 (*)",
341
+ 0x00de797d => "[LNK] VS2013 UPD4 build 31101 (*)",
342
+ 0x00dc797d => "[EXP] VS2013 UPD4 build 31101 (*)",
343
+ 0x00dd797d => "[IMP] VS2013 UPD4 build 31101 (*)",
344
+ 0x00df797d => "[ASM] VS2013 UPD4 build 31101 (*)",
345
+ 0x00e07803 => "[ C ] VS2013 UPD3 build 30723 (*)",
346
+ 0x00e17803 => "[C++] VS2013 UPD3 build 30723 (*)",
347
+ 0x00db7803 => "[RES] VS2013 UPD3 build 30723 (*)",
348
+ 0x00de7803 => "[LNK] VS2013 UPD3 build 30723 (*)",
349
+ 0x00dc7803 => "[EXP] VS2013 UPD3 build 30723 (*)",
350
+ 0x00dd7803 => "[IMP] VS2013 UPD3 build 30723 (*)",
351
+ 0x00df7803 => "[ASM] VS2013 UPD3 build 30723 (*)",
352
+ 0x00e07725 => "[ C ] VS2013 UPD2 build 30501",
353
+ 0x00e17725 => "[C++] VS2013 UPD2 build 30501",
354
+ 0x00db7725 => "[RES] VS2013 Update 2 [12.0] build 30501 (*)",
355
+ 0x00de7725 => "[LNK] VS2013 UPD2 build 30501",
356
+ 0x00dc7725 => "[EXP] VS2013 UPD2 build 30501",
357
+ 0x00dd7725 => "[IMP] VS2013 UPD2 build 30501",
358
+ 0x00df7725 => "[ASM] VS2013 UPD2 build 30501",
359
+ 0x00e07674 => "[ C ] VS2013 Update2 RC [12.0] build 30324 (*)",
360
+ 0x00df7674 => "[ASM] VS2013 Update2 RC [12.0] build 30324 (*)",
361
+ 0x00e17674 => "[C++] VS2013 Update2 RC [12.0] build 30324 (*)",
362
+ 0x00db7674 => "[RES] VS2013 Update2 RC [12.0] build 30324 (*)",
363
+ 0x00de7674 => "[LNK] VS2013 Update2 RC [12.0] build 30324 (*)",
364
+ 0x00dd7674 => "[IMP] VS2013 Update2 RC [12.0] build 30324 (*)",
365
+ 0x00dc7674 => "[EXP] VS2013 Update2 RC [12.0] build 30324 (*)",
366
+ 0x00e0520d => "[ C ] VS2013 build 21005",
367
+ 0x00e1520d => "[C++] VS2013 build 21005",
368
+ 0x00db520d => "[RES] VS2013 build 21005",
369
+ 0x00de520d => "[LNK] VS2013 build 21005",
370
+ 0x00dc520d => "[EXP] VS2013 build 21005",
371
+ 0x00dd520d => "[IMP] VS2013 build 21005",
372
+ 0x00df520d => "[ASM] VS2013 build 21005",
373
+ 0x00e0515b => "[ C ] VS2013 RC [12.0] build 20827 (*)",
374
+ 0x00df515b => "[ASM] VS2013 RC [12.0] build 20827 (*)",
375
+ 0x00e1515b => "[C++] VS2013 RC [12.0] build 20827 (*)",
376
+ 0x00db515b => "[RES] VS2013 RC [12.0] build 20827 (*)",
377
+ 0x00de515b => "[LNK] VS2013 RC [12.0] build 20827 (*)",
378
+ 0x00dd515b => "[IMP] VS2013 RC [12.0] build 20827 (*)",
379
+ 0x00dc515b => "[EXP] VS2013 RC [12.0] build 20827 (*)",
380
+ 0x00e05089 => "[ C ] VS2013 Preview [12.0] build 20617 (*)",
381
+ 0x00df5089 => "[ASM] VS2013 Preview [12.0] build 20617 (*)",
382
+ 0x00e15089 => "[C++] VS2013 Preview [12.0] build 20617 (*)",
383
+ 0x00db5089 => "[RES] VS2013 Preview [12.0] build 20617 (*)",
384
+ 0x00de5089 => "[LNK] VS2013 Preview [12.0] build 20617 (*)",
385
+ 0x00dd5089 => "[IMP] VS2013 Preview [12.0] build 20617 (*)",
386
+ 0x00dc5089 => "[EXP] VS2013 Preview [12.0] build 20617 (*)",
387
+ 0x00ceee66 => "[ C ] VS2012 UPD4 build 61030",
388
+ 0x00cfee66 => "[C++] VS2012 UPD4 build 61030",
389
+ 0x00cdee66 => "[ASM] VS2012 UPD4 build 61030",
390
+ 0x00c9ee66 => "[RES] VS2012 UPD4 build 61030",
391
+ 0x00ccee66 => "[LNK] VS2012 UPD4 build 61030",
392
+ 0x00caee66 => "[EXP] VS2012 UPD4 build 61030",
393
+ 0x00cbee66 => "[IMP] VS2012 UPD4 build 61030",
394
+ 0x00ceecc2 => "[ C ] VS2012 UPD3 build 60610 (*)",
395
+ 0x00cfecc2 => "[C++] VS2012 UPD3 build 60610 (*)",
396
+ 0x00cdecc2 => "[ASM] VS2012 UPD3 build 60610 (*)",
397
+ 0x00c9ecc2 => "[RES] VS2012 UPD3 build 60610 (*)",
398
+ 0x00ccecc2 => "[LNK] VS2012 UPD3 build 60610 (*)",
399
+ 0x00caecc2 => "[EXP] VS2012 UPD3 build 60610 (*)",
400
+ 0x00cbecc2 => "[IMP] VS2012 UPD3 build 60610 (*)",
401
+ 0x00ceeb9b => "[ C ] VS2012 UPD2 build 60315 (*)",
402
+ 0x00cfeb9b => "[C++] VS2012 UPD2 build 60315 (*)",
403
+ 0x00cdeb9b => "[ASM] VS2012 UPD2 build 60315 (*)",
404
+ 0x00c9eb9b => "[RES] VS2012 UPD2 build 60315 (*)",
405
+ 0x00cceb9b => "[LNK] VS2012 UPD2 build 60315 (*)",
406
+ 0x00caeb9b => "[EXP] VS2012 UPD2 build 60315 (*)",
407
+ 0x00cbeb9b => "[IMP] VS2012 UPD2 build 60315 (*)",
408
+ 0x00cec7a2 => "[ C ] VS2012 UPD1 build 51106 (*)",
409
+ 0x00cfc7a2 => "[C++] VS2012 UPD1 build 51106 (*)",
410
+ 0x00cdc7a2 => "[ASM] VS2012 UPD1 build 51106 (*)",
411
+ 0x00c9c7a2 => "[RES] VS2012 UPD1 build 51106 (*)",
412
+ 0x00ccc7a2 => "[LNK] VS2012 UPD1 build 51106 (*)",
413
+ 0x00cac7a2 => "[EXP] VS2012 UPD1 build 51106 (*)",
414
+ 0x00cbc7a2 => "[IMP] VS2012 UPD1 build 51106 (*)",
415
+ 0x00cec751 => "[ C ] VS2012 November CTP [11.0] build 51025 (*)",
416
+ 0x00cdc751 => "[ASM] VS2012 November CTP [11.0] build 51025 (*)",
417
+ 0x00cfc751 => "[C++] VS2012 November CTP [11.0] build 51025 (*)",
418
+ 0x00c9c751 => "[RES] VS2012 November CTP [11.0] build 51025 (*)",
419
+ 0x00ccc751 => "[LNK] VS2012 November CTP [11.0] build 51025 (*)",
420
+ 0x00cbc751 => "[IMP] VS2012 November CTP [11.0] build 51025 (*)",
421
+ 0x00cac751 => "[EXP] VS2012 November CTP [11.0] build 51025 (*)",
422
+ 0x00cec627 => "[ C ] VS2012 build 50727",
423
+ 0x00cfc627 => "[C++] VS2012 build 50727",
424
+ 0x00c9c627 => "[RES] VS2012 build 50727",
425
+ 0x00cdc627 => "[ASM] VS2012 build 50727",
426
+ 0x00cac627 => "[EXP] VS2012 build 50727",
427
+ 0x00cbc627 => "[IMP] VS2012 build 50727",
428
+ 0x00ccc627 => "[LNK] VS2012 build 50727",
429
+ 0x00aa9d1b => "[ C ] VS2010 SP1 build 40219",
430
+ 0x00ab9d1b => "[C++] VS2010 SP1 build 40219",
431
+ 0x009d9d1b => "[LNK] VS2010 SP1 build 40219",
432
+ 0x009a9d1b => "[RES] VS2010 SP1 build 40219",
433
+ 0x009b9d1b => "[EXP] VS2010 SP1 build 40219",
434
+ 0x009c9d1b => "[IMP] VS2010 SP1 build 40219",
435
+ 0x009e9d1b => "[ASM] VS2010 SP1 build 40219",
436
+ 0x00aa766f => "[ C ] VS2010 build 30319",
437
+ 0x00ab766f => "[C++] VS2010 build 30319",
438
+ 0x009d766f => "[LNK] VS2010 build 30319",
439
+ 0x009a766f => "[RES] VS2010 build 30319",
440
+ 0x009b766f => "[EXP] VS2010 build 30319",
441
+ 0x009c766f => "[IMP] VS2010 build 30319",
442
+ 0x009e766f => "[ASM] VS2010 build 30319",
443
+ 0x00aa520b => "[ C ] VS2010 Beta 2 [10.0] build 21003 (*)",
444
+ 0x009e520b => "[ASM] VS2010 Beta 2 [10.0] build 21003 (*)",
445
+ 0x00ab520b => "[C++] VS2010 Beta 2 [10.0] build 21003 (*)",
446
+ 0x009a520b => "[RES] VS2010 Beta 2 [10.0] build 21003 (*)",
447
+ 0x009d520b => "[LNK] VS2010 Beta 2 [10.0] build 21003 (*)",
448
+ 0x009c520b => "[IMP] VS2010 Beta 2 [10.0] build 21003 (*)",
449
+ 0x009b520b => "[EXP] VS2010 Beta 2 [10.0] build 21003 (*)",
450
+ 0x00aa501a => "[ C ] VS2010 Beta 1 [10.0] build 20506 (*)",
451
+ 0x009e501a => "[ASM] VS2010 Beta 1 [10.0] build 20506 (*)",
452
+ 0x00ab501a => "[C++] VS2010 Beta 1 [10.0] build 20506 (*)",
453
+ 0x009a501a => "[RES] VS2010 Beta 1 [10.0] build 20506 (*)",
454
+ 0x009d501a => "[LNK] VS2010 Beta 1 [10.0] build 20506 (*)",
455
+ 0x009c501a => "[IMP] VS2010 Beta 1 [10.0] build 20506 (*)",
456
+ 0x009b501a => "[EXP] VS2010 Beta 1 [10.0] build 20506 (*)",
457
+ 0x00837809 => "[ C ] VS2008 SP1 build 30729",
458
+ 0x00847809 => "[C++] VS2008 SP1 build 30729",
459
+ 0x00947809 => "[RES] VS2008 SP1 [9.0] build 30729 (*)",
460
+ 0x00957809 => "[ASM] VS2008 SP1 build 30729",
461
+ 0x00927809 => "[EXP] VS2008 SP1 build 30729",
462
+ 0x00937809 => "[IMP] VS2008 SP1 build 30729",
463
+ 0x00917809 => "[LNK] VS2008 SP1 build 30729",
464
+ 0x0083521e => "[ C ] VS2008 build 21022",
465
+ 0x0084521e => "[C++] VS2008 build 21022",
466
+ 0x0091521e => "[LNK] VS2008 build 21022",
467
+ 0x0094521e => "[RES] VS2008 build 21022",
468
+ 0x0092521e => "[EXP] VS2008 build 21022",
469
+ 0x0093521e => "[IMP] VS2008 build 21022",
470
+ 0x0095521e => "[ASM] VS2008 build 21022",
471
+ 0x008350e2 => "[ C ] VS2008 Beta 2 [9.0] build 20706 (*)",
472
+ 0x009550e2 => "[ASM] VS2008 Beta 2 [9.0] build 20706 (*)",
473
+ 0x008450e2 => "[C++] VS2008 Beta 2 [9.0] build 20706 (*)",
474
+ 0x009450e2 => "[RES] VS2008 Beta 2 [9.0] build 20706 (*)",
475
+ 0x009150e2 => "[LNK] VS2008 Beta 2 [9.0] build 20706 (*)",
476
+ 0x009350e2 => "[IMP] VS2008 Beta 2 [9.0] build 20706 (*)",
477
+ 0x009250e2 => "[EXP] VS2008 Beta 2 [9.0] build 20706 (*)",
478
+ 0x006dc627 => "[ C ] VS2005 build 50727",
479
+ 0x006ec627 => "[C++] VS2005 build 50727",
480
+ 0x0078c627 => "[LNK] VS2005 build 50727",
481
+ 0x007cc627 => "[RES] VS2005 build 50727",
482
+ 0x007ac627 => "[EXP] VS2005 build 50727",
483
+ 0x007bc627 => "[IMP] VS2005 build 50727",
484
+ 0x007dc627 => "[ASM] VS2005 build 50727",
485
+ 0x006dc490 => "[ C ] VS2005 [8.0] build 50320 (*)",
486
+ 0x007dc490 => "[ASM] VS2005 [8.0] build 50320 (*)",
487
+ 0x006ec490 => "[C++] VS2005 [8.0] build 50320 (*)",
488
+ 0x007cc490 => "[RES] VS2005 [8.0] build 50320 (*)",
489
+ 0x0078c490 => "[LNK] VS2005 [8.0] build 50320 (*)",
490
+ 0x007bc490 => "[IMP] VS2005 [8.0] build 50320 (*)",
491
+ 0x007ac490 => "[EXP] VS2005 [8.0] build 50320 (*)",
492
+ 0x006dc427 => "[ C ] VS2005 Beta 2 [8.0] build 50215 (*)",
493
+ 0x007dc427 => "[ASM] VS2005 Beta 2 [8.0] build 50215 (*)",
494
+ 0x006ec427 => "[C++] VS2005 Beta 2 [8.0] build 50215 (*)",
495
+ 0x007cc427 => "[RES] VS2005 Beta 2 [8.0] build 50215 (*)",
496
+ 0x0078c427 => "[LNK] VS2005 Beta 2 [8.0] build 50215 (*)",
497
+ 0x007bc427 => "[IMP] VS2005 Beta 2 [8.0] build 50215 (*)",
498
+ 0x007ac427 => "[EXP] VS2005 Beta 2 [8.0] build 50215 (*)",
499
+ 0x006d9e9f => "[ C ] VS2005 Beta 1 [8.0] build 40607 (*)",
500
+ 0x007d9e9f => "[ASM] VS2005 Beta 1 [8.0] build 40607 (*)",
501
+ 0x006e9e9f => "[C++] VS2005 Beta 1 [8.0] build 40607 (*)",
502
+ 0x007c9e9f => "[RES] VS2005 Beta 1 [8.0] build 40607 (*)",
503
+ 0x00789e9f => "[LNK] VS2005 Beta 1 [8.0] build 40607 (*)",
504
+ 0x007b9e9f => "[IMP] VS2005 Beta 1 [8.0] build 40607 (*)",
505
+ 0x007a9e9f => "[EXP] VS2005 Beta 1 [8.0] build 40607 (*)",
506
+ 0x006d9d76 => "[ C ] Windows Server 2003 SP1 DDK (for AMD64) build 40310 (*)",
507
+ 0x007d9d76 => "[ASM] Windows Server 2003 SP1 DDK (for AMD64) build 40310 (*)",
508
+ 0x006e9d76 => "[C++] Windows Server 2003 SP1 DDK (for AMD64) build 40310 (*)",
509
+ 0x007c9d76 => "[RES] Windows Server 2003 SP1 DDK (for AMD64) build 40310 (*)",
510
+ 0x00789d76 => "[LNK] Windows Server 2003 SP1 DDK (for AMD64) build 40310 (*)",
511
+ 0x007b9d76 => "[IMP] Windows Server 2003 SP1 DDK (for AMD64) build 40310 (*)",
512
+ 0x007a9d76 => "[EXP] Windows Server 2003 SP1 DDK (for AMD64) build 40310 (*)",
513
+ 0x005f178e => "[ C ] VS2003 (.NET) SP1 build 6030",
514
+ 0x0060178e => "[C++] VS2003 (.NET) SP1 build 6030",
515
+ 0x005a178e => "[LNK] VS2003 (.NET) SP1 build 6030",
516
+ 0x000f178e => "[ASM] VS2003 (.NET) SP1 build 6030",
517
+ 0x005e178e => "[RES] VS.NET 2003 SP1 [7.1] build 6030 (*)",
518
+ 0x005c178e => "[EXP] VS2003 (.NET) SP1 build 6030",
519
+ 0x005d178e => "[IMP] VS2003 (.NET) SP1 build 6030",
520
+ 0x005f0fc3 => "[ C ] Windows Server 2003 SP1 DDK build 4035 (*)",
521
+ 0x000f0fc3 => "[ASM] Windows Server 2003 SP1 DDK build 4035 (*)",
522
+ 0x00600fc3 => "[C++] Windows Server 2003 SP1 DDK build 4035 (*)",
523
+ 0x005e0fc3 => "[RES] Windows Server 2003 SP1 DDK build 4035 (*)",
524
+ 0x005a0fc3 => "[LNK] Windows Server 2003 SP1 DDK build 4035 (*)",
525
+ 0x005d0fc3 => "[IMP] Windows Server 2003 SP1 DDK build 4035 (*)",
526
+ 0x005c0fc3 => "[EXP] Windows Server 2003 SP1 DDK build 4035 (*)",
527
+ 0x005f0c05 => "[ C ] VS2003 (.NET) build 3077",
528
+ 0x00600c05 => "[C++] VS2003 (.NET) build 3077",
529
+ 0x000f0c05 => "[ASM] VS2003 (.NET) build 3077",
530
+ 0x005e0bec => "[RES] VS2003 (.NET) build 3052",
531
+ 0x005c0c05 => "[EXP] VS2003 (.NET) build 3077",
532
+ 0x005d0c05 => "[IMP] VS2003 (.NET) build 3077",
533
+ 0x005a0c05 => "[LNK] VS2003 (.NET) build 3077",
534
+ 0x005e0c05 => "[RES] VS.NET 2003 [7.1] build 3077 (*)",
535
+ 0x001c24fa => "[ C ] VS2002 (.NET) build 9466",
536
+ 0x001d24fa => "[C++] VS2002 (.NET) build 9466",
537
+ 0x004024fa => "[ASM] VS2002 (.NET) build 9466",
538
+ 0x003d24fa => "[LNK] VS2002 (.NET) build 9466",
539
+ 0x004524fa => "[RES] VS2002 (.NET) build 9466",
540
+ 0x003f24fa => "[EXP] VS2002 (.NET) build 9466",
541
+ 0x001924fa => "[IMP] VS2002 (.NET) build 9466",
542
+ 0x001c23d8 => "[ C ] Windows XP SP1 DDK build 9176 (*)",
543
+ 0x004023d8 => "[ASM] Windows XP SP1 DDK build 9176 (*)",
544
+ 0x001d23d8 => "[C++] Windows XP SP1 DDK build 9176 (*)",
545
+ 0x004523d8 => "[RES] Windows XP SP1 DDK build 9176 (*)",
546
+ 0x003d23d8 => "[LNK] Windows XP SP1 DDK build 9176 (*)",
547
+ 0x001923d8 => "[IMP] Windows XP SP1 DDK build 9176 (*)",
548
+ 0x003f23d8 => "[EXP] Windows XP SP1 DDK build 9176 (*)",
549
+ 0x000a2636 => "[ C ] VS98 (6.0) SP6 build 8804",
550
+ 0x000b2636 => "[C++] VS98 (6.0) SP6 build 8804",
551
+ 0x00152306 => "[ C ] VC++ 6.0 SP5 build 8804",
552
+ 0x00162306 => "[C++] VC++ 6.0 SP5 build 8804",
553
+ 0x000420ff => "[LNK] VC++ 6.0 SP5 imp/exp build 8447",
554
+ 0x000606c7 => "[RES] VS98 (6.0) SP6 cvtres build 1736",
555
+ 0x000a1fe8 => "[ C ] VS98 (6.0) build 8168",
556
+ 0x000b1fe8 => "[C++] VS98 (6.0) build 8168",
557
+ 0x000606b8 => "[RES] VS98 (6.0) cvtres build 1720",
558
+ 0x00041fe8 => "[LNK] VS98 (6.0) imp/exp build 8168",
559
+ 0x00060684 => "[RES] VS97 (5.0) SP3 cvtres 5.00.1668",
560
+ 0x00021c87 => "[IMP] VS97 (5.0) SP3 link 5.10.7303",
561
+ }
562
+ end