yara-normalize 0.2.0 → 0.4.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 +4 -4
- metadata +40 -39
- data/.document +0 -5
- data/Gemfile +0 -14
- data/Gemfile.lock +0 -88
- data/Rakefile +0 -46
- data/VERSION +0 -1
- data/test/helper.rb +0 -20
- data/test/test_yara-normalize.rb +0 -113
- data/yara-normalize.gemspec +0 -60
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a345a64cbb92b8600dbed3abe6c92219d60a0d27bd04a49bc60f9e141023369
|
4
|
+
data.tar.gz: a7ee233ae22e1260789397a71ad1926f60d65e86714662b2b1e5a65e2ca27cb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8cb5ab7710807545d146ac7c8d16928296b74dffce0be7963ea815247c8ab3671290c8b236d015ded9dd287eb3b008c8ca4c626279f32440c12b80716b4c9fd
|
7
|
+
data.tar.gz: b82a45e72917d4132aa0e6edaa2fac91b162660f8deb88140a05356efbf42ff8e531c786dd674ec31c96231317bef5d9f30c0bd4f1abed7143851b698bf167f9
|
metadata
CHANGED
@@ -1,113 +1,115 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yara-normalize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
autorequire:
|
7
|
+
- Chris Lee
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: test-unit
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '3.6'
|
19
|
+
type: :development
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - "~>"
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '3.6'
|
13
26
|
- !ruby/object:Gem::Dependency
|
14
27
|
name: shoulda
|
15
28
|
requirement: !ruby/object:Gem::Requirement
|
16
29
|
requirements:
|
17
|
-
- - "
|
30
|
+
- - "~>"
|
18
31
|
- !ruby/object:Gem::Version
|
19
32
|
version: '4'
|
20
33
|
type: :development
|
21
34
|
prerelease: false
|
22
35
|
version_requirements: !ruby/object:Gem::Requirement
|
23
36
|
requirements:
|
24
|
-
- - "
|
37
|
+
- - "~>"
|
25
38
|
- !ruby/object:Gem::Version
|
26
39
|
version: '4'
|
27
40
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
41
|
+
name: rspec
|
29
42
|
requirement: !ruby/object:Gem::Requirement
|
30
43
|
requirements:
|
31
44
|
- - "~>"
|
32
45
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
46
|
+
version: '3.12'
|
34
47
|
type: :development
|
35
48
|
prerelease: false
|
36
49
|
version_requirements: !ruby/object:Gem::Requirement
|
37
50
|
requirements:
|
38
51
|
- - "~>"
|
39
52
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
53
|
+
version: '3.12'
|
41
54
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
55
|
+
name: rake
|
43
56
|
requirement: !ruby/object:Gem::Requirement
|
44
57
|
requirements:
|
45
58
|
- - "~>"
|
46
59
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
60
|
+
version: '13.3'
|
48
61
|
type: :development
|
49
62
|
prerelease: false
|
50
63
|
version_requirements: !ruby/object:Gem::Requirement
|
51
64
|
requirements:
|
52
65
|
- - "~>"
|
53
66
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
67
|
+
version: '13.3'
|
55
68
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
69
|
+
name: bundler
|
57
70
|
requirement: !ruby/object:Gem::Requirement
|
58
71
|
requirements:
|
59
72
|
- - "~>"
|
60
73
|
- !ruby/object:Gem::Version
|
61
|
-
version: 2.
|
74
|
+
version: '2.7'
|
62
75
|
type: :development
|
63
76
|
prerelease: false
|
64
77
|
version_requirements: !ruby/object:Gem::Requirement
|
65
78
|
requirements:
|
66
79
|
- - "~>"
|
67
80
|
- !ruby/object:Gem::Version
|
68
|
-
version: 2.
|
81
|
+
version: '2.7'
|
69
82
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
83
|
+
name: rdoc
|
71
84
|
requirement: !ruby/object:Gem::Requirement
|
72
85
|
requirements:
|
73
86
|
- - "~>"
|
74
87
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
88
|
+
version: '6.6'
|
76
89
|
type: :development
|
77
90
|
prerelease: false
|
78
91
|
version_requirements: !ruby/object:Gem::Requirement
|
79
92
|
requirements:
|
80
93
|
- - "~>"
|
81
94
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
83
|
-
description:
|
84
|
-
|
85
|
-
|
95
|
+
version: '6.6'
|
96
|
+
description: Provides normalization and hashing utilities for Yara rule comparisons.
|
97
|
+
email:
|
98
|
+
- rubygems@chrislee.dhs.org
|
86
99
|
executables:
|
87
100
|
- yaratool
|
88
101
|
extensions: []
|
89
|
-
extra_rdoc_files:
|
90
|
-
- LICENSE.txt
|
91
|
-
- README.rdoc
|
102
|
+
extra_rdoc_files: []
|
92
103
|
files:
|
93
|
-
- ".document"
|
94
|
-
- Gemfile
|
95
|
-
- Gemfile.lock
|
96
104
|
- LICENSE.txt
|
97
105
|
- README.rdoc
|
98
|
-
- Rakefile
|
99
|
-
- VERSION
|
100
106
|
- bin/yaratool
|
101
107
|
- lib/yara-normalize.rb
|
102
108
|
- lib/yara-normalize/yara-normalize.rb
|
103
|
-
|
104
|
-
- test/test_yara-normalize.rb
|
105
|
-
- yara-normalize.gemspec
|
106
|
-
homepage: http://github.com/chrislee35/yara-normalize
|
109
|
+
homepage: https://github.com/chrislee35/yara-normalize
|
107
110
|
licenses:
|
108
111
|
- MIT
|
109
112
|
metadata: {}
|
110
|
-
post_install_message:
|
111
113
|
rdoc_options: []
|
112
114
|
require_paths:
|
113
115
|
- lib
|
@@ -115,16 +117,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
115
117
|
requirements:
|
116
118
|
- - ">="
|
117
119
|
- !ruby/object:Gem::Version
|
118
|
-
version: '0'
|
120
|
+
version: '3.0'
|
119
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
122
|
requirements:
|
121
123
|
- - ">="
|
122
124
|
- !ruby/object:Gem::Version
|
123
125
|
version: '0'
|
124
126
|
requirements: []
|
125
|
-
rubygems_version: 3.2
|
126
|
-
signing_key:
|
127
|
+
rubygems_version: 3.7.2
|
127
128
|
specification_version: 4
|
128
|
-
summary: Normalizes Yara
|
129
|
-
changes are made
|
129
|
+
summary: Normalizes Yara signatures into a repeatable hash even when non-transforming
|
130
|
+
changes are made.
|
130
131
|
test_files: []
|
data/.document
DELETED
data/Gemfile
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
source "http://rubygems.org"
|
2
|
-
# Add dependencies required to use your gem here.
|
3
|
-
# Example:
|
4
|
-
# gem "activesupport", ">= 2.3.5"
|
5
|
-
|
6
|
-
# Add dependencies to develop your gem here.
|
7
|
-
# Include everything needed to run rake, tests, features, etc.
|
8
|
-
group :development do
|
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
|
-
end
|
data/Gemfile.lock
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: http://rubygems.org/
|
3
|
-
specs:
|
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
|
32
|
-
git (>= 1.2.5)
|
33
|
-
github_api (~> 0.16.0)
|
34
|
-
highline (>= 1.6.15)
|
35
|
-
nokogiri (>= 1.5.10)
|
36
|
-
psych
|
37
|
-
rake
|
38
|
-
rdoc
|
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)
|
76
|
-
|
77
|
-
PLATFORMS
|
78
|
-
x86_64-linux
|
79
|
-
|
80
|
-
DEPENDENCIES
|
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/Rakefile
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
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 'jeweler'
|
15
|
-
Jeweler::Tasks.new do |gem|
|
16
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
-
gem.name = "yara-normalize"
|
18
|
-
gem.homepage = "http://github.com/chrislee35/yara-normalize"
|
19
|
-
gem.license = "MIT"
|
20
|
-
gem.summary = %Q{Normalizes Yara Signatures into a repeatable hash even when non-transforming changes are made}
|
21
|
-
gem.description = %Q{To enable consistent comparisons between yara rules (signature), a uniform hashing standard was needed.}
|
22
|
-
gem.email = "rubygems@chrislee.dhs.org"
|
23
|
-
gem.authors = ["chrislee35"]
|
24
|
-
#gem.signing_key = "#{File.dirname(__FILE__)}/../gem-private_key.pem"
|
25
|
-
#gem.cert_chain = ["#{File.dirname(__FILE__)}/../gem-public_cert.pem"]
|
26
|
-
end
|
27
|
-
Jeweler::RubygemsDotOrgTasks.new
|
28
|
-
|
29
|
-
require 'rake/testtask'
|
30
|
-
Rake::TestTask.new(:test) do |test|
|
31
|
-
test.libs << 'test'
|
32
|
-
test.pattern = FileList['test/test*.rb']
|
33
|
-
test.verbose = true
|
34
|
-
end
|
35
|
-
|
36
|
-
task :default => :test
|
37
|
-
|
38
|
-
require 'rdoc/task'
|
39
|
-
Rake::RDocTask.new do |rdoc|
|
40
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
41
|
-
|
42
|
-
rdoc.rdoc_dir = 'rdoc'
|
43
|
-
rdoc.title = "yara-normalize #{version}"
|
44
|
-
rdoc.rdoc_files.include('README*')
|
45
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
46
|
-
end
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.2.0
|
data/test/helper.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'bundler'
|
3
|
-
begin
|
4
|
-
Bundler.setup(:default, :development)
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
10
|
-
|
11
|
-
require 'test/unit'
|
12
|
-
require 'shoulda'
|
13
|
-
|
14
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
15
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
16
|
-
|
17
|
-
require 'yara-normalize'
|
18
|
-
|
19
|
-
class Test::Unit::TestCase
|
20
|
-
end
|
data/test/test_yara-normalize.rb
DELETED
@@ -1,113 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
require 'pp'
|
3
|
-
|
4
|
-
class TestYaraNormalize < Test::Unit::TestCase
|
5
|
-
should "normalize a simple signature" do
|
6
|
-
sig =<<EOS
|
7
|
-
rule newIE0daymshtmlExec
|
8
|
-
{
|
9
|
-
meta:
|
10
|
-
author = "redacted @ gmail.com"
|
11
|
-
ref = "http://blog.vulnhunt.com/index.php/2012/09/17/ie-execcommand-fuction-use-after-free-vulnerability-0day_en/"
|
12
|
-
description = "Internet Explorer CMshtmlEd::Exec() 0day"
|
13
|
-
cve = "CVE-2012-XXXX"
|
14
|
-
version = "1"
|
15
|
-
impact = 4
|
16
|
-
hide = false
|
17
|
-
strings:
|
18
|
-
$mshtmlExec_1 = /document\.execCommand\(['"]selectAll['"]\)/ nocase fullword
|
19
|
-
$mshtmlExec_2 = /YMjf\\u0c08\\u0c0cKDogjsiIejengNEkoPDjfiJDIWUAzdfghjAAuUFGGBSIPPPUDFJKSOQJGH/ nocase fullword
|
20
|
-
$mshtmlExec_3 = /\<body\son(load|select)=['"]\w*?\(\)\;['"]\son(load|select)=['"]\w*?\(\)['"]/ nocase
|
21
|
-
$mshtmlExec_4 = /var\s\w{1,}\s=\snew\sArray\(\)/ nocase
|
22
|
-
$mshtmlExec_5 = /window\.document\.createElement\(['"]img['"]\)/ nocase
|
23
|
-
$mshtmlExec_6 = /\w{1,}\[0\]\[['"]src['"]\]\s\=\s['"]\w{1,}['"]/ nocase
|
24
|
-
$mshtmlExec_7 = /\<iframe\ssrc=['"].*?['"]/ nocase
|
25
|
-
condition:
|
26
|
-
($mshtmlExec_1 and $mshtmlExec_2 and $mshtmlExec_3) or ($mshtmlExec_4 and $mshtmlExec_5 and ($mshtmlExec_6 or $mshtmlExec_7))
|
27
|
-
}
|
28
|
-
EOS
|
29
|
-
puts sig
|
30
|
-
yn = YaraTools::YaraRule.new(sig)
|
31
|
-
assert_equal("yn01:66dd624d64a79f17:ecf1725295", yn.hash)
|
32
|
-
assert_equal("newIE0daymshtmlExec", yn.name)
|
33
|
-
assert_equal("\"redacted @ gmail.com\"", yn.meta['author'])
|
34
|
-
assert_equal(["$mshtmlExec_1 = /document.execCommand(['\"]selectAll['\"])/ nocase fullword",
|
35
|
-
"$mshtmlExec_2 = /YMjf\\u0c08\\u0c0cKDogjsiIejengNEkoPDjfiJDIWUAzdfghjAAuUFGGBSIPPPUDFJKSOQJGH/ nocase fullword",
|
36
|
-
"$mshtmlExec_3 = /<body on(load|select)=['\"]w*?();['\"] on(load|select)=['\"]w*?()['\"]/ nocase",
|
37
|
-
"$mshtmlExec_4 = /var w{1,} = new Array()/ nocase",
|
38
|
-
"$mshtmlExec_5 = /window.document.createElement(['\"]img['\"])/ nocase",
|
39
|
-
"$mshtmlExec_6 = /w{1,}[0][['\"]src['\"]] = ['\"]w{1,}['\"]/ nocase",
|
40
|
-
"$mshtmlExec_7 = /<iframe src=['\"].*?['\"]/ nocase"], yn.strings)
|
41
|
-
assert_equal(
|
42
|
-
["($mshtmlExec_1 and $mshtmlExec_2 and $mshtmlExec_3) or ($mshtmlExec_4 and $mshtmlExec_5 and ($mshtmlExec_6 or $mshtmlExec_7))"],
|
43
|
-
yn.condition
|
44
|
-
)
|
45
|
-
hash1 = yn.hash
|
46
|
-
sig =<<EOS
|
47
|
-
rule newIE0daymshtmlExec : tag1 tag2 tag3
|
48
|
-
{
|
49
|
-
meta:
|
50
|
-
author = "redacted @ gmail.com"
|
51
|
-
ref = "http://blog.vulnhunt.com/index.php/2012/09/17/ie-execcommand-fuction-use-after-free-vulnerability-0day_en/"
|
52
|
-
description = "Internet Explorer CMshtmlEd::Exec() 0day"
|
53
|
-
cve = "CVE-2012-XXXX"
|
54
|
-
version = "1"
|
55
|
-
impact = 4
|
56
|
-
hide = false
|
57
|
-
strings:
|
58
|
-
$mshtmlExec_1 = /document\.execCommand\(['"]selectAll['"]\)/ nocase fullword
|
59
|
-
$mshtmlExec_2 = /YMjf\\u0c08\\u0c0cKDogjsiIejengNEkoPDjfiJDIWUAzdfghjAAuUFGGBSIPPPUDFJKSOQJGH/ nocase fullword
|
60
|
-
$mshtmlExec_3 = /\<body\son(load|select)=['"]\w*?\(\)\;['"]\son(load|select)=['"]\w*?\(\)['"]/ nocase
|
61
|
-
$mshtmlExec_4 = /var\s\w{1,}\s=\snew\sArray\(\)/ nocase
|
62
|
-
$mshtmlExec_5 = /window\.document\.createElement\(['"]img['"]\)/ nocase
|
63
|
-
$mshtmlExec_6 = /\w{1,}\[0\]\[['"]src['"]\]\s\=\s['"]\w{1,}['"]/ nocase
|
64
|
-
$mshtmlExec_7 = /\<iframe\ssrc=['"].*?['"]/ nocase
|
65
|
-
condition:
|
66
|
-
($mshtmlExec_1 and $mshtmlExec_2 and $mshtmlExec_3) or ($mshtmlExec_4 and $mshtmlExec_5 and ($mshtmlExec_6 or $mshtmlExec_7))
|
67
|
-
}
|
68
|
-
EOS
|
69
|
-
yn = YaraTools::YaraRule.new(sig)
|
70
|
-
assert_equal(hash1, yn.hash)
|
71
|
-
assert_equal("newIE0daymshtmlExec", yn.name)
|
72
|
-
assert_equal(["tag1","tag2","tag3"], yn.tags)
|
73
|
-
assert_equal("\"redacted @ gmail.com\"", yn.meta['author'])
|
74
|
-
assert_equal(["$mshtmlExec_1 = /document.execCommand(['\"]selectAll['\"])/ nocase fullword",
|
75
|
-
"$mshtmlExec_2 = /YMjf\\u0c08\\u0c0cKDogjsiIejengNEkoPDjfiJDIWUAzdfghjAAuUFGGBSIPPPUDFJKSOQJGH/ nocase fullword",
|
76
|
-
"$mshtmlExec_3 = /<body on(load|select)=['\"]w*?();['\"] on(load|select)=['\"]w*?()['\"]/ nocase",
|
77
|
-
"$mshtmlExec_4 = /var w{1,} = new Array()/ nocase",
|
78
|
-
"$mshtmlExec_5 = /window.document.createElement(['\"]img['\"])/ nocase",
|
79
|
-
"$mshtmlExec_6 = /w{1,}[0][['\"]src['\"]] = ['\"]w{1,}['\"]/ nocase",
|
80
|
-
"$mshtmlExec_7 = /<iframe src=['\"].*?['\"]/ nocase"], yn.strings)
|
81
|
-
assert_equal(
|
82
|
-
["($mshtmlExec_1 and $mshtmlExec_2 and $mshtmlExec_3) or ($mshtmlExec_4 and $mshtmlExec_5 and ($mshtmlExec_6 or $mshtmlExec_7))"],
|
83
|
-
yn.condition
|
84
|
-
)
|
85
|
-
end
|
86
|
-
|
87
|
-
should "normalize a simple signature that has a condition of 'any of them'" do
|
88
|
-
sig =<<EOS
|
89
|
-
rule DataConversion__wide : IntegerParsing DataConversion {
|
90
|
-
meta:
|
91
|
-
weight = 1
|
92
|
-
strings:
|
93
|
-
$ = "wtoi" nocase
|
94
|
-
$ = "wtol" nocase
|
95
|
-
$ = "wtof" nocase
|
96
|
-
$ = "wtodb" nocase
|
97
|
-
condition:
|
98
|
-
any of them
|
99
|
-
}
|
100
|
-
EOS
|
101
|
-
yn = YaraTools::YaraRule.new(sig)
|
102
|
-
assert_equal("yn01:a5fd8576f2da34e2:d936fceffe", yn.hash)
|
103
|
-
assert_equal("1", yn.meta['weight'])
|
104
|
-
assert_equal("DataConversion__wide", yn.name)
|
105
|
-
assert_equal(["IntegerParsing", "DataConversion"], yn.tags)
|
106
|
-
assert_equal(["$ = \"wtoi\" nocase",
|
107
|
-
"$ = \"wtol\" nocase",
|
108
|
-
"$ = \"wtof\" nocase",
|
109
|
-
"$ = \"wtodb\" nocase"], yn.strings)
|
110
|
-
assert_equal(["any of them"], yn.condition)
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
data/yara-normalize.gemspec
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: yara-normalize 0.2.0 ruby lib
|
6
|
-
|
7
|
-
Gem::Specification.new do |s|
|
8
|
-
s.name = "yara-normalize".freeze
|
9
|
-
s.version = "0.2.0"
|
10
|
-
|
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
|
-
s.extra_rdoc_files = [
|
19
|
-
"LICENSE.txt",
|
20
|
-
"README.rdoc"
|
21
|
-
]
|
22
|
-
s.files = [
|
23
|
-
".document",
|
24
|
-
"Gemfile",
|
25
|
-
"Gemfile.lock",
|
26
|
-
"LICENSE.txt",
|
27
|
-
"README.rdoc",
|
28
|
-
"Rakefile",
|
29
|
-
"VERSION",
|
30
|
-
"bin/yaratool",
|
31
|
-
"lib/yara-normalize.rb",
|
32
|
-
"lib/yara-normalize/yara-normalize.rb",
|
33
|
-
"test/helper.rb",
|
34
|
-
"test/test_yara-normalize.rb",
|
35
|
-
"yara-normalize.gemspec"
|
36
|
-
]
|
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
|
41
|
-
|
42
|
-
if s.respond_to? :specification_version then
|
43
|
-
s.specification_version = 4
|
44
|
-
end
|
45
|
-
|
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"])
|
52
|
-
else
|
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"])
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|