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.
data/lib/pedump/logger.rb CHANGED
@@ -22,7 +22,7 @@ class PEdump
22
22
  if params[:logger]
23
23
  params[:logger]
24
24
  else
25
- logdev = params[:logdev] || STDERR
25
+ logdev = params[:logdev] || $stderr
26
26
  logger_class =
27
27
  if params.key?(:color)
28
28
  # forced color or not
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
- names = [iid.original_first_thunk, iid.first_thunk].compact.flatten.map do |x|
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
- logger.debug "[?] import table: OriginalFirstThunk != FirstThunk for #{x.module_name}"
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.6.10 ruby lib
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.6.10".freeze
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 = "2024-05-10"
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.5.6".freeze
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.4".freeze])
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.6.10
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: 2024-05-10 00:00:00.000000000 Z
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.4
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.4
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.5.6
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: []