module ZSteg::Checker::WBStego
Constants
- ENCRYPTIONS
Public Class Methods
calc_avail_size(image)
click to toggle source
from wbStego4open sources
# File lib/zsteg/checker/wbstego.rb, line 69 def calc_avail_size image space = 0 biHeader = image.hdr if biHeader.biCompression == 0 case biHeader.biBitCount when 4 space = 2*image.imagedata_size if used_colors < 9 when 8 space = image.imagedata_size if used_colors < 129 when 24 space = image.imagedata_size end else raise "TODO" # if biHeader.biBitCount=4 then begin # if UsedColors<9 then space:=GetAvailSizeRLE else space:=0; # end; # if biHeader.biBitCount=8 then begin # if UsedColors<129 then space:=GetAvailSizeRLE else space:=0; # end; end space/8 end
check(data, params = {})
click to toggle source
# File lib/zsteg/checker/wbstego.rb, line 93 def check data, params = {} return if data.size < 4 return if params[:bit_order] != :lsb force_color = nil if params[:image].format == :bmp return if params[:order] !~ /b/i else # PNG return if Array(params[:channels]).join != 'bgr' force_color = :gray if params[:order] != 'xY' end size1 = (data[0,3] + "\x00").unpack('V')[0] avail_size = if params[:image].format == :bmp calc_avail_size(params[:image]) else params[:max_hidden_size] end return if size1 == 0 || size1 > avail_size # check if too many zeroes, prevent false positive nzeroes = data[3..-1].count("\x00") return if nzeroes > 10 && data.size-3-nzeroes < 4 result = nil size2 = (data[3,3] + "\x00").unpack('V')[0] # p [size1, size2, avail_size] if size2 < avail_size && size2 > 0 spacing = 1.0*avail_size/(size2+5) - 1 # puts "[d] spacing=#{spacing}" if spacing > 0 error = 0 r = '' 6.upto(data.size-1) do |idx| if error < 1 r << data[idx] error += spacing else error -= 1 end end if r.size > 4 ext = r[0,3] result = Result.new(size2, ext, r[3..-1], true) end end end # no even distribution #return unless valid_ext?(data[3,3]) result ||= Result.read(data) result.color = force_color if result && force_color result rescue STDERR.puts "[!] wbStego: #{$!.inspect}".red end
used_colors()
click to toggle source
# File lib/zsteg/checker/wbstego.rb, line 64 def used_colors raise "TODO" end