# -*- coding: binary -*- module Msf ### # # This module provides some functions for dealing with MCI RIFF data # ### module Exploit::RIFF # # Builds a RIFF chunk with a specified tag and data # def riff_chunk(tag, data) len = data.length padding = len % 2 # RIFF chunks must be 2 byte aligned return tag + [len].pack('V') + data + ("\x00" * padding) end # # Builds a RIFF list chunk (one containing other chunks) # def riff_list_chunk(tag, type, data) len = data.length + 4 padding = len % 2 return tag + [len].pack('V') + type + data end # # Generates a random number of random RIFF chunks, up to 4352 bytes # def random_riff_chunks(count = rand(16) + 17) chunks = '' 0.upto(count) do chunks << random_riff_chunk() end return chunks end # # Generates a random RIFF chunk, up to 136 bytes # def random_riff_chunk(len = rand(128) + 1) riff_chunk(random_riff_tag, rand_text(len)) end # # Generates a random RIFF tag, making sure that it's not one of the # tags processed by LoadAniIcon or LoadCursorIconFromFileMap # def random_riff_tag valid = ['RIFF', 'ACON', 'anih', 'LIST', 'fram', 'icon', 'rate'] tag = nil begin tag = rand_text_alpha(4) end while valid.include? tag return tag end end end