pedump 0.5.2 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 36cf566a0402466825375c371ef074e1512e0f68
4
- data.tar.gz: 57c35cffa2643d1e02884f5e3acbadd6bc435963
2
+ SHA256:
3
+ metadata.gz: '09298f0bc9e608f9b7636a80f6f4b9aeb29aaf6f8f3bf72aa743a06d1bc3dd30'
4
+ data.tar.gz: e86dc4d6edd01222416e4937cec876a2551dea3b4ba8cb7eefb7aaa09d0375ce
5
5
  SHA512:
6
- metadata.gz: 6064efb885476ed1f789e8ab4d7ca9ea59202c41d61a9b5434cda1bdc906aa9972ca8b73f5808427110137c9f72d869b8a9bcacc8a6a52ef992c77b66ef45bd1
7
- data.tar.gz: 1dbe9488d26068fc432e338ae1225d4eea6359334a30ed7f335a7229a7fde5fdf158f4a5eb458264bcf0006a37d62b634072afc887abf0e253f783ee7e96cb9c
6
+ metadata.gz: 3b83b01e940fb0388a95566d4ca53fe61913f02b9d474987a35deb9c0b4073d66712a9179f801bc617f7202a3d42fd0d05e5a1cbe34ec332f3cf38c494e2f660
7
+ data.tar.gz: 64d7ae8c83a01f7e9772ed1e7e631474079baedd914f19ec26c725bb2a663155076d50777c14080532de3bcc3241fa0423705326e8f20067ec568b10e934d84b
data/Gemfile CHANGED
@@ -1,2 +1,16 @@
1
1
  source "https://rubygems.org"
2
- gemspec
2
+ #gemspec
3
+
4
+ gem 'rainbow'
5
+ gem "awesome_print"
6
+ gem "iostruct", ">= 0.0.4"
7
+ gem "multipart-post", ">= 2.0.0"
8
+ gem "progressbar"
9
+ gem "zhexdump", ">= 0.0.2"
10
+
11
+ group :development do
12
+ gem "rspec", "~> 3.9.0"
13
+ gem "rspec-its", "~> 1.3.0"
14
+ gem "bundler", "~> 2.1.4"
15
+ gem "jeweler", "~> 2.3.9"
16
+ end
@@ -1,45 +1,90 @@
1
- PATH
2
- remote: .
3
- specs:
4
- pedump (0.5.1)
5
- awesome_print
6
- iostruct (>= 0.0.4)
7
- multipart-post (~> 2.0.0)
8
- progressbar
9
- zhexdump (>= 0.0.2)
10
-
11
1
  GEM
12
2
  remote: https://rubygems.org/
13
3
  specs:
14
- awesome_print (1.7.0)
15
- diff-lcs (1.2.5)
4
+ addressable (2.4.0)
5
+ awesome_print (1.8.0)
6
+ builder (3.2.4)
7
+ descendants_tracker (0.0.4)
8
+ thread_safe (~> 0.3, >= 0.3.1)
9
+ diff-lcs (1.3)
10
+ faraday (0.9.2)
11
+ multipart-post (>= 1.2, < 3)
12
+ git (1.5.0)
13
+ github_api (0.16.0)
14
+ addressable (~> 2.4.0)
15
+ descendants_tracker (~> 0.0.4)
16
+ faraday (~> 0.8, < 0.10)
17
+ hashie (>= 3.4)
18
+ mime-types (>= 1.16, < 3.0)
19
+ oauth2 (~> 1.0)
20
+ hashie (4.0.0)
21
+ highline (2.0.3)
16
22
  iostruct (0.0.4)
23
+ jeweler (2.3.9)
24
+ builder
25
+ bundler
26
+ git (>= 1.2.5)
27
+ github_api (~> 0.16.0)
28
+ highline (>= 1.6.15)
29
+ nokogiri (>= 1.5.10)
30
+ psych
31
+ rake
32
+ rdoc
33
+ semver2
34
+ jwt (2.2.1)
35
+ mime-types (2.99.3)
36
+ mini_portile2 (2.4.0)
37
+ multi_json (1.14.1)
38
+ multi_xml (0.6.0)
17
39
  multipart-post (2.0.0)
18
- progressbar (0.21.0)
19
- rake (10.5.0)
20
- rspec (3.5.0)
21
- rspec-core (~> 3.5.0)
22
- rspec-expectations (~> 3.5.0)
23
- rspec-mocks (~> 3.5.0)
24
- rspec-core (3.5.3)
25
- rspec-support (~> 3.5.0)
26
- rspec-expectations (3.5.0)
40
+ nokogiri (1.10.7)
41
+ mini_portile2 (~> 2.4.0)
42
+ oauth2 (1.4.2)
43
+ faraday (>= 0.8, < 2.0)
44
+ jwt (>= 1.0, < 3.0)
45
+ multi_json (~> 1.3)
46
+ multi_xml (~> 0.5)
47
+ rack (>= 1.2, < 3)
48
+ progressbar (1.10.1)
49
+ psych (3.1.0)
50
+ rack (2.1.1)
51
+ rainbow (3.0.0)
52
+ rake (13.0.1)
53
+ rdoc (6.2.1)
54
+ rspec (3.9.0)
55
+ rspec-core (~> 3.9.0)
56
+ rspec-expectations (~> 3.9.0)
57
+ rspec-mocks (~> 3.9.0)
58
+ rspec-core (3.9.1)
59
+ rspec-support (~> 3.9.1)
60
+ rspec-expectations (3.9.0)
27
61
  diff-lcs (>= 1.2.0, < 2.0)
28
- rspec-support (~> 3.5.0)
29
- rspec-mocks (3.5.0)
62
+ rspec-support (~> 3.9.0)
63
+ rspec-its (1.3.0)
64
+ rspec-core (>= 3.0.0)
65
+ rspec-expectations (>= 3.0.0)
66
+ rspec-mocks (3.9.1)
30
67
  diff-lcs (>= 1.2.0, < 2.0)
31
- rspec-support (~> 3.5.0)
32
- rspec-support (3.5.0)
68
+ rspec-support (~> 3.9.0)
69
+ rspec-support (3.9.2)
70
+ semver2 (3.4.2)
71
+ thread_safe (0.3.6)
33
72
  zhexdump (0.0.2)
34
73
 
35
74
  PLATFORMS
36
75
  ruby
37
76
 
38
77
  DEPENDENCIES
39
- bundler (~> 1.11)
40
- pedump!
41
- rake (~> 10.0)
42
- rspec (~> 3.0)
78
+ awesome_print
79
+ bundler (~> 2.1.4)
80
+ iostruct (>= 0.0.4)
81
+ jeweler (~> 2.3.9)
82
+ multipart-post (>= 2.0.0)
83
+ progressbar
84
+ rainbow
85
+ rspec (~> 3.9.0)
86
+ rspec-its (~> 1.3.0)
87
+ zhexdump (>= 0.0.2)
43
88
 
44
89
  BUNDLED WITH
45
- 1.12.5
90
+ 2.1.4
data/Rakefile CHANGED
@@ -1,5 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
1
4
  require 'bundler'
2
- require 'bundler/gem_tasks'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "pedump"
18
+ gem.homepage = "http://github.com/zed-0xff/pedump"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{dump win32 PE executable files with a pure ruby}
21
+ gem.description = %Q{dump headers, sections, extract resources of win32 PE exe,dll,etc}
22
+ gem.email = "zed.0xff@gmail.com"
23
+ gem.authors = ["Andrey \"Zed\" Zaikin"]
24
+ gem.executables = %w'pedump'
25
+ gem.files.include "lib/**/*.rb"
26
+ gem.files.exclude %w'samples/**/* spec/**/* tmp/**/* tmp/.keep .* README.md.tpl'
27
+ gem.extra_rdoc_files.exclude 'README.md.tpl'
28
+ # dependencies defined in Gemfile
29
+ end
30
+ Jeweler::RubygemsDotOrgTasks.new
31
+
32
+ require 'rspec/core'
3
33
  require 'rspec/core/rake_task'
4
34
 
5
35
  desc "run specs"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.2
1
+ 0.5.3
@@ -2,6 +2,7 @@
2
2
  require 'stringio'
3
3
  require 'iostruct'
4
4
  require 'zhexdump'
5
+ require 'set'
5
6
 
6
7
  unless Object.new.respond_to?(:try) && nil.respond_to?(:try)
7
8
  require 'pedump/core_ext/try'
@@ -27,6 +28,7 @@ class PEdump
27
28
 
28
29
  VERSION = Version::STRING
29
30
  MAX_ERRORS = 100
31
+ MAX_IMAGE_IMPORT_DESCRIPTORS = 1000
30
32
 
31
33
  @@logger = nil
32
34
 
@@ -527,7 +529,11 @@ class PEdump
527
529
  # http://code.google.com/p/corkami/source/browse/trunk/asm/PE/manyimportsW7.asm
528
530
  break
529
531
  end
530
- t=IMAGE_IMPORT_DESCRIPTOR.read(f)
532
+ if r.size >= MAX_IMAGE_IMPORT_DESCRIPTORS
533
+ logger.warn "[!] too many IMAGE_IMPORT_DESCRIPTORs, not reading more than #{r.size}"
534
+ break
535
+ end
536
+ t = IMAGE_IMPORT_DESCRIPTOR.read(f)
531
537
  break if t.Name.to_i == 0 # also catches EOF
532
538
  r << t
533
539
  file_offset += IMAGE_IMPORT_DESCRIPTOR::SIZE
@@ -536,8 +542,16 @@ class PEdump
536
542
  logger.warn "[?] imports info beyond EOF"
537
543
  end
538
544
 
545
+ n_bad_names = 0
539
546
  logger.warn "[?] non-empty last IMAGE_IMPORT_DESCRIPTOR: #{t.inspect}" if t && !t.empty?
540
- @imports = r.each do |x|
547
+ @imports = r
548
+ r = nil
549
+ @imports.each_with_index do |x, iidx|
550
+ if n_bad_names > MAX_ERRORS
551
+ logger.warn "[!] too many bad imported function names. skipping further imports parsing"
552
+ @imports = @imports[0,iidx]
553
+ break
554
+ end
541
555
  if x.Name.to_i != 0 && (ofs = va2file(x.Name))
542
556
  begin
543
557
  f.seek ofs
@@ -572,12 +586,18 @@ class PEdump
572
586
  logger.warn "[?] import ofs 0x#{ofs.to_s(16)} VA=0x#{t.to_s(16)} beyond EOF"
573
587
  nil
574
588
  else
575
- ImportedFunction.new(
576
- f.read(2).unpack('v').first,
577
- f.gets("\x00").chomp("\x00"),
578
- nil,
579
- va
580
- )
589
+ hint = f.read(2).unpack('v').first
590
+ name = f.gets("\x00").chomp("\x00")
591
+ if !name.empty? && name !~ /\A[\x33-\x7f]+\Z/
592
+ n_bad_names += 1
593
+ if n_bad_names > MAX_ERRORS
594
+ nil
595
+ else
596
+ ImportedFunction.new(hint, name, nil, va)
597
+ end
598
+ else
599
+ ImportedFunction.new(hint, name, nil, va)
600
+ end
581
601
  end
582
602
  elsif tbl == :original_first_thunk
583
603
  # OriginalFirstThunk entries can not be invalid, show a warning msg
@@ -592,7 +612,7 @@ class PEdump
592
612
  end
593
613
  end
594
614
  x[tbl] && x[tbl].compact!
595
- end
615
+ end # [:original_first_thunk, :first_thunk].each
596
616
  if x.original_first_thunk && !x.first_thunk
597
617
  logger.warn "[?] import table: empty FirstThunk for #{x.module_name}"
598
618
  elsif !x.original_first_thunk && x.first_thunk
@@ -603,7 +623,8 @@ class PEdump
603
623
  logger.debug "[?] import table: OriginalFirstThunk != FirstThunk for #{x.module_name}"
604
624
  end
605
625
  end
606
- end
626
+ end # r.each
627
+ @imports
607
628
  end
608
629
 
609
630
  ##############################################################################
@@ -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
@@ -607,7 +607,7 @@ class PEdump::Unpacker::ASPack
607
607
  if m = @data.match(RELOCS_RE)
608
608
  a = m[1..-1].map{|x| x.unpack('V').first }
609
609
  else
610
- logger.error "[!] cannot find imports"
610
+ logger.error "[!] cannot find relocs"
611
611
  raise
612
612
  return
613
613
  end
@@ -1,33 +1,109 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'pedump/version'
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: pedump 0.5.3 ruby lib
5
6
 
6
- Gem::Specification.new do |spec|
7
- spec.name = "pedump"
8
- spec.version = PEdump::Version::STRING
9
- spec.authors = ["Andrey \"Zed\" Zaikin"]
10
- spec.email = ["zed.0xff@gmail.com"]
7
+ Gem::Specification.new do |s|
8
+ s.name = "pedump".freeze
9
+ s.version = "0.5.3"
11
10
 
12
- spec.summary = "dump win32 PE executable files with a pure ruby"
13
- spec.description = "dump headers, sections, extract resources of win32 PE exe,dll,etc"
14
- spec.homepage = "http://github.com/zed-0xff/pedump"
15
- spec.license = "MIT"
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["Andrey \"Zed\" Zaikin".freeze]
14
+ s.date = "2020-01-24"
15
+ s.description = "dump headers, sections, extract resources of win32 PE exe,dll,etc".freeze
16
+ s.email = "zed.0xff@gmail.com".freeze
17
+ s.executables = ["pedump".freeze]
18
+ s.extra_rdoc_files = [
19
+ "LICENSE.txt",
20
+ "README.md"
21
+ ]
22
+ s.files = [
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "LICENSE.txt",
26
+ "README.md",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "bin/pedump",
30
+ "data/fs.txt",
31
+ "data/jc-userdb.txt",
32
+ "data/sig.bin",
33
+ "data/signatures.txt",
34
+ "data/userdb.txt",
35
+ "lib/pedump.rb",
36
+ "lib/pedump/cli.rb",
37
+ "lib/pedump/comparer.rb",
38
+ "lib/pedump/composite_io.rb",
39
+ "lib/pedump/core.rb",
40
+ "lib/pedump/core_ext/try.rb",
41
+ "lib/pedump/loader.rb",
42
+ "lib/pedump/loader/minidump.rb",
43
+ "lib/pedump/loader/section.rb",
44
+ "lib/pedump/logger.rb",
45
+ "lib/pedump/ne.rb",
46
+ "lib/pedump/ne/version_info.rb",
47
+ "lib/pedump/packer.rb",
48
+ "lib/pedump/pe.rb",
49
+ "lib/pedump/resources.rb",
50
+ "lib/pedump/security.rb",
51
+ "lib/pedump/sig_parser.rb",
52
+ "lib/pedump/tls.rb",
53
+ "lib/pedump/unpacker.rb",
54
+ "lib/pedump/unpacker/aspack.rb",
55
+ "lib/pedump/unpacker/upx.rb",
56
+ "lib/pedump/version.rb",
57
+ "lib/pedump/version_info.rb",
58
+ "misc/aspack/Makefile",
59
+ "misc/aspack/aspack_unlzx.c",
60
+ "misc/aspack/lzxdec.c",
61
+ "misc/aspack/lzxdec.h",
62
+ "misc/nedump.c",
63
+ "pedump.gemspec"
64
+ ]
65
+ s.homepage = "http://github.com/zed-0xff/pedump".freeze
66
+ s.licenses = ["MIT".freeze]
67
+ s.rubygems_version = "2.7.6".freeze
68
+ s.summary = "dump win32 PE executable files with a pure ruby".freeze
16
69
 
17
- spec.files = `git ls-files -z`.split("\x0").
18
- reject { |f| f.match(%r{^(test|spec|features|samples|tmp|\.)/}) || f.start_with?('.') || f == "README.md.tpl" }
70
+ if s.respond_to? :specification_version then
71
+ s.specification_version = 4
19
72
 
20
- spec.bindir = "bin"
21
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
22
- spec.require_paths = ["lib"]
23
-
24
- spec.add_dependency "awesome_print"
25
- spec.add_dependency "iostruct", ">= 0.0.4"
26
- spec.add_dependency "multipart-post", "~> 2.0.0"
27
- spec.add_dependency "progressbar"
28
- spec.add_dependency "zhexdump", ">= 0.0.2"
29
-
30
- spec.add_development_dependency "bundler", "~> 1.11"
31
- spec.add_development_dependency "rake", "~> 10.0"
32
- spec.add_development_dependency "rspec", "~> 3.0"
73
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
74
+ s.add_runtime_dependency(%q<rainbow>.freeze, [">= 0"])
75
+ s.add_runtime_dependency(%q<awesome_print>.freeze, [">= 0"])
76
+ s.add_runtime_dependency(%q<iostruct>.freeze, [">= 0.0.4"])
77
+ s.add_runtime_dependency(%q<multipart-post>.freeze, [">= 2.0.0"])
78
+ s.add_runtime_dependency(%q<progressbar>.freeze, [">= 0"])
79
+ s.add_runtime_dependency(%q<zhexdump>.freeze, [">= 0.0.2"])
80
+ s.add_development_dependency(%q<rspec>.freeze, ["~> 3.9.0"])
81
+ s.add_development_dependency(%q<rspec-its>.freeze, ["~> 1.3.0"])
82
+ s.add_development_dependency(%q<bundler>.freeze, ["~> 2.1.4"])
83
+ s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
84
+ else
85
+ s.add_dependency(%q<rainbow>.freeze, [">= 0"])
86
+ s.add_dependency(%q<awesome_print>.freeze, [">= 0"])
87
+ s.add_dependency(%q<iostruct>.freeze, [">= 0.0.4"])
88
+ s.add_dependency(%q<multipart-post>.freeze, [">= 2.0.0"])
89
+ s.add_dependency(%q<progressbar>.freeze, [">= 0"])
90
+ s.add_dependency(%q<zhexdump>.freeze, [">= 0.0.2"])
91
+ s.add_dependency(%q<rspec>.freeze, ["~> 3.9.0"])
92
+ s.add_dependency(%q<rspec-its>.freeze, ["~> 1.3.0"])
93
+ s.add_dependency(%q<bundler>.freeze, ["~> 2.1.4"])
94
+ s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
95
+ end
96
+ else
97
+ s.add_dependency(%q<rainbow>.freeze, [">= 0"])
98
+ s.add_dependency(%q<awesome_print>.freeze, [">= 0"])
99
+ s.add_dependency(%q<iostruct>.freeze, [">= 0.0.4"])
100
+ s.add_dependency(%q<multipart-post>.freeze, [">= 2.0.0"])
101
+ s.add_dependency(%q<progressbar>.freeze, [">= 0"])
102
+ s.add_dependency(%q<zhexdump>.freeze, [">= 0.0.2"])
103
+ s.add_dependency(%q<rspec>.freeze, ["~> 3.9.0"])
104
+ s.add_dependency(%q<rspec-its>.freeze, ["~> 1.3.0"])
105
+ s.add_dependency(%q<bundler>.freeze, ["~> 2.1.4"])
106
+ s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
107
+ end
33
108
  end
109
+
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pedump
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey "Zed" Zaikin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-09 00:00:00.000000000 Z
11
+ date: 2020-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rainbow
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: awesome_print
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -42,14 +56,14 @@ dependencies:
42
56
  name: multipart-post
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
61
  version: 2.0.0
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: 2.0.0
55
69
  - !ruby/object:Gem::Dependency
@@ -81,54 +95,69 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: 0.0.2
83
97
  - !ruby/object:Gem::Dependency
84
- name: bundler
98
+ name: rspec
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '1.11'
103
+ version: 3.9.0
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '1.11'
110
+ version: 3.9.0
97
111
  - !ruby/object:Gem::Dependency
98
- name: rake
112
+ name: rspec-its
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: '10.0'
117
+ version: 1.3.0
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: '10.0'
124
+ version: 1.3.0
111
125
  - !ruby/object:Gem::Dependency
112
- name: rspec
126
+ name: bundler
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: '3.0'
131
+ version: 2.1.4
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
- version: '3.0'
138
+ version: 2.1.4
139
+ - !ruby/object:Gem::Dependency
140
+ name: jeweler
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 2.3.9
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 2.3.9
125
153
  description: dump headers, sections, extract resources of win32 PE exe,dll,etc
126
- email:
127
- - zed.0xff@gmail.com
154
+ email: zed.0xff@gmail.com
128
155
  executables:
129
156
  - pedump
130
157
  extensions: []
131
- extra_rdoc_files: []
158
+ extra_rdoc_files:
159
+ - LICENSE.txt
160
+ - README.md
132
161
  files:
133
162
  - Gemfile
134
163
  - Gemfile.lock
@@ -191,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
191
220
  version: '0'
192
221
  requirements: []
193
222
  rubyforge_project:
194
- rubygems_version: 2.5.1
223
+ rubygems_version: 2.7.6
195
224
  signing_key:
196
225
  specification_version: 4
197
226
  summary: dump win32 PE executable files with a pure ruby