pedump 0.6.10 → 0.7.1
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 +1 -1
- data/Gemfile.lock +85 -34
- data/README.md +89 -72
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/pedump +1 -1
- data/data/jc-userdb.txt +0 -8
- data/data/signatures.txt +1 -2
- data/data/userdb.txt +0 -8
- data/lib/pedump/cli.rb +305 -48
- data/lib/pedump/clr/readytorun.rb +115 -0
- data/lib/pedump/clr/signature.rb +318 -0
- data/lib/pedump/clr.rb +709 -0
- data/lib/pedump/logger.rb +1 -1
- data/lib/pedump.rb +41 -5
- data/pedump.gemspec +8 -5
- metadata +8 -8
data/lib/pedump/logger.rb
CHANGED
data/lib/pedump.rb
CHANGED
|
@@ -20,6 +20,7 @@ require 'pedump/packer'
|
|
|
20
20
|
require 'pedump/ne'
|
|
21
21
|
require 'pedump/ne/version_info'
|
|
22
22
|
require 'pedump/te'
|
|
23
|
+
require 'pedump/clr'
|
|
23
24
|
|
|
24
25
|
# pedump.rb by zed_0xff
|
|
25
26
|
#
|
|
@@ -220,7 +221,7 @@ class PEdump
|
|
|
220
221
|
%w'EXPORT IMPORT RESOURCE EXCEPTION SECURITY BASERELOC DEBUG ARCHITECTURE GLOBALPTR TLS LOAD_CONFIG
|
|
221
222
|
Bound_IAT IAT Delay_IAT CLR_Header'
|
|
222
223
|
IMAGE_DATA_DIRECTORY::TYPES.each_with_index do |type,idx|
|
|
223
|
-
IMAGE_DATA_DIRECTORY.const_set(type,idx)
|
|
224
|
+
IMAGE_DATA_DIRECTORY.const_set(type, idx)
|
|
224
225
|
end
|
|
225
226
|
|
|
226
227
|
IMAGE_SECTION_HEADER = IOStruct.new( 'A8V6v2V',
|
|
@@ -444,6 +445,26 @@ class PEdump
|
|
|
444
445
|
nil
|
|
445
446
|
end
|
|
446
447
|
|
|
448
|
+
def file2va offset, h = {}
|
|
449
|
+
return nil if offset.nil?
|
|
450
|
+
|
|
451
|
+
# a special case - PE without sections
|
|
452
|
+
return offset if sections.empty?
|
|
453
|
+
|
|
454
|
+
sections.each do |s|
|
|
455
|
+
if (s.PointerToRawData...(s.PointerToRawData+s.SizeOfRawData)).include?(offset)
|
|
456
|
+
return s.VirtualAddress + s.PointerToRawData - offset
|
|
457
|
+
end
|
|
458
|
+
end
|
|
459
|
+
|
|
460
|
+
if h[:quiet]
|
|
461
|
+
logger.debug "[?] can't find VA for file_offset 0x#{offset.to_i.to_s(16)} (quiet=true)"
|
|
462
|
+
else
|
|
463
|
+
logger.error "[?] can't find VA for file_offset 0x#{offset.to_i.to_s(16)}"
|
|
464
|
+
end
|
|
465
|
+
nil
|
|
466
|
+
end
|
|
467
|
+
|
|
447
468
|
# OPTIONAL: assigns @mz, @rich_hdr, @pe, etc
|
|
448
469
|
def dump f=@io
|
|
449
470
|
if f.is_a?(String)
|
|
@@ -586,7 +607,8 @@ class PEdump
|
|
|
586
607
|
imports.each do |iid|
|
|
587
608
|
next unless iid.module_name
|
|
588
609
|
|
|
589
|
-
|
|
610
|
+
# was: [iid.original_first_thunk, iid.first_thunk].compact.flatten
|
|
611
|
+
names = (iid.original_first_thunk || iid.first_thunk).map do |x|
|
|
590
612
|
x.name || PEdump.ordlookup(iid.module_name, x.ordinal, make_name: true)
|
|
591
613
|
end.compact.map(&:downcase).uniq
|
|
592
614
|
libname = iid.module_name.downcase.sub(/\.(ocx|sys|dll)$/,'') # as in python's pefile
|
|
@@ -717,9 +739,9 @@ class PEdump
|
|
|
717
739
|
logger.info "[?] import table: empty OriginalFirstThunk for #{x.module_name}"
|
|
718
740
|
elsif logger.debug?
|
|
719
741
|
# compare all but VAs
|
|
720
|
-
if x.original_first_thunk != x.first_thunk
|
|
721
|
-
|
|
722
|
-
end
|
|
742
|
+
#if x.original_first_thunk != x.first_thunk
|
|
743
|
+
# logger.debug "[?] import table: OriginalFirstThunk != FirstThunk for #{x.module_name}"
|
|
744
|
+
#end
|
|
723
745
|
end
|
|
724
746
|
end # r.each
|
|
725
747
|
@imports
|
|
@@ -919,6 +941,20 @@ class PEdump
|
|
|
919
941
|
end
|
|
920
942
|
end
|
|
921
943
|
alias :packers :packer
|
|
944
|
+
|
|
945
|
+
##############################################################################
|
|
946
|
+
# tail data
|
|
947
|
+
##############################################################################
|
|
948
|
+
|
|
949
|
+
def tail f=@io
|
|
950
|
+
tail_start = sections(f).map{ |s| s.PointerToRawData + s.SizeOfRawData }.max
|
|
951
|
+
if tail_start && tail_start < f.size
|
|
952
|
+
f.seek tail_start
|
|
953
|
+
f
|
|
954
|
+
else
|
|
955
|
+
nil
|
|
956
|
+
end
|
|
957
|
+
end
|
|
922
958
|
end
|
|
923
959
|
|
|
924
960
|
####################################################################################
|
data/pedump.gemspec
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
-
# stub: pedump 0.
|
|
5
|
+
# stub: pedump 0.7.1 ruby lib
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |s|
|
|
8
8
|
s.name = "pedump".freeze
|
|
9
|
-
s.version = "0.
|
|
9
|
+
s.version = "0.7.1".freeze
|
|
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 = "1980-01-02"
|
|
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]
|
|
@@ -40,6 +40,9 @@ Gem::Specification.new do |s|
|
|
|
40
40
|
"data/userdb.txt",
|
|
41
41
|
"lib/pedump.rb",
|
|
42
42
|
"lib/pedump/cli.rb",
|
|
43
|
+
"lib/pedump/clr.rb",
|
|
44
|
+
"lib/pedump/clr/readytorun.rb",
|
|
45
|
+
"lib/pedump/clr/signature.rb",
|
|
43
46
|
"lib/pedump/comparer.rb",
|
|
44
47
|
"lib/pedump/composite_io.rb",
|
|
45
48
|
"lib/pedump/core.rb",
|
|
@@ -73,14 +76,14 @@ Gem::Specification.new do |s|
|
|
|
73
76
|
]
|
|
74
77
|
s.homepage = "http://github.com/zed-0xff/pedump".freeze
|
|
75
78
|
s.licenses = ["MIT".freeze]
|
|
76
|
-
s.rubygems_version = "3.
|
|
79
|
+
s.rubygems_version = "3.6.9".freeze
|
|
77
80
|
s.summary = "dump win32 PE executable files with a pure ruby".freeze
|
|
78
81
|
|
|
79
82
|
s.specification_version = 4
|
|
80
83
|
|
|
81
84
|
s.add_runtime_dependency(%q<rainbow>.freeze, [">= 0".freeze])
|
|
82
85
|
s.add_runtime_dependency(%q<awesome_print>.freeze, [">= 0".freeze])
|
|
83
|
-
s.add_runtime_dependency(%q<iostruct>.freeze, [">= 0.0
|
|
86
|
+
s.add_runtime_dependency(%q<iostruct>.freeze, [">= 0.5.0".freeze])
|
|
84
87
|
s.add_runtime_dependency(%q<multipart-post>.freeze, [">= 2.0.0".freeze])
|
|
85
88
|
s.add_runtime_dependency(%q<zhexdump>.freeze, [">= 0.0.2".freeze])
|
|
86
89
|
s.add_development_dependency(%q<rspec>.freeze, [">= 0".freeze])
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pedump
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrey "Zed" Zaikin
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: rainbow
|
|
@@ -44,14 +43,14 @@ dependencies:
|
|
|
44
43
|
requirements:
|
|
45
44
|
- - ">="
|
|
46
45
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 0.0
|
|
46
|
+
version: 0.5.0
|
|
48
47
|
type: :runtime
|
|
49
48
|
prerelease: false
|
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
50
|
requirements:
|
|
52
51
|
- - ">="
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 0.0
|
|
53
|
+
version: 0.5.0
|
|
55
54
|
- !ruby/object:Gem::Dependency
|
|
56
55
|
name: multipart-post
|
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -165,6 +164,9 @@ files:
|
|
|
165
164
|
- data/userdb.txt
|
|
166
165
|
- lib/pedump.rb
|
|
167
166
|
- lib/pedump/cli.rb
|
|
167
|
+
- lib/pedump/clr.rb
|
|
168
|
+
- lib/pedump/clr/readytorun.rb
|
|
169
|
+
- lib/pedump/clr/signature.rb
|
|
168
170
|
- lib/pedump/comparer.rb
|
|
169
171
|
- lib/pedump/composite_io.rb
|
|
170
172
|
- lib/pedump/core.rb
|
|
@@ -199,7 +201,6 @@ homepage: http://github.com/zed-0xff/pedump
|
|
|
199
201
|
licenses:
|
|
200
202
|
- MIT
|
|
201
203
|
metadata: {}
|
|
202
|
-
post_install_message:
|
|
203
204
|
rdoc_options: []
|
|
204
205
|
require_paths:
|
|
205
206
|
- lib
|
|
@@ -214,8 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
214
215
|
- !ruby/object:Gem::Version
|
|
215
216
|
version: '0'
|
|
216
217
|
requirements: []
|
|
217
|
-
rubygems_version: 3.
|
|
218
|
-
signing_key:
|
|
218
|
+
rubygems_version: 3.6.9
|
|
219
219
|
specification_version: 4
|
|
220
220
|
summary: dump win32 PE executable files with a pure ruby
|
|
221
221
|
test_files: []
|