yara-normalize 0.1.0 → 0.2.0
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 +7 -0
- data/.document +0 -0
- data/Gemfile +5 -5
- data/Gemfile.lock +78 -25
- data/LICENSE.txt +0 -0
- data/README.rdoc +1 -1
- data/Rakefile +3 -11
- data/VERSION +1 -1
- data/bin/yaratool +14 -18
- data/lib/yara-normalize/yara-normalize.rb +15 -13
- data/lib/yara-normalize.rb +0 -0
- data/test/helper.rb +2 -0
- data/test/test_yara-normalize.rb +3 -2
- data/yara-normalize.gemspec +28 -38
- metadata +88 -120
- data/ruby_results.txt +0 -24
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -3
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: f56ffeec6846ec1ae4d2aea3bfa6cc89ca9643d4b31211b39e8381025377a2ff
|
|
4
|
+
data.tar.gz: 50aa592ac824fa3ee427f90c8279b92dc79c6dae1c4254b585e54df8c9a31ba3
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 6e9513389ae6008ae04f6b9c9ed4940c3ed5e49181930064c3c43fec3772ec7dde919cac1bab5ad7e979b1cdd1146d6e4220273f83131efa368d388f08069137
|
|
7
|
+
data.tar.gz: b9d19eb5019b239d877da6b6c42622b98cc214c407a6d4315f87ecd69b81140f42f80f8a2831b5cdf1c708b07caade83e2abe52e60f0bf15aff960707dc1274b
|
data/.document
CHANGED
|
File without changes
|
data/Gemfile
CHANGED
|
@@ -6,9 +6,9 @@ source "http://rubygems.org"
|
|
|
6
6
|
# Add dependencies to develop your gem here.
|
|
7
7
|
# Include everything needed to run rake, tests, features, etc.
|
|
8
8
|
group :development do
|
|
9
|
-
gem "shoulda", ">=
|
|
10
|
-
gem "rdoc", "~>
|
|
11
|
-
gem "bundler", "~>
|
|
12
|
-
gem "jeweler", "~>
|
|
13
|
-
gem "
|
|
9
|
+
gem "shoulda", ">= 4"
|
|
10
|
+
gem "rdoc", "~> 6.4"
|
|
11
|
+
gem "bundler", "~> 2.3"
|
|
12
|
+
gem "jeweler", "~> 2.3.9"
|
|
13
|
+
gem "test-unit", "~> 3.5.3"
|
|
14
14
|
end
|
data/Gemfile.lock
CHANGED
|
@@ -1,35 +1,88 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: http://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
-
activesupport (
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
activesupport (7.0.2.4)
|
|
5
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
6
|
+
i18n (>= 1.6, < 2)
|
|
7
|
+
minitest (>= 5.1)
|
|
8
|
+
tzinfo (~> 2.0)
|
|
9
|
+
addressable (2.4.0)
|
|
10
|
+
builder (3.2.4)
|
|
11
|
+
concurrent-ruby (1.1.10)
|
|
12
|
+
descendants_tracker (0.0.4)
|
|
13
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
|
14
|
+
faraday (0.9.2)
|
|
15
|
+
multipart-post (>= 1.2, < 3)
|
|
16
|
+
git (1.11.0)
|
|
17
|
+
rchardet (~> 1.8)
|
|
18
|
+
github_api (0.16.0)
|
|
19
|
+
addressable (~> 2.4.0)
|
|
20
|
+
descendants_tracker (~> 0.0.4)
|
|
21
|
+
faraday (~> 0.8, < 0.10)
|
|
22
|
+
hashie (>= 3.4)
|
|
23
|
+
mime-types (>= 1.16, < 3.0)
|
|
24
|
+
oauth2 (~> 1.0)
|
|
25
|
+
hashie (5.0.0)
|
|
26
|
+
highline (2.0.3)
|
|
27
|
+
i18n (1.10.0)
|
|
28
|
+
concurrent-ruby (~> 1.0)
|
|
29
|
+
jeweler (2.3.9)
|
|
30
|
+
builder
|
|
31
|
+
bundler
|
|
11
32
|
git (>= 1.2.5)
|
|
33
|
+
github_api (~> 0.16.0)
|
|
34
|
+
highline (>= 1.6.15)
|
|
35
|
+
nokogiri (>= 1.5.10)
|
|
36
|
+
psych
|
|
12
37
|
rake
|
|
13
38
|
rdoc
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
39
|
+
semver2
|
|
40
|
+
jwt (2.3.0)
|
|
41
|
+
mime-types (2.99.3)
|
|
42
|
+
minitest (5.15.0)
|
|
43
|
+
multi_json (1.15.0)
|
|
44
|
+
multi_xml (0.6.0)
|
|
45
|
+
multipart-post (2.1.1)
|
|
46
|
+
nokogiri (1.13.4-x86_64-linux)
|
|
47
|
+
racc (~> 1.4)
|
|
48
|
+
oauth2 (1.4.8)
|
|
49
|
+
faraday (>= 0.8, < 3.0)
|
|
50
|
+
jwt (>= 1.0, < 3.0)
|
|
51
|
+
multi_json (~> 1.3)
|
|
52
|
+
multi_xml (~> 0.5)
|
|
53
|
+
rack (>= 1.2, < 3)
|
|
54
|
+
power_assert (2.0.1)
|
|
55
|
+
psych (4.0.3)
|
|
56
|
+
stringio
|
|
57
|
+
racc (1.6.0)
|
|
58
|
+
rack (2.2.3)
|
|
59
|
+
rake (13.0.6)
|
|
60
|
+
rchardet (1.8.0)
|
|
61
|
+
rdoc (6.4.0)
|
|
62
|
+
psych (>= 4.0.0)
|
|
63
|
+
semver2 (3.4.2)
|
|
64
|
+
shoulda (4.0.0)
|
|
65
|
+
shoulda-context (~> 2.0)
|
|
66
|
+
shoulda-matchers (~> 4.0)
|
|
67
|
+
shoulda-context (2.0.0)
|
|
68
|
+
shoulda-matchers (4.5.1)
|
|
69
|
+
activesupport (>= 4.2.0)
|
|
70
|
+
stringio (3.0.1)
|
|
71
|
+
test-unit (3.5.3)
|
|
72
|
+
power_assert
|
|
73
|
+
thread_safe (0.3.6)
|
|
74
|
+
tzinfo (2.0.4)
|
|
75
|
+
concurrent-ruby (~> 1.0)
|
|
26
76
|
|
|
27
77
|
PLATFORMS
|
|
28
|
-
|
|
78
|
+
x86_64-linux
|
|
29
79
|
|
|
30
80
|
DEPENDENCIES
|
|
31
|
-
bundler (~>
|
|
32
|
-
jeweler (~>
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
81
|
+
bundler (~> 2.3)
|
|
82
|
+
jeweler (~> 2.3.9)
|
|
83
|
+
rdoc (~> 6.4)
|
|
84
|
+
shoulda (>= 4)
|
|
85
|
+
test-unit (~> 3.5.3)
|
|
86
|
+
|
|
87
|
+
BUNDLED WITH
|
|
88
|
+
2.3.12
|
data/LICENSE.txt
CHANGED
|
File without changes
|
data/README.rdoc
CHANGED
|
@@ -7,7 +7,7 @@ This modules takes just the strings from the strings section, sorts them, then g
|
|
|
7
7
|
Then, in the conditions section, reorder the boolean expression to make groups first and then replace all variables
|
|
8
8
|
with $a $b $c, etc. Then hash the result of this.
|
|
9
9
|
|
|
10
|
-
Then, the signature ID is the concatenation of the
|
|
10
|
+
Then, the signature ID is the concatenation of the truncated md5 sum of the sorted strings and the truncated md5 sum of the normalized conditions. E.g., yn01:488085c947cb22ed:d936fceffe.
|
|
11
11
|
|
|
12
12
|
== Usage
|
|
13
13
|
|
data/Rakefile
CHANGED
|
@@ -21,24 +21,16 @@ Jeweler::Tasks.new do |gem|
|
|
|
21
21
|
gem.description = %Q{To enable consistent comparisons between yara rules (signature), a uniform hashing standard was needed.}
|
|
22
22
|
gem.email = "rubygems@chrislee.dhs.org"
|
|
23
23
|
gem.authors = ["chrislee35"]
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
#gem.signing_key = "#{File.dirname(__FILE__)}/../gem-private_key.pem"
|
|
25
|
+
#gem.cert_chain = ["#{File.dirname(__FILE__)}/../gem-public_cert.pem"]
|
|
26
26
|
end
|
|
27
27
|
Jeweler::RubygemsDotOrgTasks.new
|
|
28
28
|
|
|
29
29
|
require 'rake/testtask'
|
|
30
30
|
Rake::TestTask.new(:test) do |test|
|
|
31
|
-
test.libs << 'lib' << 'test'
|
|
32
|
-
test.pattern = 'test/**/test_*.rb'
|
|
33
|
-
test.verbose = true
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
require 'rcov/rcovtask'
|
|
37
|
-
Rcov::RcovTask.new do |test|
|
|
38
31
|
test.libs << 'test'
|
|
39
|
-
test.pattern = 'test
|
|
32
|
+
test.pattern = FileList['test/test*.rb']
|
|
40
33
|
test.verbose = true
|
|
41
|
-
test.rcov_opts << '--exclude "gems/*"'
|
|
42
34
|
end
|
|
43
35
|
|
|
44
36
|
task :default => :test
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.2.0
|
data/bin/yaratool
CHANGED
|
@@ -2,22 +2,18 @@
|
|
|
2
2
|
require 'rubygems'
|
|
3
3
|
require 'yara-normalize'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
hashes[hash] = rule
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
puts "Count: #{count}, Duplicates: #{duplicates}"
|
|
5
|
+
count = duplicates = 0
|
|
6
|
+
hashes = {}
|
|
7
|
+
ARGV.each do |file|
|
|
8
|
+
buf = open(file).read
|
|
9
|
+
YaraTools::Splitter.split(buf).each do |rule|
|
|
10
|
+
count += 1
|
|
11
|
+
hash = rule.hash
|
|
12
|
+
puts "#{rule.name} #{hash} #{rule.normalized_strings.join("%")}"
|
|
13
|
+
if hashes[hash]
|
|
14
|
+
duplicates += 1
|
|
15
|
+
end
|
|
16
|
+
hashes[hash] = rule
|
|
17
|
+
end
|
|
22
18
|
end
|
|
23
|
-
|
|
19
|
+
puts "Count: #{count}, Duplicates: #{duplicates}"
|
|
@@ -8,19 +8,21 @@ module YaraTools
|
|
|
8
8
|
ruletext = ruletext.gsub(/[\r\n]+/,"\n").gsub(/^\s*\/\/.*$/,'')
|
|
9
9
|
@original = ruletext
|
|
10
10
|
@lookup_table = {}
|
|
11
|
-
@next_replacement =
|
|
11
|
+
@next_replacement = 0
|
|
12
12
|
|
|
13
|
-
if ruletext =~ /rule\s+([\w
|
|
14
|
-
|
|
13
|
+
if ruletext =~ /rule\s+([\w\-]+)(\s*:\s*(\w[\w\s]+\w))?\s*\{\s*(meta:\s*(.*?))?strings:\s*(.*?)\s*condition:\s*(.*?)\s*\}/m
|
|
14
|
+
name,_,tags,_,meta,strings,condition = $~.captures
|
|
15
15
|
@name = name
|
|
16
16
|
@tags = tags.strip.split(/[,\s]+/) if tags
|
|
17
17
|
@meta = {}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
if meta
|
|
19
|
+
meta.split(/\n/).each do |m|
|
|
20
|
+
k,v = m.strip.split(/\s*=\s*/,2)
|
|
21
|
+
if v
|
|
22
|
+
@meta[k] = v
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
24
26
|
@normalized_strings = []
|
|
25
27
|
@strings = strings.split(/\n/).map do |s|
|
|
26
28
|
# strip off the spaces from the edges and then replace the first = with ' = '.
|
|
@@ -33,7 +35,7 @@ module YaraTools
|
|
|
33
35
|
hexstr = $1.gsub(/\s+/,'').downcase.scan(/../).join(" ")
|
|
34
36
|
s = s.gsub(/= \{([0-9a-fA-F\s]+)\}/, "= { #{hexstr} }")
|
|
35
37
|
end
|
|
36
|
-
|
|
38
|
+
_, val = s.split(/ = /,2)
|
|
37
39
|
if val
|
|
38
40
|
@normalized_strings << val
|
|
39
41
|
else
|
|
@@ -51,8 +53,8 @@ module YaraTools
|
|
|
51
53
|
condition.gsub(/[\$\#]\w+/) do |x|
|
|
52
54
|
key = x[1,1000]
|
|
53
55
|
if not @lookup_table[key]
|
|
54
|
-
@lookup_table[key] = @next_replacement
|
|
55
|
-
@next_replacement
|
|
56
|
+
@lookup_table[key] = @next_replacement.to_s
|
|
57
|
+
@next_replacement += 1
|
|
56
58
|
end
|
|
57
59
|
x[0].chr+@lookup_table[key]
|
|
58
60
|
end
|
|
@@ -100,7 +102,7 @@ module YaraTools
|
|
|
100
102
|
|
|
101
103
|
class Splitter
|
|
102
104
|
def Splitter.split(ruleset)
|
|
103
|
-
|
|
105
|
+
ruleset.gsub(/[\r\n]+/,"\n").gsub(/^\s*\/\/.*$/,'').scan(/(rule\s+([\w\-]+)(\s*:\s*(\w[\w\s]+\w))?\s*\{\s*(meta:\s*(.*?))?strings:\s*(.*?)\s*condition:\s*(.*?)\s*\})/m).map do |rule|
|
|
104
106
|
YaraRule.new(rule[0])
|
|
105
107
|
end
|
|
106
108
|
end
|
data/lib/yara-normalize.rb
CHANGED
|
File without changes
|
data/test/helper.rb
CHANGED
|
@@ -7,11 +7,13 @@ rescue Bundler::BundlerError => e
|
|
|
7
7
|
$stderr.puts "Run `bundle install` to install missing gems"
|
|
8
8
|
exit e.status_code
|
|
9
9
|
end
|
|
10
|
+
|
|
10
11
|
require 'test/unit'
|
|
11
12
|
require 'shoulda'
|
|
12
13
|
|
|
13
14
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
14
15
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
16
|
+
|
|
15
17
|
require 'yara-normalize'
|
|
16
18
|
|
|
17
19
|
class Test::Unit::TestCase
|
data/test/test_yara-normalize.rb
CHANGED
|
@@ -26,8 +26,9 @@ rule newIE0daymshtmlExec
|
|
|
26
26
|
($mshtmlExec_1 and $mshtmlExec_2 and $mshtmlExec_3) or ($mshtmlExec_4 and $mshtmlExec_5 and ($mshtmlExec_6 or $mshtmlExec_7))
|
|
27
27
|
}
|
|
28
28
|
EOS
|
|
29
|
+
puts sig
|
|
29
30
|
yn = YaraTools::YaraRule.new(sig)
|
|
30
|
-
assert_equal("yn01:
|
|
31
|
+
assert_equal("yn01:66dd624d64a79f17:ecf1725295", yn.hash)
|
|
31
32
|
assert_equal("newIE0daymshtmlExec", yn.name)
|
|
32
33
|
assert_equal("\"redacted @ gmail.com\"", yn.meta['author'])
|
|
33
34
|
assert_equal(["$mshtmlExec_1 = /document.execCommand(['\"]selectAll['\"])/ nocase fullword",
|
|
@@ -98,7 +99,7 @@ rule DataConversion__wide : IntegerParsing DataConversion {
|
|
|
98
99
|
}
|
|
99
100
|
EOS
|
|
100
101
|
yn = YaraTools::YaraRule.new(sig)
|
|
101
|
-
assert_equal("yn01:
|
|
102
|
+
assert_equal("yn01:a5fd8576f2da34e2:d936fceffe", yn.hash)
|
|
102
103
|
assert_equal("1", yn.meta['weight'])
|
|
103
104
|
assert_equal("DataConversion__wide", yn.name)
|
|
104
105
|
assert_equal(["IntegerParsing", "DataConversion"], yn.tags)
|
data/yara-normalize.gemspec
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
# Generated by jeweler
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
|
-
# Instead, edit Jeweler::Tasks in
|
|
3
|
+
# Instead, edit Jeweler::Tasks in rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
+
# stub: yara-normalize 0.2.0 ruby lib
|
|
5
6
|
|
|
6
7
|
Gem::Specification.new do |s|
|
|
7
|
-
s.name =
|
|
8
|
-
s.version = "0.
|
|
8
|
+
s.name = "yara-normalize".freeze
|
|
9
|
+
s.version = "0.2.0"
|
|
9
10
|
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
|
-
s.
|
|
12
|
-
s.
|
|
13
|
-
s.date =
|
|
14
|
-
s.
|
|
15
|
-
s.
|
|
16
|
-
s.
|
|
17
|
-
s.executables = ["yaratool"]
|
|
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 = ["chrislee35".freeze]
|
|
14
|
+
s.date = "2022-05-01"
|
|
15
|
+
s.description = "To enable consistent comparisons between yara rules (signature), a uniform hashing standard was needed.".freeze
|
|
16
|
+
s.email = "rubygems@chrislee.dhs.org".freeze
|
|
17
|
+
s.executables = ["yaratool".freeze]
|
|
18
18
|
s.extra_rdoc_files = [
|
|
19
19
|
"LICENSE.txt",
|
|
20
20
|
"README.rdoc"
|
|
@@ -30,41 +30,31 @@ Gem::Specification.new do |s|
|
|
|
30
30
|
"bin/yaratool",
|
|
31
31
|
"lib/yara-normalize.rb",
|
|
32
32
|
"lib/yara-normalize/yara-normalize.rb",
|
|
33
|
-
"ruby_results.txt",
|
|
34
33
|
"test/helper.rb",
|
|
35
34
|
"test/test_yara-normalize.rb",
|
|
36
35
|
"yara-normalize.gemspec"
|
|
37
36
|
]
|
|
38
|
-
s.homepage =
|
|
39
|
-
s.licenses = ["MIT"]
|
|
40
|
-
s.
|
|
41
|
-
s.
|
|
42
|
-
s.signing_key = %q{/Users/chris/Documents/projects/rubygems/yara-normalize/../gem-private_key.pem}
|
|
43
|
-
s.summary = %q{Normalizes Yara Signatures into a repeatable hash even when non-transforming changes are made}
|
|
37
|
+
s.homepage = "http://github.com/chrislee35/yara-normalize".freeze
|
|
38
|
+
s.licenses = ["MIT".freeze]
|
|
39
|
+
s.rubygems_version = "3.2.3".freeze
|
|
40
|
+
s.summary = "Normalizes Yara Signatures into a repeatable hash even when non-transforming changes are made".freeze
|
|
44
41
|
|
|
45
42
|
if s.respond_to? :specification_version then
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
s.specification_version = 4
|
|
44
|
+
end
|
|
48
45
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
else
|
|
56
|
-
s.add_dependency(%q<shoulda>, [">= 0"])
|
|
57
|
-
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
|
58
|
-
s.add_dependency(%q<bundler>, ["~> 1.1.5"])
|
|
59
|
-
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
|
60
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
|
61
|
-
end
|
|
46
|
+
if s.respond_to? :add_runtime_dependency then
|
|
47
|
+
s.add_development_dependency(%q<shoulda>.freeze, [">= 4"])
|
|
48
|
+
s.add_development_dependency(%q<rdoc>.freeze, ["~> 6.4"])
|
|
49
|
+
s.add_development_dependency(%q<bundler>.freeze, ["~> 2.3"])
|
|
50
|
+
s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
|
|
51
|
+
s.add_development_dependency(%q<test-unit>.freeze, ["~> 3.5.3"])
|
|
62
52
|
else
|
|
63
|
-
s.add_dependency(%q<shoulda
|
|
64
|
-
s.add_dependency(%q<rdoc
|
|
65
|
-
s.add_dependency(%q<bundler
|
|
66
|
-
s.add_dependency(%q<jeweler
|
|
67
|
-
s.add_dependency(%q<
|
|
53
|
+
s.add_dependency(%q<shoulda>.freeze, [">= 4"])
|
|
54
|
+
s.add_dependency(%q<rdoc>.freeze, ["~> 6.4"])
|
|
55
|
+
s.add_dependency(%q<bundler>.freeze, ["~> 2.3"])
|
|
56
|
+
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
|
|
57
|
+
s.add_dependency(%q<test-unit>.freeze, ["~> 3.5.3"])
|
|
68
58
|
end
|
|
69
59
|
end
|
|
70
60
|
|
metadata
CHANGED
|
@@ -1,120 +1,96 @@
|
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: yara-normalize
|
|
3
|
-
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
5
|
-
segments:
|
|
6
|
-
- 0
|
|
7
|
-
- 1
|
|
8
|
-
- 0
|
|
9
|
-
version: 0.1.0
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.2.0
|
|
10
5
|
platform: ruby
|
|
11
|
-
authors:
|
|
6
|
+
authors:
|
|
12
7
|
- chrislee35
|
|
13
8
|
autorequire:
|
|
14
9
|
bindir: bin
|
|
15
|
-
cert_chain:
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Z2VtczEYMBYGCgmSJomT8ixkARkWCGNocmlzbGVlMRMwEQYKCZImiZPyLGQBGRYD
|
|
20
|
-
ZGhzMRMwEQYKCZImiZPyLGQBGRYDb3JnMB4XDTExMDIyNzE1MzAxOVoXDTEyMDIy
|
|
21
|
-
NzE1MzAxOVowVzERMA8GA1UEAwwIcnVieWdlbXMxGDAWBgoJkiaJk/IsZAEZFghj
|
|
22
|
-
aHJpc2xlZTETMBEGCgmSJomT8ixkARkWA2RoczETMBEGCgmSJomT8ixkARkWA29y
|
|
23
|
-
ZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNM1Hjs6q58sf7Jp64A
|
|
24
|
-
vEY2cnRWDdFpD8UWpwaJK5kgSHOVgs+0mtszn+YlYjmx8kpmuYpyU4g9mNMImMQe
|
|
25
|
-
ow8pVsL4QBBK/1Ozgdxrsptk3IiTozMYA+g2I/+WvZSEDu9uHkKe8pvMBEMrg7RJ
|
|
26
|
-
IN7+jWaPnSzg3DbFwxwOdi+QRw33DjK7oFWcOaaBqWTUpI4epdi/c/FE1I6UWULJ
|
|
27
|
-
ZF/Uso0Sc2Pp/YuVhuMHGrUbn7zrWWo76nnK4DTLfXFDbZF5lIXT1w6BtIiN6Ho9
|
|
28
|
-
Rdr/W6663hYUo3WMsUSa3I5+PJXEBKmGHIZ2TNFnoFIRHha2fmm1HC9+BTaKwcO9
|
|
29
|
-
PLcCAwEAAaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4EFgQURzsNkZo2rv86Ftc+hVww
|
|
30
|
-
RNICMrwwCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEBBQUAA4IBAQBRRw/iNA/PdnvW
|
|
31
|
-
OBoNCSr/IiHOGZqMHgPJwyWs68FhThnLc2EyIkuLTQf98ms1/D3p0XX9JsxazvKT
|
|
32
|
-
W/in8Mm/R2fkVziSdzqChtw/4Z4bW3c+RF7TgX6SP5cKxNAfKmAPuItcs2Y+7bdS
|
|
33
|
-
hr/FktVtT2iAmISRnlEbdaTpfl6N2ZWNT83khV6iOs5xRkX/+0e+GgAv9mE6nqr1
|
|
34
|
-
AkuDXMhposxcnFZUrZ3UtMPEe/JnyP7Vv6pvr3qtZm8FidFZU91+rX/fwdyBU8RP
|
|
35
|
-
/5l8uLWXXNt1wEbtu4N1I66LwTK2iRrQZE8XtlgZGbxYDFUkiurq3OafF2YwRs6W
|
|
36
|
-
6yhklP75
|
|
37
|
-
-----END CERTIFICATE-----
|
|
38
|
-
|
|
39
|
-
date: 2012-10-29 00:00:00 -04:00
|
|
40
|
-
default_executable: yaratool
|
|
41
|
-
dependencies:
|
|
42
|
-
- !ruby/object:Gem::Dependency
|
|
43
|
-
prerelease: false
|
|
44
|
-
type: :development
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2022-05-01 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
45
14
|
name: shoulda
|
|
46
|
-
|
|
47
|
-
requirements:
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
48
17
|
- - ">="
|
|
49
|
-
- !ruby/object:Gem::Version
|
|
50
|
-
|
|
51
|
-
- 0
|
|
52
|
-
version: "0"
|
|
53
|
-
requirement: *id001
|
|
54
|
-
- !ruby/object:Gem::Dependency
|
|
55
|
-
prerelease: false
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '4'
|
|
56
20
|
type: :development
|
|
57
|
-
name: rdoc
|
|
58
|
-
version_requirements: &id002 !ruby/object:Gem::Requirement
|
|
59
|
-
requirements:
|
|
60
|
-
- - ~>
|
|
61
|
-
- !ruby/object:Gem::Version
|
|
62
|
-
segments:
|
|
63
|
-
- 3
|
|
64
|
-
- 12
|
|
65
|
-
version: "3.12"
|
|
66
|
-
requirement: *id002
|
|
67
|
-
- !ruby/object:Gem::Dependency
|
|
68
21
|
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '4'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rdoc
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '6.4'
|
|
69
34
|
type: :development
|
|
70
|
-
name: bundler
|
|
71
|
-
version_requirements: &id003 !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - ~>
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
segments:
|
|
76
|
-
- 1
|
|
77
|
-
- 1
|
|
78
|
-
- 5
|
|
79
|
-
version: 1.1.5
|
|
80
|
-
requirement: *id003
|
|
81
|
-
- !ruby/object:Gem::Dependency
|
|
82
35
|
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '6.4'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: bundler
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '2.3'
|
|
83
48
|
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '2.3'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
84
56
|
name: jeweler
|
|
85
|
-
|
|
86
|
-
requirements:
|
|
87
|
-
- - ~>
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
- 8
|
|
92
|
-
- 4
|
|
93
|
-
version: 1.8.4
|
|
94
|
-
requirement: *id004
|
|
95
|
-
- !ruby/object:Gem::Dependency
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 2.3.9
|
|
62
|
+
type: :development
|
|
96
63
|
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: 2.3.9
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: test-unit
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: 3.5.3
|
|
97
76
|
type: :development
|
|
98
|
-
|
|
99
|
-
version_requirements:
|
|
100
|
-
requirements:
|
|
101
|
-
- - "
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
requirement: *id005
|
|
107
|
-
description: To enable consistent comparisons between yara rules (signature), a uniform hashing standard was needed.
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: 3.5.3
|
|
83
|
+
description: To enable consistent comparisons between yara rules (signature), a uniform
|
|
84
|
+
hashing standard was needed.
|
|
108
85
|
email: rubygems@chrislee.dhs.org
|
|
109
|
-
executables:
|
|
86
|
+
executables:
|
|
110
87
|
- yaratool
|
|
111
88
|
extensions: []
|
|
112
|
-
|
|
113
|
-
extra_rdoc_files:
|
|
89
|
+
extra_rdoc_files:
|
|
114
90
|
- LICENSE.txt
|
|
115
91
|
- README.rdoc
|
|
116
|
-
files:
|
|
117
|
-
- .document
|
|
92
|
+
files:
|
|
93
|
+
- ".document"
|
|
118
94
|
- Gemfile
|
|
119
95
|
- Gemfile.lock
|
|
120
96
|
- LICENSE.txt
|
|
@@ -124,39 +100,31 @@ files:
|
|
|
124
100
|
- bin/yaratool
|
|
125
101
|
- lib/yara-normalize.rb
|
|
126
102
|
- lib/yara-normalize/yara-normalize.rb
|
|
127
|
-
- ruby_results.txt
|
|
128
103
|
- test/helper.rb
|
|
129
104
|
- test/test_yara-normalize.rb
|
|
130
105
|
- yara-normalize.gemspec
|
|
131
|
-
has_rdoc: true
|
|
132
106
|
homepage: http://github.com/chrislee35/yara-normalize
|
|
133
|
-
licenses:
|
|
107
|
+
licenses:
|
|
134
108
|
- MIT
|
|
109
|
+
metadata: {}
|
|
135
110
|
post_install_message:
|
|
136
111
|
rdoc_options: []
|
|
137
|
-
|
|
138
|
-
require_paths:
|
|
112
|
+
require_paths:
|
|
139
113
|
- lib
|
|
140
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
|
141
|
-
requirements:
|
|
114
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
115
|
+
requirements:
|
|
142
116
|
- - ">="
|
|
143
|
-
- !ruby/object:Gem::Version
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
|
-
requirements:
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
version: '0'
|
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
149
121
|
- - ">="
|
|
150
|
-
- !ruby/object:Gem::Version
|
|
151
|
-
|
|
152
|
-
- 0
|
|
153
|
-
version: "0"
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '0'
|
|
154
124
|
requirements: []
|
|
155
|
-
|
|
156
|
-
rubyforge_project:
|
|
157
|
-
rubygems_version: 1.3.6
|
|
125
|
+
rubygems_version: 3.2.3
|
|
158
126
|
signing_key:
|
|
159
|
-
specification_version:
|
|
160
|
-
summary: Normalizes Yara Signatures into a repeatable hash even when non-transforming
|
|
127
|
+
specification_version: 4
|
|
128
|
+
summary: Normalizes Yara Signatures into a repeatable hash even when non-transforming
|
|
129
|
+
changes are made
|
|
161
130
|
test_files: []
|
|
162
|
-
|
data/ruby_results.txt
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
CF_DOC_CVE_2012_1535_original yn01:06420b6c243181e8:a7e7b4fe3a { 45 78 61 6d 70 6c 65 0b 63 72 65 61 74 65 4c 69 6e 65 73 09 68 65 61 70 53 70 72 61 79 08 68 65 78 54 6f 42 69 6e 07 6d 78 2e 63 6f 72 65 0a 49 46 6c 65 78 41 73 73 65 74 09 46 6f 6e 74 41 73 73 65 74 0a 66 6c 61 73 68 2e 74 65 78 74 } /*Example.createLines.heapSpray.hexToBin.mx.core.IFlexAsset.FontAsset.flash.text*/%{ 4d 61 69 6e 2f 70 72 69 76 61 74 65 3a } /*Main/private:*/%{ 53 00 69 00 6d 00 53 00 75 00 6e 00 } /*S.i.m.S.u.n*/%{ 57 6f 72 64 2e 44 6f 63 75 6d 65 6e 74 2e 38 } /*Word.Document.8*/%{ 66 6c 61 73 68 2e 64 69 73 70 6c 61 79 06 53 70 72 69 74 65 06 4f 62 6a 65 63 74 0f 45 76 65 6e 74 44 69 73 70 61 74 63 68 65 72 0d 44 69 73 70 6c 61 79 4f 62 6a 65 63 74 } /*flash.display.Sprite.Object.EventDispatcher.DisplayObject*/%{ 68 69 6a 6b 6c 6d 6e 6f } /*hijklmno strings */
|
|
2
|
-
CF_DOC_CVE_2012_1535_shellcode yn01:aed85d99267c6173:4be571de0b "9090909090E947010000C28F36D8A0DF16D5B5F0DE78D00589E91B28BF56BEF71ED697165FFAA1665256D0541988A5D913E98E3A172B9BB28253A2E362577E574F52444C2E746D7000"
|
|
3
|
-
CVE_2012_1535_SWF yn01:d0b0e41fbb90ee63:0c2737ef53 "Edit the world in hex"%"FontAsset"%"PSpop"%"createTextLine"%"heapSpray"%"hexToBin"%{ 46 57 53 }
|
|
4
|
-
cf_exe_dropper_sfx yn01:32c758a1635b4d6e:9534ef77f9 ";The comment below contains SFX script commands"%"Setup=" ascii wide%"Silent=1" ascii wide%"WinRAR" ascii wide
|
|
5
|
-
cf_hlp_malicious_help_file yn01:22be215570105ad6:2edd241969 "CreateThread" nocase%/RR\(.KERNEL32.DLL.,/ nocase%{ 3f 5f 03 00 }%{ 4c 4e 02 00 }
|
|
6
|
-
cf_html_IE8_CVE_2012_4969 yn01:18d1ab9564026f79:a7e7b4fe3a "YMjf\\u0c08\\u0c0cKDogjsiIejengNEkoPDjfiJDIWUAzdfghjAAuUFGGBSIPPPUDFJKSOQJGH"%"document.execCommand(\\"
|
|
7
|
-
cf_ie_cve_2012_1526 yn01:791760cc1bb44202:fa3fd96df1 /\.getElements?By/ nocase%/\.removeChild\(/ nocase%/document\..*?= ?null/ nocase%/mailto\:.{2000,}/ nocase fullword
|
|
8
|
-
CF_JAVA_system_cmds yn01:9369881e5d91ae88:23497b0a75 "/bin/sh"%"Math.random"%"chmod"%"cmd.exe"%"indexOf" //usually used to get result of $fingerprint2%/(os.name|java.io.tmpdir)/%/* Payload */%/* System commands */%/get(Property|env)/%{ ca fe ba be }
|
|
9
|
-
CF_JAVA_network_connectivity yn01:7c4e5171925f60dc:4ffbde1efc "ServerSocket"%"URLConnection" //URL class can also be used to access files in the local file system%"getMbeanServer" //used with MarshallObject%"host"%"lport"%"openConnection"%/* Network indicators */%/get(Input|Output)Stream/%/socket(lhost, lport)/%{ ca fe ba be }
|
|
10
|
-
CF_JAVA_changing_security yn01:cf8a3ae054b77a6d:f6b1a6926b %"AccessController.doPrivileged"%"AllPermission"%"PrivilegedActionException"%"ProtectionDomain"%"file://"%/* Modifying local security : a class that allows applications to implement a security policy */%/[sg]etSecurityManager/%{ ca fe ba be }
|
|
11
|
-
CF_JAVA_execute_write yn01:47d6a8c1cd7ca988:595f5c08f4 %%%"ArrayOfByte"%"Exception.printStackTrace"%"FileOutputStream" /*contains a byte stream with the serialized representation of an object given to its constructor*/%"HexDecode"%"InputStream"%"MarshalledObject"%"ObjectInputStream"%"OutputStreamWriter"%"Runtime.getRuntime"%"StringtoBytes"%"exec"%"getResourceAsStream"%"toByteArray"%"writeObject"%/* Exploit */%/* Loader indicators */%/* Local execution */%/arrayOf(Byte|String)/%/l(port|host)/%{ ca fe ba be }
|
|
12
|
-
CF_JAVA_possible_exploit yn01:b58561333df5354e:e51d8cdbd7 %"ByteArrayInputStream"%"Character.digit"%"ProtectionDomain"%"String.charAt"%"StringBuilder"%"arrayOfByte"%"localPermissions"%"printStackTrace"%{ ca fe ba be }
|
|
13
|
-
CF_PDF_CVE_2007_5659 yn01:ada07a590bb9b5b8:a7e7b4fe3a { 25 50 44 46 2d }%{ 65 70 61 63 73 65 6e 75 }%{ 6e 6f 69 74 63 6e 75 66 }%{ 79 61 72 70 73 }%{ 79 61 72 72 41 }
|
|
14
|
-
CF_PDF_obfuscated_alphabetic_char_blackhole yn01:78654b53f1b3a0d3:c453df481f "%PDF-"%/[a-zA-Z]
[0-9];/%/[a-zA-Z][0-9];/%/[a-zA-Z][012];/%/[a-zA-Z]	[789];/
|
|
15
|
-
CF_PDF_suspicious_js yn01:360cd6b36773334c:e0bbde6bd2 "%PDF-"%/(\(|\[)(.{1,4}(,|-)){64}/
|
|
16
|
-
CF_RTF_ACTOR_CVE_2012_0158_tnauthor_John_Doe yn01:e82aa6a75f86469c:78c8a3f51c { 07 74 6e 61 75 74 68 6f 72 20 4a 6f 68 6e 20 44 6f 65 7d } /* tnauthor John Doe}*/
|
|
17
|
-
CF_RTF_CVE_2012_1856 yn01:0bffc7a0c3656c46:aea71fc2f5 "0CF11E0A1B" nocase%"4d53436f6d63746c4c69622e546162537472697" nocase%"9665fb1e7c85d111b16a00c0f0283628" nocase%"D0CF11E0A1B11AE1" nocase%"D\x0a0\x0aC\x0aF" nocase%"MSComctlLib.TabStrip"%"{\\rt"%"}0105000002000000"%/objdata[[:space:].]{1,20}01.{0,1}05.{0,1}00.{0,1}00.{0,1}02.{0,1}00.{0,1}00.{0,1}00/
|
|
18
|
-
CF_RTF_CVE_2010_3333 yn01:5d18fb7b42dfd5c0:3873ea4382 "\\shp " nocase%"\\shp\\" nocase%"\\sp \\" nocase%"\\sp\\" nocase%"pFragments" nocase%"{\\rt" /* RTF specs */ nocase
|
|
19
|
-
CF_RTF_CVE_2010_3333_rare_ge_type yn01:5bbb6168467e0386:3873ea4382 "\\shp " nocase%"\\shp\\" nocase%"\\sp \\" nocase%"\\sp\\" nocase%"pFragments" nocase%"{\\ge" /* RTF specs */ nocase
|
|
20
|
-
CF_RTF_CVE_2012_0158_var1_objocx yn01:dd9b4fb8c95de7f6:c32f773f84 "\\object" nocase%"\\objemb" nocase%"\\objocx" nocase%"{\\rt" /* RTF specs */ nocase%{ d0 cf 11 e0 a1 b1 1a e1 }
|
|
21
|
-
CF_RTF_CVE_2012_0158_var2_MSComctlLib yn01:cbf14eb4327aae3e:19df01f1b8 "4C697374566965774374726C" nocase%"4D53436F6D63746C4C69622E" nocase%"54726565566965774374726C" nocase
|
|
22
|
-
CF_RTF_CVE_2012_0158_var3_fchars yn01:5a65c8be3acd5373:a7e7b4fe3a /(\\\'[a-f0-9]{2}){30}/%{ 5c 2a 5c 66 63 68 61 72 73 }%{ 7b 5c 72 74 }
|
|
23
|
-
CF_XDP_embedded_PDF yn01:d3a748381610c2e1:bd721f6929 "%PDF"%"</pdf>"%"<chunk>"%"<pdf xmlns="%"JVBERi0"
|
|
24
|
-
Count: 23, Duplicates: 0
|
data.tar.gz.sig
DELETED
|
Binary file
|
metadata.gz.sig
DELETED