pedump 0.7.3 → 0.7.5
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 +7 -12
- data/Gemfile.lock +21 -152
- data/LICENSE.txt +1 -1
- data/README.md +27 -0
- data/Rakefile +80 -112
- data/data/jc-userdb.txt +2 -6
- data/data/sig.bin +0 -0
- data/lib/pedump/cli.rb +40 -16
- data/lib/pedump/clr/readytorun.rb +1 -1
- data/lib/pedump/clr.rb +4 -4
- data/lib/pedump/colors.rb +29 -0
- data/lib/pedump/comparer.rb +12 -9
- data/lib/pedump/loader/minidump.rb +7 -7
- data/lib/pedump/logger.rb +4 -2
- data/lib/pedump/multipart.rb +56 -0
- data/lib/pedump/packer.rb +1 -1
- data/lib/pedump/resources.rb +1 -1
- data/lib/pedump/sig_parser.rb +11 -55
- data/lib/pedump/te.rb +19 -19
- data/lib/pedump/tls.rb +12 -14
- data/lib/pedump/unpacker/aspack.rb +4 -4
- data/lib/pedump/version.rb +3 -5
- data/lib/pedump.rb +29 -17
- data/pedump.gemspec +29 -88
- metadata +8 -90
- data/VERSION +0 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d422e0cae0fcfb5090f13cdbe0e9fe8635463ba9cfccee49a110f766a962be9f
|
|
4
|
+
data.tar.gz: cbffb2114ff2b8195ffeb2ed5b92a2cadf4dadd35303802c30d6386c91041b2d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9d4d9ca21d96b9ac64339da6208fa049d364384e505ff6e9d2a5232aa2cd711c3bd8b37a5fb1141b601df1f7ef82cc70c6a0a5389d03a2ffc4ab76d1c8b7ea3e
|
|
7
|
+
data.tar.gz: 8468e35a72ff9d84e475092aee3b8f0e0e0e0b5927197f0a3d6cc2d99d68552d98cb7cbc096f7de6439d5df1a981710f4f53389974d43f5dcc2ac8d5d0f7f5fd
|
data/Gemfile
CHANGED
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
#gemspec
|
|
1
|
+
# frozen_string_literal: true
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
gem "awesome_print"
|
|
6
|
-
gem "iostruct", ">= 0.5.0"
|
|
7
|
-
gem "multipart-post", ">= 2.0.0"
|
|
8
|
-
gem "zhexdump", ">= 0.0.2"
|
|
3
|
+
source 'https://rubygems.org'
|
|
9
4
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
gem
|
|
14
|
-
gem
|
|
5
|
+
gemspec
|
|
6
|
+
|
|
7
|
+
group :development, :test do
|
|
8
|
+
gem 'rspec'
|
|
9
|
+
gem 'rspec-its'
|
|
15
10
|
end
|
data/Gemfile.lock
CHANGED
|
@@ -1,174 +1,43 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
pedump (0.7.4)
|
|
5
|
+
iostruct (>= 0.7.0)
|
|
6
|
+
logger
|
|
7
|
+
zhexdump (>= 0.0.2)
|
|
8
|
+
|
|
1
9
|
GEM
|
|
2
10
|
remote: https://rubygems.org/
|
|
3
11
|
specs:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
concurrent-ruby (~> 1.0, >= 1.3.1)
|
|
9
|
-
connection_pool (>= 2.2.5)
|
|
10
|
-
drb
|
|
11
|
-
i18n (>= 1.6, < 2)
|
|
12
|
-
logger (>= 1.4.2)
|
|
13
|
-
minitest (>= 5.1)
|
|
14
|
-
securerandom (>= 0.3)
|
|
15
|
-
tzinfo (~> 2.0, >= 2.0.5)
|
|
16
|
-
uri (>= 0.13.1)
|
|
17
|
-
addressable (2.8.7)
|
|
18
|
-
public_suffix (>= 2.0.2, < 7.0)
|
|
19
|
-
awesome_print (1.9.2)
|
|
20
|
-
base64 (0.2.0)
|
|
21
|
-
benchmark (0.4.0)
|
|
22
|
-
bigdecimal (3.1.9)
|
|
23
|
-
builder (3.3.0)
|
|
24
|
-
concurrent-ruby (1.3.5)
|
|
25
|
-
connection_pool (2.5.0)
|
|
26
|
-
date (3.4.1)
|
|
27
|
-
descendants_tracker (0.0.4)
|
|
28
|
-
thread_safe (~> 0.3, >= 0.3.1)
|
|
29
|
-
diff-lcs (1.6.0)
|
|
30
|
-
drb (2.2.1)
|
|
31
|
-
faraday (1.10.4)
|
|
32
|
-
faraday-em_http (~> 1.0)
|
|
33
|
-
faraday-em_synchrony (~> 1.0)
|
|
34
|
-
faraday-excon (~> 1.1)
|
|
35
|
-
faraday-httpclient (~> 1.0)
|
|
36
|
-
faraday-multipart (~> 1.0)
|
|
37
|
-
faraday-net_http (~> 1.0)
|
|
38
|
-
faraday-net_http_persistent (~> 1.0)
|
|
39
|
-
faraday-patron (~> 1.0)
|
|
40
|
-
faraday-rack (~> 1.0)
|
|
41
|
-
faraday-retry (~> 1.0)
|
|
42
|
-
ruby2_keywords (>= 0.0.4)
|
|
43
|
-
faraday-em_http (1.0.0)
|
|
44
|
-
faraday-em_synchrony (1.0.0)
|
|
45
|
-
faraday-excon (1.1.0)
|
|
46
|
-
faraday-httpclient (1.0.1)
|
|
47
|
-
faraday-multipart (1.1.0)
|
|
48
|
-
multipart-post (~> 2.0)
|
|
49
|
-
faraday-net_http (1.0.2)
|
|
50
|
-
faraday-net_http_persistent (1.2.0)
|
|
51
|
-
faraday-patron (1.0.0)
|
|
52
|
-
faraday-rack (1.0.0)
|
|
53
|
-
faraday-retry (1.0.3)
|
|
54
|
-
git (2.3.3)
|
|
55
|
-
activesupport (>= 5.0)
|
|
56
|
-
addressable (~> 2.8)
|
|
57
|
-
process_executer (~> 1.1)
|
|
58
|
-
rchardet (~> 1.8)
|
|
59
|
-
github_api (0.19.0)
|
|
60
|
-
addressable (~> 2.4)
|
|
61
|
-
descendants_tracker (~> 0.0.4)
|
|
62
|
-
faraday (>= 0.8, < 2)
|
|
63
|
-
hashie (~> 3.5, >= 3.5.2)
|
|
64
|
-
oauth2 (~> 1.0)
|
|
65
|
-
hashie (3.6.0)
|
|
66
|
-
highline (3.1.2)
|
|
67
|
-
reline
|
|
68
|
-
i18n (1.14.7)
|
|
69
|
-
concurrent-ruby (~> 1.0)
|
|
70
|
-
io-console (0.8.0)
|
|
71
|
-
iostruct (0.5.0)
|
|
72
|
-
juwelier (2.4.9)
|
|
73
|
-
builder
|
|
74
|
-
bundler
|
|
75
|
-
git
|
|
76
|
-
github_api
|
|
77
|
-
highline
|
|
78
|
-
kamelcase (~> 0)
|
|
79
|
-
nokogiri
|
|
80
|
-
psych
|
|
81
|
-
rake
|
|
82
|
-
rdoc
|
|
83
|
-
semver2
|
|
84
|
-
jwt (2.10.1)
|
|
85
|
-
base64
|
|
86
|
-
kamelcase (0.0.2)
|
|
87
|
-
semver2 (~> 3)
|
|
88
|
-
logger (1.6.6)
|
|
89
|
-
mini_portile2 (2.8.8)
|
|
90
|
-
minitest (5.25.4)
|
|
91
|
-
multi_json (1.15.0)
|
|
92
|
-
multi_xml (0.7.1)
|
|
93
|
-
bigdecimal (~> 3.1)
|
|
94
|
-
multipart-post (2.4.1)
|
|
95
|
-
nokogiri (1.18.4)
|
|
96
|
-
mini_portile2 (~> 2.8.2)
|
|
97
|
-
racc (~> 1.4)
|
|
98
|
-
nokogiri (1.18.4-aarch64-linux-gnu)
|
|
99
|
-
racc (~> 1.4)
|
|
100
|
-
nokogiri (1.18.4-arm-linux-gnu)
|
|
101
|
-
racc (~> 1.4)
|
|
102
|
-
nokogiri (1.18.4-arm64-darwin)
|
|
103
|
-
racc (~> 1.4)
|
|
104
|
-
nokogiri (1.18.4-x86_64-darwin)
|
|
105
|
-
racc (~> 1.4)
|
|
106
|
-
nokogiri (1.18.4-x86_64-linux-gnu)
|
|
107
|
-
racc (~> 1.4)
|
|
108
|
-
oauth2 (1.4.11)
|
|
109
|
-
faraday (>= 0.17.3, < 3.0)
|
|
110
|
-
jwt (>= 1.0, < 3.0)
|
|
111
|
-
multi_json (~> 1.3)
|
|
112
|
-
multi_xml (~> 0.5)
|
|
113
|
-
rack (>= 1.2, < 4)
|
|
114
|
-
process_executer (1.3.0)
|
|
115
|
-
psych (5.2.3)
|
|
116
|
-
date
|
|
117
|
-
stringio
|
|
118
|
-
public_suffix (6.0.1)
|
|
119
|
-
racc (1.8.1)
|
|
120
|
-
rack (3.1.12)
|
|
121
|
-
rainbow (3.1.1)
|
|
122
|
-
rake (13.2.1)
|
|
123
|
-
rchardet (1.9.0)
|
|
124
|
-
rdoc (6.12.0)
|
|
125
|
-
psych (>= 4.0.0)
|
|
126
|
-
reline (0.6.0)
|
|
127
|
-
io-console (~> 0.5)
|
|
128
|
-
rspec (3.13.0)
|
|
12
|
+
diff-lcs (1.6.2)
|
|
13
|
+
iostruct (0.7.0)
|
|
14
|
+
logger (1.7.0)
|
|
15
|
+
rspec (3.13.2)
|
|
129
16
|
rspec-core (~> 3.13.0)
|
|
130
17
|
rspec-expectations (~> 3.13.0)
|
|
131
18
|
rspec-mocks (~> 3.13.0)
|
|
132
|
-
rspec-core (3.13.
|
|
19
|
+
rspec-core (3.13.6)
|
|
133
20
|
rspec-support (~> 3.13.0)
|
|
134
|
-
rspec-expectations (3.13.
|
|
21
|
+
rspec-expectations (3.13.5)
|
|
135
22
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
136
23
|
rspec-support (~> 3.13.0)
|
|
137
24
|
rspec-its (2.0.0)
|
|
138
25
|
rspec-core (>= 3.13.0)
|
|
139
26
|
rspec-expectations (>= 3.13.0)
|
|
140
|
-
rspec-mocks (3.13.
|
|
27
|
+
rspec-mocks (3.13.7)
|
|
141
28
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
142
29
|
rspec-support (~> 3.13.0)
|
|
143
|
-
rspec-support (3.13.
|
|
144
|
-
|
|
145
|
-
securerandom (0.4.1)
|
|
146
|
-
semver2 (3.4.2)
|
|
147
|
-
stringio (3.1.5)
|
|
148
|
-
thread_safe (0.3.6)
|
|
149
|
-
tzinfo (2.0.6)
|
|
150
|
-
concurrent-ruby (~> 1.0)
|
|
151
|
-
uri (1.0.3)
|
|
152
|
-
zhexdump (0.2.0)
|
|
30
|
+
rspec-support (3.13.6)
|
|
31
|
+
zhexdump (0.3.0)
|
|
153
32
|
|
|
154
33
|
PLATFORMS
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
arm64-darwin
|
|
158
|
-
x86-linux
|
|
159
|
-
x86_64-darwin
|
|
160
|
-
x86_64-linux
|
|
34
|
+
arm64-darwin-24
|
|
35
|
+
ruby
|
|
161
36
|
|
|
162
37
|
DEPENDENCIES
|
|
163
|
-
|
|
164
|
-
bundler
|
|
165
|
-
iostruct (>= 0.5.0)
|
|
166
|
-
juwelier
|
|
167
|
-
multipart-post (>= 2.0.0)
|
|
168
|
-
rainbow
|
|
38
|
+
pedump!
|
|
169
39
|
rspec
|
|
170
40
|
rspec-its
|
|
171
|
-
zhexdump (>= 0.0.2)
|
|
172
41
|
|
|
173
42
|
BUNDLED WITH
|
|
174
|
-
2.
|
|
43
|
+
2.6.9
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
|
@@ -4,6 +4,9 @@ pedump [VA to file offset and back
|
|
230
|
+
|
|
231
|
+
# pedump --rva2file 0x4c000 calc.exe
|
|
232
|
+
|
|
233
|
+
rva2file(0x4c000) = 0x4ae00 (306688)
|
|
234
|
+
|
|
235
|
+
# pedump --file2rva 0x4ae00 calc.exe
|
|
236
|
+
|
|
237
|
+
file2rva(0x4ae00) = 0x4c000 (311296)
|
|
238
|
+
|
|
239
|
+
# pedump --va2file 0x104c000 calc.exe
|
|
240
|
+
|
|
241
|
+
va2file(0x104c000) = 0x4ae00 (306688)
|
|
242
|
+
|
|
243
|
+
# pedump --file2va 0x4ae00 calc.exe
|
|
244
|
+
|
|
245
|
+
file2va(0x4ae00) = 0x104c000 (17088512)
|
|
246
|
+
|
|
247
|
+
# pedump --file2va 0x4ae00 calc.exe --format hex
|
|
248
|
+
|
|
249
|
+
104c000
|
|
250
|
+
|
|
224
251
|
### Data Directory
|
|
225
252
|
|
|
226
253
|
# pedump --data-directory calc.exe
|
data/Rakefile
CHANGED
|
@@ -1,48 +1,23 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
require 'rubygems'
|
|
4
|
-
require 'bundler'
|
|
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 'juwelier'
|
|
15
|
-
Juwelier::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 .github/**/*'
|
|
27
|
-
gem.extra_rdoc_files.exclude 'README.md.tpl'
|
|
28
|
-
# dependencies defined in Gemfile
|
|
29
|
-
end
|
|
30
|
-
Juwelier::RubygemsDotOrgTasks.new
|
|
1
|
+
# frozen_string_literal: true
|
|
31
2
|
|
|
32
|
-
require '
|
|
3
|
+
require 'bundler/gem_tasks'
|
|
33
4
|
require 'rspec/core/rake_task'
|
|
34
5
|
|
|
35
|
-
desc
|
|
6
|
+
desc 'run specs'
|
|
36
7
|
RSpec::Core::RakeTask.new
|
|
37
8
|
|
|
38
|
-
task :
|
|
9
|
+
task default: %i[spec readme]
|
|
10
|
+
|
|
11
|
+
task :init do
|
|
12
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib'))
|
|
13
|
+
require 'pedump'
|
|
14
|
+
require 'pedump/cli'
|
|
15
|
+
end
|
|
39
16
|
|
|
40
17
|
namespace :test do
|
|
41
|
-
desc
|
|
42
|
-
task :
|
|
43
|
-
|
|
44
|
-
require './lib/pedump/cli'
|
|
45
|
-
path = ENV['path'] || raise("run me with path=...")
|
|
18
|
+
desc 'test on all files in given path'
|
|
19
|
+
task all_files: :init do
|
|
20
|
+
path = ENV['path'] || raise('run me with path=...')
|
|
46
21
|
`find #{path} -type f`.split("\n").each do |fname|
|
|
47
22
|
puts "\n### #{fname}\n"
|
|
48
23
|
PEdump::CLI.new(fname).run
|
|
@@ -50,37 +25,33 @@ namespace :test do
|
|
|
50
25
|
end
|
|
51
26
|
|
|
52
27
|
namespace :all_files do
|
|
53
|
-
desc
|
|
54
|
-
task :
|
|
55
|
-
|
|
56
|
-
require './lib/pedump/cli'
|
|
57
|
-
path = ENV['path'] || raise("run me with path=...")
|
|
28
|
+
desc 'output file name to stderr, use with stdout redirection'
|
|
29
|
+
task stderr: :init do
|
|
30
|
+
path = ENV['path'] || raise('run me with path=...')
|
|
58
31
|
`find #{path} -type f`.split("\n").each do |fname|
|
|
59
|
-
|
|
32
|
+
warn "\n### #{fname}\n"
|
|
60
33
|
PEdump::CLI.new(fname).run
|
|
61
34
|
end
|
|
62
35
|
end
|
|
63
36
|
end
|
|
64
37
|
|
|
65
|
-
desc
|
|
66
|
-
task :
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
PEdump::CLI.new(fname).run
|
|
73
|
-
end
|
|
38
|
+
desc 'test on corkami binaries'
|
|
39
|
+
task corkami: :init do
|
|
40
|
+
path = 'samples/corkami'
|
|
41
|
+
`find #{path} -type f`.split("\n").each do |fname|
|
|
42
|
+
warn "\n### #{fname}\n"
|
|
43
|
+
PEdump::CLI.new(fname).run
|
|
44
|
+
end
|
|
74
45
|
end
|
|
75
46
|
end
|
|
76
47
|
|
|
77
|
-
def check_file
|
|
48
|
+
def check_file(url, params = {})
|
|
78
49
|
require 'digest/md5'
|
|
79
50
|
require 'open-uri'
|
|
80
51
|
|
|
81
52
|
params[:min_size] ||= 80_000
|
|
82
53
|
|
|
83
|
-
|
|
54
|
+
$stdout.sync = true
|
|
84
55
|
prefix = params[:prefix]
|
|
85
56
|
fname = File.join 'data', (prefix ? "#{prefix}-" : '') + File.basename(url)
|
|
86
57
|
existing_md5 = File.exist?(fname) ? Digest::MD5.file(fname).hexdigest : ''
|
|
@@ -88,127 +59,124 @@ def check_file url, params = {}
|
|
|
88
59
|
remote_data = URI.open(url).read.force_encoding('cp1252').encode('utf-8')
|
|
89
60
|
puts "#{remote_data.size} bytes"
|
|
90
61
|
raise "too small remote data (#{remote_data.size})" if remote_data.size < params[:min_size]
|
|
91
|
-
|
|
62
|
+
|
|
63
|
+
remote_md5 = Digest::MD5.hexdigest(remote_data)
|
|
92
64
|
if remote_md5 == existing_md5
|
|
93
|
-
puts
|
|
65
|
+
puts '[.] same as local'
|
|
94
66
|
else
|
|
95
67
|
existing_size = File.exist?(fname) ? File.size(fname) : 0
|
|
96
|
-
File.
|
|
68
|
+
File.write(fname, remote_data, mode: 'wb')
|
|
97
69
|
puts "[*] updated: #{existing_size} -> #{remote_data.size}"
|
|
98
70
|
end
|
|
99
71
|
end
|
|
100
72
|
|
|
101
|
-
RICH_IDS_URL =
|
|
73
|
+
RICH_IDS_URL = 'https://raw.githubusercontent.com/dishather/richprint/master/comp_id.txt'
|
|
102
74
|
|
|
103
75
|
namespace :rich do
|
|
104
|
-
desc
|
|
76
|
+
desc 'update rich comp_id db from net'
|
|
105
77
|
task :update do
|
|
106
|
-
check_file RICH_IDS_URL, :
|
|
78
|
+
check_file RICH_IDS_URL, min_size: 30_000
|
|
107
79
|
end
|
|
108
80
|
|
|
109
|
-
desc
|
|
81
|
+
desc 'convert'
|
|
110
82
|
task :convert do
|
|
111
83
|
result = [
|
|
112
|
-
|
|
84
|
+
'class PEdump',
|
|
113
85
|
" # data from #{RICH_IDS_URL}",
|
|
114
|
-
|
|
86
|
+
' RICH_IDS = {'
|
|
115
87
|
]
|
|
116
88
|
n = 0
|
|
117
89
|
t0 = Time.now
|
|
118
|
-
File.readlines(File.join(
|
|
90
|
+
File.readlines(File.join('data', File.basename(RICH_IDS_URL))).each do |line|
|
|
119
91
|
line.strip!
|
|
120
92
|
next if line.empty? || line[0] == '#'
|
|
93
|
+
|
|
121
94
|
comp_id, desc = line.split(nil, 2)
|
|
122
95
|
raise unless comp_id =~ /\A[0-9a-fA-F]+\Z/
|
|
96
|
+
|
|
123
97
|
result << " 0x#{comp_id} => #{desc.inspect},"
|
|
124
98
|
n += 1
|
|
125
99
|
end
|
|
126
|
-
result <<
|
|
127
|
-
result <<
|
|
128
|
-
printf "[.] parsed %d definitions in %6.3fs\n", n, Time.now-t0
|
|
129
|
-
File.write(
|
|
100
|
+
result << ' }'
|
|
101
|
+
result << 'end'
|
|
102
|
+
printf "[.] parsed %d definitions in %6.3fs\n", n, Time.now - t0
|
|
103
|
+
File.write('lib/pedump/rich.rb', result.join("\n") + "\n")
|
|
130
104
|
end
|
|
131
105
|
end
|
|
132
106
|
|
|
133
107
|
namespace :sigs do
|
|
134
|
-
desc
|
|
135
|
-
task :
|
|
136
|
-
require './lib/pedump/packer'
|
|
137
|
-
check_file "http://research.pandasecurity.com/blogs/images/userdb.txt"
|
|
138
|
-
check_file "http://fuu.googlecode.com/svn/trunk/src/x86/Tools/Signaturesdb/signatures.txt"
|
|
139
|
-
check_file "http://handlers.sans.edu/jclausing/userdb.txt", :prefix => "jc"
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
desc "convert txt2bin"
|
|
143
|
-
task :convert do
|
|
108
|
+
desc 'convert txt2bin'
|
|
109
|
+
task convert: :init do
|
|
144
110
|
require './lib/pedump/packer'
|
|
145
111
|
t0 = Time.now
|
|
146
|
-
sigs = PEdump::SigParser.parse
|
|
147
|
-
printf "[.] parsed %d definitions in %6.3fs\n", sigs.size, Time.now-t0
|
|
148
|
-
File.open(PEdump::Packer::BIN_SIGS_FILE,
|
|
112
|
+
sigs = PEdump::SigParser.parse optimize: true
|
|
113
|
+
printf "[.] parsed %d definitions in %6.3fs\n", sigs.size, Time.now - t0
|
|
114
|
+
File.open(PEdump::Packer::BIN_SIGS_FILE, 'wb') { |f| Marshal.dump(sigs, f) }
|
|
149
115
|
end
|
|
150
116
|
|
|
151
|
-
desc
|
|
152
|
-
task :
|
|
117
|
+
desc 'dump'
|
|
118
|
+
task dump: :init do
|
|
153
119
|
require './lib/pedump/packer'
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
end
|
|
120
|
+
PEdump::Packer.all
|
|
121
|
+
.group_by(&:name)
|
|
122
|
+
.sort_by { |name, _sigs| name }
|
|
123
|
+
.each do |name, sigs|
|
|
124
|
+
next if sigs.size == 1
|
|
125
|
+
|
|
126
|
+
puts name
|
|
127
|
+
sigs.each do |sig|
|
|
128
|
+
printf " %-5s %s\n", sig.ep_only, sig.re.source.inspect
|
|
164
129
|
end
|
|
130
|
+
end
|
|
165
131
|
end
|
|
166
132
|
end
|
|
167
133
|
|
|
168
|
-
desc
|
|
134
|
+
desc 'build readme'
|
|
169
135
|
task :readme do
|
|
170
136
|
require 'erb'
|
|
171
137
|
tpl = File.read('README.md.tpl').gsub(/^%\s+(.+)/) do |x|
|
|
172
|
-
x.sub!
|
|
138
|
+
x.sub!(/^%/, '')
|
|
173
139
|
"<%= run(\"#{x}\") %>"
|
|
174
140
|
end
|
|
175
|
-
def run
|
|
141
|
+
def run(cmd)
|
|
176
142
|
cmd.strip!
|
|
177
143
|
puts "[.] #{cmd} ..."
|
|
178
144
|
r = " # #{cmd}\n\n"
|
|
179
|
-
cmd.sub!
|
|
180
|
-
lines = `#{cmd}`.sub(/\A\n+/m,'').sub(/\s+\Z/,'').split("\n")
|
|
181
|
-
lines = lines[0,25] + ['...'] if lines.size > 50 && cmd.split.last != '-h'
|
|
182
|
-
r << lines.map{|x| " #{x}"}.join("\n")
|
|
145
|
+
cmd.sub!(/^pedump/, '../bin/pedump')
|
|
146
|
+
lines = `#{cmd}`.sub(/\A\n+/m, '').sub(/\s+\Z/, '').split("\n")
|
|
147
|
+
lines = lines[0, 25] + ['...'] if lines.size > 50 && cmd.split.last != '-h'
|
|
148
|
+
r << lines.map { |x| " #{x}" }.join("\n")
|
|
183
149
|
r << "\n"
|
|
184
150
|
end
|
|
185
151
|
Dir.chdir 'samples'
|
|
186
|
-
result = ERB.new(tpl,
|
|
152
|
+
result = ERB.new(tpl, trim_mode: '%>').result
|
|
187
153
|
Dir.chdir '..'
|
|
188
|
-
File.
|
|
154
|
+
File.write('README.md', result)
|
|
189
155
|
end
|
|
190
156
|
|
|
191
157
|
namespace :console do
|
|
192
|
-
desc
|
|
158
|
+
desc 'start console with PEdump::Loader with loaded file'
|
|
193
159
|
task :load do
|
|
194
|
-
raise
|
|
160
|
+
raise 'gimme a fname' unless (fname = ENV['fname'])
|
|
161
|
+
|
|
195
162
|
require './lib/pedump'
|
|
196
163
|
require './lib/pedump/loader'
|
|
197
164
|
require 'pp'
|
|
198
|
-
File.open(fname,
|
|
165
|
+
File.open(fname, 'rb') do |f|
|
|
199
166
|
@ldr = PEdump::Loader.new f
|
|
200
|
-
puts
|
|
167
|
+
puts '[.] loader is at @ldr'
|
|
201
168
|
pp @ldr.sections
|
|
202
|
-
Rake::Task[
|
|
169
|
+
Rake::Task['console'].execute
|
|
203
170
|
end
|
|
204
171
|
end
|
|
205
172
|
end
|
|
206
173
|
|
|
207
|
-
desc
|
|
174
|
+
desc 'compare two PE files'
|
|
208
175
|
task :cmp do
|
|
209
|
-
raise
|
|
210
|
-
raise
|
|
176
|
+
raise 'gimme a f1' unless (f1 = ENV['f1'])
|
|
177
|
+
raise 'gimme a f2' unless (f2 = ENV['f2'])
|
|
178
|
+
|
|
211
179
|
require './lib/pedump'
|
|
212
180
|
require './lib/pedump/comparer'
|
|
213
|
-
PEdump::Comparer.cmp(f1,f2)
|
|
181
|
+
PEdump::Comparer.cmp(f1, f2)
|
|
214
182
|
end
|
data/data/jc-userdb.txt
CHANGED
|
@@ -4301,13 +4301,9 @@ signature = 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 8B 44 24 10 89 6C 24 10 8D 6C 24
|
|
|
4301
4301
|
ep_only = false
|
|
4302
4302
|
|
|
4303
4303
|
[Microsoft Visual C++ 6.0 - 8.0]
|
|
4304
|
-
signature = 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 8B 44 24 10 89 6C 24 10 8D 6C 24 10 2B E0 53 56 57 8B 45 F8 89 65 E8 50 8B 45 FC C7 45 FC FF FF FF FF 89 45 F8 8D 45 F0 64 A3 00 00 00 00 C3 8B 4D F0 64 89 0D 00 00 00 00 59 5F 5E 5B C9 51 C3
|
|
4304
|
+
signature = 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 8B 44 24 10 89 6C 24 10 8D 6C 24 10 2B E0 53 56 57 8B 45 F8 89 65 E8 50 8B 45 FC C7 45 FC FF FF FF FF 89 45 F8 8D 45 F0 64 A3 00 00 00 00 C3 8B 4D F0 64 89 0D 00 00 00 00 59 5F 5E 5B C9 51 C3
|
|
4305
4305
|
ep_only = true
|
|
4306
4306
|
|
|
4307
|
-
[Microsoft Visual C++ 6.0 - 8.0]
|
|
4308
|
-
signature = 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 8B 44 24 10 89 6C 24 10 8D 6C 24 10 2B E0 53 56 57 8B 45 F8 89 65 E8 50 8B 45 FC C7 45 FC FF FF FF FF 89 45 F8 8D 45 F0 64 A3 00 00 00 00 C3 8B 4D F0 64 89 0D 00 00 00 00 59 5F 5E 5B C9 51 C3 (TRUNCATED HERE)
|
|
4309
|
-
ep_only = false
|
|
4310
|
-
|
|
4311
4307
|
[Microsoft Visual C++ 6.0 - 8.0]
|
|
4312
4308
|
signature = 8B 44 24 08 85 C0 0F 84 ?? ?? ?? ?? 83 F8 01 8B 0D ?? ?? ?? ?? 8B 09 89 0D ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 68 80 00 00 00 FF 15 ?? ?? ?? ?? 85 C0 59 A3 ?? ?? ?? ?? 0F 84 ?? ?? ?? ?? 83 20 00 A1 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? A3 ?? ?? ?? ?? E8
|
|
4313
4309
|
ep_only = false
|
|
@@ -9946,7 +9942,7 @@ signature = E8 00 00 00 00 5E 83 C6 14 AD 89 C7 AD 89 C1 AD 30 07 47 E2 FB AD FF
|
|
|
9946
9942
|
ep_only = true
|
|
9947
9943
|
|
|
9948
9944
|
[UPX-Shit v0.1 -> 500mhz]
|
|
9949
|
-
signature = E8 00 00 00 00 5E 83 C6 14 AD 89 C7 AD 89 C1 AD 30 07 47 E2 FB AD FF E0 C3 00 ?? ?? 00 ?? ?? ?? 00 ?? ?? ??
|
|
9945
|
+
signature = E8 00 00 00 00 5E 83 C6 14 AD 89 C7 AD 89 C1 AD 30 07 47 E2 FB AD FF E0 C3 00 ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 01 ?? ?? ?? 00 55 50 58 2D 53 68 69 74 20 76 30 2E 31 20 2D 20 77 77 77 2E 62 6C 61 63 6B 6C 6F 67 69 63 2E 6E 65 74 20 2D 20 63 6F 64 65 20 62 79 20 5B 35 30 30 6D 68 7A 5D
|
|
9950
9946
|
ep_only = true
|
|
9951
9947
|
|
|
9952
9948
|
[UPX-Shit v0.1 -> 500mhz]
|
data/data/sig.bin
CHANGED
|
Binary file
|