class Raddant

Attributes

bin[RW]
count[RW]
fuzzers[RW]
generators[RW]
indat[RW]
muxer_polymerase[RW]
muxers[RW]
out_file[RW]
polymerase[RW]
seed[RW]
seek[RW]
temp_file[RW]

Public Class Methods

fuzz(file, opts={}, &block) click to toggle source
# File lib/raddant.rb, line 16
def self.fuzz(file, opts={}, &block)
  self.new(file, opts, block)
end
new(str = "", opts={}, &block) click to toggle source
# File lib/raddant.rb, line 20
def initialize(str = "", opts={}, &block)
  @indat = str
  @count = opts[:count] || 0
  @start_seed = opts[:seed]
  @seed = @start_seed || Digest::SHA512.hexdigest(File.read("/dev/urandom",512))
  @seek = opts[:seek]
  @fuzzers = opts[:fuzzers]
  @generators = opts[:generators]
  @polymerase = opts[:polymerase]
  @muxers = opts[:muxers]
  @muxer_polymerase = opts[:muxer_polymerase]
  self.each(block) if block_given?
end

Public Instance Methods

each() { |next| ... } click to toggle source
# File lib/raddant.rb, line 43
def each
  cnt = @count
  sd = @seed
  @seed = @start_seed || @seed
  eret = []
  while( self.next?) do
    yield self.next
    eret << @seed if @count
  end
  @count = cnt
  @seed = sd
  eret
end
fuzz_once(dat) click to toggle source
# File lib/raddant.rb, line 38
def fuzz_once dat
  self.indat = dat
  self.next
end
next() click to toggle source
# File lib/raddant.rb, line 57
def next
  ret = execute
  @count = @count - 1
  @seed = Digest::SHA512.hexdigest(@seed)
  ret
end
next?() click to toggle source
# File lib/raddant.rb, line 34
def next?
  (@count && @count < 1) ? false : true
end

Private Instance Methods

execute() click to toggle source
# File lib/raddant.rb, line 65
def execute
  @out_file = Tempfile.new("raddant")
  @out_file.close
  args = ["-s", @seed.to_i(16).to_s, "-o", @out_file.path]
  @temp_file = Tempfile.new("raddant")
  @temp_file.open
  @temp_file.write @indat
  @temp_file.close
  args += ["-f", [@fuzzers].flatten.join(",")] if @fuzzers
  args += ["-g", [@generators].flatten.join(",")] if @generators
  args += ["-p", [@polymerase].flatten.join(",")] if @polymerase
  args += ["-m", [@muxers].flatten.join(",")] if @muxers
  args += ["-P", [@muxer_polymerase].flatten.join(",")] if @muxer_polymerase
  args += ["-S", @seek] if @seek
  args << @temp_file.path

  raise "radamsa didn't work: #{$?}" unless system(self.class.bin, *args)
  @temp_file.close!
  @out_file.open
  ret = @out_file.read
  @out_file.close!
  ret
end