jsobfu 0.1.2 → 0.1.3
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 +8 -8
- data/lib/jsobfu.rb +27 -14
- data/spec/jsobfu_spec.rb +23 -3
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
M2RiZjA5MGU2NDVkNDk1NmI5NDc4ZWM2YTkyM2JhMWU3YzNjN2Q1Mg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MmEzZjk4NjY5MWExOWY3ODNjNTNhMGI3N2QwNDhiZWM3NjViM2VjNA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NzUwYzZhNzIzZTQxYzcxMGE1NTkyMTYwZjMzNGJhZDViYmZmYjM0NzY5ODY4
|
10
|
+
NGFiODQxYWNkYzViMDI4NjYyYTg3OTAwNTg3YTY1NjRjNzQ2ZTE1ZDViMDdj
|
11
|
+
ZmMyMGVhZjljODlkZTU0ZTYzZTljM2M2OWE2MmU1YjQzZjQ4NDE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YzhjMDk4NDY3MGU2OWQ1NzM4MGJhOWQ0NjQ2ZDk1ZGE3ZDUyOThlYjA4NmM4
|
14
|
+
NmRjOWEyMTUyMjc2YmNhYzAyYzE4Y2Q5MzExYzM1MzY1MjE2MGUwNjNmMTdk
|
15
|
+
YzQ5ZTQ2MzZjZTc4NjJlMzEzMWJmNDc2NzAzOTRiOTVlODc1Njc=
|
data/lib/jsobfu.rb
CHANGED
@@ -14,12 +14,9 @@ class JSObfu
|
|
14
14
|
|
15
15
|
# Saves +code+ for later obfuscation with #obfuscate
|
16
16
|
# @param code [#to_s] the code to obfuscate
|
17
|
-
|
18
|
-
# @option opts [Integer] number of times to run the obfuscator on this code (1)
|
19
|
-
def initialize(code, opts={})
|
17
|
+
def initialize(code)
|
20
18
|
@code = code.to_s
|
21
19
|
@scope = Scope.new
|
22
|
-
@iterations = opts.fetch(:iterations, 1).to_i
|
23
20
|
end
|
24
21
|
|
25
22
|
# Add +str+ to the un-obfuscated code.
|
@@ -41,22 +38,38 @@ class JSObfu
|
|
41
38
|
# Parse and obfuscate
|
42
39
|
#
|
43
40
|
# @param opts [Hash] the options hash
|
44
|
-
# @option opts [Boolean] :strip_whitespace
|
45
|
-
#
|
41
|
+
# @option opts [Boolean] :strip_whitespace removes unnecessary whitespace from
|
42
|
+
# the output code (true)
|
43
|
+
# @option opts [Integer] :iterations number of times to run the
|
44
|
+
# obfuscator on this code (1)
|
46
45
|
# @return [String] if successful
|
47
46
|
def obfuscate(opts={})
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
47
|
+
iterations = opts.fetch(:iterations, 1).to_i
|
48
|
+
strip_whitespace = opts.fetch(:strip_whitespace, true)
|
49
|
+
|
50
|
+
iterations.times do |i|
|
51
|
+
obfuscator = JSObfu::Obfuscator.new(scope: @scope)
|
52
|
+
@code = obfuscator.accept(ast).to_s
|
53
|
+
if strip_whitespace
|
52
54
|
@code.gsub!(/(^\s+|\s+$)/, '')
|
53
55
|
@code.delete!("\n")
|
54
56
|
@code.delete!("\r")
|
55
57
|
end
|
56
58
|
|
57
|
-
|
59
|
+
new_renames = obfuscator.renames.dup
|
60
|
+
if @renames
|
61
|
+
# "patch up" the renames after each iteration
|
62
|
+
@renames.each do |key, prev_rename|
|
63
|
+
@renames[key] = new_renames[prev_rename]
|
64
|
+
end
|
65
|
+
else
|
66
|
+
# on first iteration, take the renames as-is
|
67
|
+
@renames = new_renames
|
68
|
+
end
|
69
|
+
|
70
|
+
unless i == iterations-1
|
58
71
|
@scope = Scope.new
|
59
|
-
@ast = nil
|
72
|
+
@ast = nil # force a re-parse
|
60
73
|
end
|
61
74
|
end
|
62
75
|
|
@@ -68,8 +81,8 @@ class JSObfu
|
|
68
81
|
# @param [String] sym the name of the variable or function
|
69
82
|
# @return [String] the obfuscated name
|
70
83
|
def sym(sym)
|
71
|
-
raise RuntimeError, "Must obfuscate before calling #sym" if @
|
72
|
-
@
|
84
|
+
raise RuntimeError, "Must obfuscate before calling #sym" if @renames.nil?
|
85
|
+
@renames[sym.to_s]
|
73
86
|
end
|
74
87
|
|
75
88
|
protected
|
data/spec/jsobfu_spec.rb
CHANGED
@@ -5,9 +5,13 @@ describe JSObfu do
|
|
5
5
|
TEST_STRING = 'var x; function y() {};'
|
6
6
|
|
7
7
|
subject(:jsobfu) do
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
described_class.new(TEST_STRING)
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:iterations) { 1 }
|
12
|
+
|
13
|
+
before do
|
14
|
+
jsobfu.obfuscate(iterations: iterations)
|
11
15
|
end
|
12
16
|
|
13
17
|
describe '#sym' do
|
@@ -22,6 +26,22 @@ describe JSObfu do
|
|
22
26
|
expect(jsobfu.sym('YOLOSWAG')).to be_nil
|
23
27
|
end
|
24
28
|
end
|
29
|
+
|
30
|
+
context 'when iterations: 2 is passed to obfuscate()' do
|
31
|
+
let(:iterations) { 2 }
|
32
|
+
|
33
|
+
context 'when given the string "x"' do
|
34
|
+
it 'returns some string' do
|
35
|
+
expect(jsobfu.sym('x')).not_to be_nil
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when given the string "YOLOSWAG"' do
|
40
|
+
it 'returns nil' do
|
41
|
+
expect(jsobfu.sym('YOLOSWAG')).to be_nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
25
45
|
end
|
26
46
|
|
27
47
|
end
|