pedump 0.5.2 → 0.5.3

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.
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