pedump 0.6.0 → 0.6.4
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 +4 -4
- data/Gemfile +4 -4
- data/Gemfile.lock +75 -43
- data/README.md +96 -10
- data/Rakefile +44 -9
- data/VERSION +1 -1
- data/data/comp_id.txt +776 -0
- data/lib/pedump/cli.rb +122 -20
- data/lib/pedump/loader/section.rb +5 -3
- data/lib/pedump/loader.rb +28 -6
- data/lib/pedump/rich.rb +562 -0
- data/lib/pedump/te.rb +15 -4
- data/lib/pedump.rb +30 -6
- data/pedump.gemspec +23 -33
- metadata +25 -26
- data/.github/FUNDING.yml +0 -2
- data/.github/dependabot.yml +0 -8
data/lib/pedump.rb
CHANGED
@@ -30,7 +30,7 @@ class PEdump
|
|
30
30
|
VERSION = Version::STRING
|
31
31
|
MAX_ERRORS = 100
|
32
32
|
MAX_IMAGE_IMPORT_DESCRIPTORS = 1000
|
33
|
-
MAX_EXPORT_NUMBER_OF_NAMES = 16384 # got 7977 in
|
33
|
+
MAX_EXPORT_NUMBER_OF_NAMES = 16384 # got 7977 in https://pedump.me/03ad7400080678c6b1984f995d36fd04
|
34
34
|
GOOD_FUNCTION_NAME_RE = /\A[\x21-\x7f]+\Z/
|
35
35
|
SUPPORTED_SIGNATURES = ['MZ', 'ZM', 'VZ']
|
36
36
|
|
@@ -261,7 +261,7 @@ class PEdump
|
|
261
261
|
|
262
262
|
# http://ntcore.com/files/richsign.htm
|
263
263
|
class RichHdr < String
|
264
|
-
attr_accessor :offset, :key # xor key
|
264
|
+
attr_accessor :offset, :skip, :key # xor key
|
265
265
|
|
266
266
|
class Entry < Struct.new(:version,:id,:times)
|
267
267
|
def inspect
|
@@ -270,8 +270,21 @@ class PEdump
|
|
270
270
|
end
|
271
271
|
|
272
272
|
def self.from_dos_stub stub
|
273
|
+
#stub.hexdump
|
273
274
|
key = stub[stub.index('Rich')+4,4]
|
274
275
|
start_idx = stub.index(key.xor('DanS'))
|
276
|
+
skip = 0
|
277
|
+
if start_idx
|
278
|
+
skip = 4
|
279
|
+
else
|
280
|
+
PEdump.logger.warn "[?] cannot find rich_hdr start_idx, using heuristics"
|
281
|
+
start_idx = stub.index("$\x00\x00\x00\x00\x00\x00\x00")
|
282
|
+
unless start_idx
|
283
|
+
PEdump.logger.warn "[?] heuristics failed :("
|
284
|
+
return nil
|
285
|
+
end
|
286
|
+
start_idx += 8
|
287
|
+
end
|
275
288
|
end_idx = stub.index('Rich')+8
|
276
289
|
if stub[end_idx..-1].tr("\x00",'') != ''
|
277
290
|
t = stub[end_idx..-1]
|
@@ -279,14 +292,16 @@ class PEdump
|
|
279
292
|
PEdump.logger.error "[!] non-zero dos stub after rich_hdr: #{t.inspect}"
|
280
293
|
return nil
|
281
294
|
end
|
295
|
+
#stub[start_idx, end_idx-start_idx].hexdump
|
282
296
|
RichHdr.new(stub[start_idx, end_idx-start_idx]).tap do |x|
|
283
297
|
x.key = key
|
284
298
|
x.offset = stub.offset + start_idx
|
299
|
+
x.skip = skip
|
285
300
|
end
|
286
301
|
end
|
287
302
|
|
288
303
|
def dexor
|
289
|
-
self[
|
304
|
+
self[skip..-9].sub(/\A(#{Regexp::escape(key)}){3}/,'').xor(key)
|
290
305
|
end
|
291
306
|
|
292
307
|
def decode
|
@@ -382,6 +397,13 @@ class PEdump
|
|
382
397
|
def va2file va, h={}
|
383
398
|
return nil if va.nil?
|
384
399
|
|
400
|
+
va0 = va # save for log output of original addr
|
401
|
+
if pe?
|
402
|
+
# most common case, do nothing
|
403
|
+
elsif te?
|
404
|
+
va = va - te_shift()
|
405
|
+
end
|
406
|
+
|
385
407
|
sections.each do |s|
|
386
408
|
if (s.VirtualAddress...(s.VirtualAddress+s.VirtualSize)).include?(va)
|
387
409
|
offset = va - s.VirtualAddress
|
@@ -413,9 +435,9 @@ class PEdump
|
|
413
435
|
# TODO: not all VirtualAdresses == 0 case
|
414
436
|
|
415
437
|
if h[:quiet]
|
416
|
-
logger.debug "[?] can't find file_offset of VA 0x#{
|
438
|
+
logger.debug "[?] can't find file_offset of VA 0x#{va0.to_i.to_s(16)} (quiet=true)"
|
417
439
|
else
|
418
|
-
logger.error "[?] can't find file_offset of VA 0x#{
|
440
|
+
logger.error "[?] can't find file_offset of VA 0x#{va0.to_i.to_s(16)}"
|
419
441
|
end
|
420
442
|
nil
|
421
443
|
end
|
@@ -546,6 +568,8 @@ class PEdump
|
|
546
568
|
pe_imports(f)
|
547
569
|
elsif ne(f)
|
548
570
|
ne(f).imports
|
571
|
+
else
|
572
|
+
[]
|
549
573
|
end
|
550
574
|
end
|
551
575
|
|
@@ -633,7 +657,7 @@ class PEdump
|
|
633
657
|
nil
|
634
658
|
else
|
635
659
|
hint = f.read(2).unpack('v').first
|
636
|
-
name = f.gets("\x00").chomp("\x00")
|
660
|
+
name = f.gets("\x00").to_s.chomp("\x00")
|
637
661
|
if !name.empty? && name !~ GOOD_FUNCTION_NAME_RE
|
638
662
|
n_bad_names += 1
|
639
663
|
if n_bad_names > MAX_ERRORS
|
data/pedump.gemspec
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
# Generated by
|
1
|
+
# Generated by juwelier
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit
|
3
|
+
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: pedump 0.6.
|
5
|
+
# stub: pedump 0.6.4 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "pedump".freeze
|
9
|
-
s.version = "0.6.
|
9
|
+
s.version = "0.6.4"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Andrey \"Zed\" Zaikin".freeze]
|
14
|
-
s.date = "
|
14
|
+
s.date = "2022-01-29"
|
15
15
|
s.description = "dump headers, sections, extract resources of win32 PE exe,dll,etc".freeze
|
16
16
|
s.email = "zed.0xff@gmail.com".freeze
|
17
17
|
s.executables = ["pedump".freeze]
|
@@ -20,8 +20,6 @@ Gem::Specification.new do |s|
|
|
20
20
|
"README.md"
|
21
21
|
]
|
22
22
|
s.files = [
|
23
|
-
".github/FUNDING.yml",
|
24
|
-
".github/dependabot.yml",
|
25
23
|
"CODE_OF_CONDUCT.md",
|
26
24
|
"Gemfile",
|
27
25
|
"Gemfile.lock",
|
@@ -30,6 +28,7 @@ Gem::Specification.new do |s|
|
|
30
28
|
"Rakefile",
|
31
29
|
"VERSION",
|
32
30
|
"bin/pedump",
|
31
|
+
"data/comp_id.txt",
|
33
32
|
"data/fs.txt",
|
34
33
|
"data/jc-userdb.txt",
|
35
34
|
"data/sig.bin",
|
@@ -50,6 +49,7 @@ Gem::Specification.new do |s|
|
|
50
49
|
"lib/pedump/packer.rb",
|
51
50
|
"lib/pedump/pe.rb",
|
52
51
|
"lib/pedump/resources.rb",
|
52
|
+
"lib/pedump/rich.rb",
|
53
53
|
"lib/pedump/security.rb",
|
54
54
|
"lib/pedump/sig_parser.rb",
|
55
55
|
"lib/pedump/te.rb",
|
@@ -68,43 +68,33 @@ Gem::Specification.new do |s|
|
|
68
68
|
]
|
69
69
|
s.homepage = "http://github.com/zed-0xff/pedump".freeze
|
70
70
|
s.licenses = ["MIT".freeze]
|
71
|
-
s.rubygems_version = "2.
|
71
|
+
s.rubygems_version = "3.2.32".freeze
|
72
72
|
s.summary = "dump win32 PE executable files with a pure ruby".freeze
|
73
73
|
|
74
74
|
if s.respond_to? :specification_version then
|
75
75
|
s.specification_version = 4
|
76
|
+
end
|
76
77
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
else
|
88
|
-
s.add_dependency(%q<rainbow>.freeze, [">= 0"])
|
89
|
-
s.add_dependency(%q<awesome_print>.freeze, [">= 0"])
|
90
|
-
s.add_dependency(%q<iostruct>.freeze, [">= 0.0.4"])
|
91
|
-
s.add_dependency(%q<multipart-post>.freeze, [">= 2.0.0"])
|
92
|
-
s.add_dependency(%q<zhexdump>.freeze, [">= 0.0.2"])
|
93
|
-
s.add_dependency(%q<rspec>.freeze, ["~> 3.9.0"])
|
94
|
-
s.add_dependency(%q<rspec-its>.freeze, ["~> 1.3.0"])
|
95
|
-
s.add_dependency(%q<bundler>.freeze, ["~> 2.1.4"])
|
96
|
-
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
|
97
|
-
end
|
78
|
+
if s.respond_to? :add_runtime_dependency then
|
79
|
+
s.add_runtime_dependency(%q<rainbow>.freeze, [">= 0"])
|
80
|
+
s.add_runtime_dependency(%q<awesome_print>.freeze, [">= 0"])
|
81
|
+
s.add_runtime_dependency(%q<iostruct>.freeze, [">= 0.0.4"])
|
82
|
+
s.add_runtime_dependency(%q<multipart-post>.freeze, [">= 2.0.0"])
|
83
|
+
s.add_runtime_dependency(%q<zhexdump>.freeze, [">= 0.0.2"])
|
84
|
+
s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
|
85
|
+
s.add_development_dependency(%q<rspec-its>.freeze, [">= 0"])
|
86
|
+
s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
|
87
|
+
s.add_development_dependency(%q<juwelier>.freeze, [">= 0"])
|
98
88
|
else
|
99
89
|
s.add_dependency(%q<rainbow>.freeze, [">= 0"])
|
100
90
|
s.add_dependency(%q<awesome_print>.freeze, [">= 0"])
|
101
91
|
s.add_dependency(%q<iostruct>.freeze, [">= 0.0.4"])
|
102
92
|
s.add_dependency(%q<multipart-post>.freeze, [">= 2.0.0"])
|
103
93
|
s.add_dependency(%q<zhexdump>.freeze, [">= 0.0.2"])
|
104
|
-
s.add_dependency(%q<rspec>.freeze, ["
|
105
|
-
s.add_dependency(%q<rspec-its>.freeze, ["
|
106
|
-
s.add_dependency(%q<bundler>.freeze, ["
|
107
|
-
s.add_dependency(%q<
|
94
|
+
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
95
|
+
s.add_dependency(%q<rspec-its>.freeze, [">= 0"])
|
96
|
+
s.add_dependency(%q<bundler>.freeze, [">= 0"])
|
97
|
+
s.add_dependency(%q<juwelier>.freeze, [">= 0"])
|
108
98
|
end
|
109
99
|
end
|
110
100
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pedump
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrey "Zed" Zaikin
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rainbow
|
@@ -84,58 +84,58 @@ dependencies:
|
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rspec-its
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: bundler
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - "
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - "
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
124
|
+
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: juwelier
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
131
|
+
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
138
|
+
version: '0'
|
139
139
|
description: dump headers, sections, extract resources of win32 PE exe,dll,etc
|
140
140
|
email: zed.0xff@gmail.com
|
141
141
|
executables:
|
@@ -145,8 +145,6 @@ extra_rdoc_files:
|
|
145
145
|
- LICENSE.txt
|
146
146
|
- README.md
|
147
147
|
files:
|
148
|
-
- ".github/FUNDING.yml"
|
149
|
-
- ".github/dependabot.yml"
|
150
148
|
- CODE_OF_CONDUCT.md
|
151
149
|
- Gemfile
|
152
150
|
- Gemfile.lock
|
@@ -155,6 +153,7 @@ files:
|
|
155
153
|
- Rakefile
|
156
154
|
- VERSION
|
157
155
|
- bin/pedump
|
156
|
+
- data/comp_id.txt
|
158
157
|
- data/fs.txt
|
159
158
|
- data/jc-userdb.txt
|
160
159
|
- data/sig.bin
|
@@ -175,6 +174,7 @@ files:
|
|
175
174
|
- lib/pedump/packer.rb
|
176
175
|
- lib/pedump/pe.rb
|
177
176
|
- lib/pedump/resources.rb
|
177
|
+
- lib/pedump/rich.rb
|
178
178
|
- lib/pedump/security.rb
|
179
179
|
- lib/pedump/sig_parser.rb
|
180
180
|
- lib/pedump/te.rb
|
@@ -194,7 +194,7 @@ homepage: http://github.com/zed-0xff/pedump
|
|
194
194
|
licenses:
|
195
195
|
- MIT
|
196
196
|
metadata: {}
|
197
|
-
post_install_message:
|
197
|
+
post_install_message:
|
198
198
|
rdoc_options: []
|
199
199
|
require_paths:
|
200
200
|
- lib
|
@@ -209,9 +209,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
209
209
|
- !ruby/object:Gem::Version
|
210
210
|
version: '0'
|
211
211
|
requirements: []
|
212
|
-
|
213
|
-
|
214
|
-
signing_key:
|
212
|
+
rubygems_version: 3.2.32
|
213
|
+
signing_key:
|
215
214
|
specification_version: 4
|
216
215
|
summary: dump win32 PE executable files with a pure ruby
|
217
216
|
test_files: []
|
data/.github/FUNDING.yml
DELETED