Module Origami::Obfuscator
In: sources/parser/obfuscation.rb

Methods

Constants

WHITECHARS = [ " ", "\t", "\r", "\n", "\0" ]
OBJECTS = [ Array, Boolean, Dictionary, Integer, Name, Null, Stream, String, Real, Reference ]
MAX_INT = 0xFFFFFFFF
PRINTABLE = ("!".."9").to_a + (':'..'Z').to_a + ('['..'z').to_a + ('{'..'~').to_a
FILTERS = [ :FlateDecode, :RunLengthDecode, :LZWDecode, :ASCIIHexDecode, :ASCII85Decode ]

Public Class methods

[Source]

    # File sources/parser/obfuscation.rb, line 40
40:     def self.junk_array(max_size = 5)
41:       length = rand(max_size) + 1
42: 
43:       ::Array.new(length) {
44:         obj = Obfuscator.junk_object until (not obj.nil? and not obj.is_a?(Stream)) ; obj
45:       }.to_o 
46:     end

[Source]

    # File sources/parser/obfuscation.rb, line 48
48:     def self.junk_boolean
49:       Boolean.new(rand(2).zero?)
50:     end

[Source]

    # File sources/parser/obfuscation.rb, line 17
17:     def self.junk_comment(max_size = 15)
18:       length = rand(max_size) + 1
19: 
20:       junk_comment = ::Array.new(length) { 
21:         byte = rand(256).chr until (not byte.nil? and byte != "\n" and byte != "\r"); byte 
22:       }.join
23:       
24:       "%#{junk_comment}#{EOL}"
25:     end

[Source]

    # File sources/parser/obfuscation.rb, line 52
52:     def self.junk_dictionary(max_size = 5)
53:       length = rand(max_size) + 1
54: 
55:       hash = Hash.new
56:       length.times do 
57:         obj = Obfuscator.junk_object
58:         hash[Obfuscator.junk_name] = obj unless obj.is_a?(Stream)
59:       end
60:       
61:       hash.to_o
62:     end

[Source]

    # File sources/parser/obfuscation.rb, line 64
64:     def self.junk_integer(max = MAX_INT)
65:       Integer.new(rand(max + 1))
66:     end

[Source]

    # File sources/parser/obfuscation.rb, line 68
68:     def self.junk_name(max_size = 8)
69:       length = rand(max_size) + 1
70: 
71:       Name.new(::Array.new(length) { PRINTABLE[rand(PRINTABLE.size)] }.join)
72:     end

[Source]

    # File sources/parser/obfuscation.rb, line 74
74:     def self.junk_null
75:       Null.new
76:     end

[Source]

    # File sources/parser/obfuscation.rb, line 27
27:     def self.junk_object(type = nil)
28: 
29:       if type.nil?
30:         type = OBJECTS[rand(OBJECTS.size)]
31:       end
32: 
33:       unless type.include?(Origami::Object)
34:         raise TypeError, "Not a valid object type"
35:       end
36: 
37:       Obfuscator.send("junk_#{type.to_s.split('::').last.downcase}")
38:     end

[Source]

     # File sources/parser/obfuscation.rb, line 102
102:     def self.junk_real
103:       Real.new(rand * rand(MAX_INT + 1))
104:     end

[Source]

     # File sources/parser/obfuscation.rb, line 106
106:     def self.junk_reference(max_no = 300, max_gen = 1)
107:       no = rand(max_no) + 1
108:       gen = rand(max_gen)
109: 
110:       Reference.new(no, gen)
111:     end

[Source]

    # File sources/parser/obfuscation.rb, line 11
11:     def self.junk_spaces(max_size = 3)
12:       length = rand(max_size) + 1
13: 
14:       ::Array.new(length) { WHITECHARS[rand(WHITECHARS.size)] }.join
15:     end

[Source]

    # File sources/parser/obfuscation.rb, line 78
78:     def self.junk_stream(max_data_size = 200)
79:       
80:       chainlen = rand(2) + 1
81:       chain = ::Array.new(chainlen) { FILTERS[rand(FILTERS.size)] }
82: 
83:       length = rand(max_data_size) + 1
84:       junk_data = ::Array.new(length) { rand(256).chr }.join
85: 
86:       stm = Stream.new
87:       stm.dictionary = Obfuscator.junk_dictionary(5)
88:       stm.setFilter(chain)
89:       stm.data = junk_data
90: 
91:       stm
92:     end

[Source]

     # File sources/parser/obfuscation.rb, line 94
 94:     def self.junk_string(max_size = 10)
 95:       length = rand(max_size) + 1
 96: 
 97:       strtype = (rand(2).zero?) ? ByteString : HexaString
 98: 
 99:       strtype.new(::Array.new(length) { PRINTABLE[rand(PRINTABLE.size)] }.join)
100:     end

[Validate]