Almost to 1.0.0 - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit 50ea541b3b0f3d947dac9d04a2e18b4a55de9d89
 (DIR) parent 6389d305a83d6a5384d3332e5ca69cf6d35a8abf
 (HTM) Author: HD Moore <hd_moore@rapid7.com>
       Date:   Wed,  4 Mar 2009 05:41:01 +0000
       
       Almost to 1.0.0
       
       
       Diffstat:
         A docs/LICENSE.musicplayer            |      10 ++++++++++
         M web/app/controllers/home_controlle… |      13 +++++++------
         M web/app/views/analyze/view.html.erb |      23 +++++++++++++++--------
         M web/app/views/dial_results/index.h… |       8 +++-----
         M web/app/views/home/about.html.erb   |     133 +++++++++++++++++++++++++++++++
         M web/app/views/home/index.html.erb   |     157 +++++++------------------------
         D web/app/views/layouts/dial_jobs.ht… |      17 -----------------
         D web/app/views/layouts/dial_results… |      17 -----------------
         D web/app/views/layouts/providers.ht… |      17 -----------------
         M web/config/routes.rb                |       3 +++
         A web/public/images/musicplayer.swf   |       0 
         M web/public/javascripts/FusionChart… |       8 +++++---
       
       12 files changed, 209 insertions(+), 197 deletions(-)
       ---
 (DIR) diff --git a/docs/LICENSE.musicplayer b/docs/LICENSE.musicplayer
       @@ -0,0 +1,10 @@
       +Copyright (c) 2005, Fabricio Zuardi
       +All rights reserved.
       +
       +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
       +
       +    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
       +    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
       +    * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
       +
       +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 (DIR) diff --git a/web/app/controllers/home_controller.rb b/web/app/controllers/home_controller.rb
       @@ -2,14 +2,15 @@ class HomeController < ApplicationController
                layout 'warvox'
                
                def index
       -                begin
       -                        @kissfft_loaded = false
       -                        require 'kissfft'
       -                        @kissfft_loaded = true
       -                rescue
       -                end
       +
                end
                
                def about
       +                begin
       +                        @has_kissfft = "MISSING"
       +                        require 'kissfft'
       +                        @has_kissfft = $LOADED_FEATURES.grep(/kissfft/)[0]
       +                rescue ::LoadError
       +                end        
                end
        end
 (DIR) diff --git a/web/app/views/analyze/view.html.erb b/web/app/views/analyze/view.html.erb
       @@ -14,28 +14,35 @@
            <th>ID</th>  
            <th>Number</th>
            <th>Type</th>
       -    <th>Peak Freq</th>
                  <th>Signal</th>
                <th>Spectrum</th>
            <th>CID</th>
            <th>Provider</th>
       -    <th>Call Time</th>
       -        <th>Ring Time</th>
       +    <th>Time</th>
       +        <th>Ring</th>
          </tr>
        
        <%  @results.each do |dial_result| %>
          <tr>
            <td><%=h dial_result.id %></td>
                <td>
       -                <a href="<%=resource_analyze_path(@job_id)%>?result_id=<%= dial_result.id %>&type=mp3" target="_new"><%= dial_result.number %></a>
       +                <b><%= dial_result.number %></b><br/>
       +                <object
       +                        type="application/x-shockwave-flash"
       +                        data="/images/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id)%>/<%= dial_result.id %>/mp3" 
       +                        width="20"
       +                        height="17"
       +                        >
       +                        <param name="movie" value="/musicplayer.swf?song_url=<%=resource_analyze_path(@job_id)%>/<%= dial_result.id %>/mp3"></param>
       +                        <param name="wmode" value="transparent"></param>
       +                </object>         
                </td>
       -    <td><%=h dial_result.line_type %></td>        
       -    <td><%=h dial_result.peak_freq.to_i %></td>                
       +    <td><%=h dial_result.line_type.upcase %></td>        
                  <td>
       -                <a href="<%=resource_analyze_path(@job_id)%>?result_id=<%= dial_result.id %>&type=big_sig_dots" rel="lightbox"><img src="<%=resource_analyze_path(@job_id)%>?result_id=<%= dial_result.id %>&type=small_sig" /></a>
       +                <a href="<%=resource_analyze_path(@job_id)%>/<%= dial_result.id %>/big_sig_dots" rel="lightbox"><img src="<%=resource_analyze_path(@job_id)%>/<%= dial_result.id %>/small_sig" /></a>
                </td>
                <td>
       -                <a href="<%=resource_analyze_path(@job_id)%>?result_id=<%= dial_result.id %>&type=big_freq" rel="lightbox"><img src="<%=resource_analyze_path(@job_id)%>?result_id=<%= dial_result.id %>&type=small_freq" /></a>
       +                <a href="<%=resource_analyze_path(@job_id)%>/<%= dial_result.id %>/big_freq" rel="lightbox"><img src="<%=resource_analyze_path(@job_id)%>/<%= dial_result.id %>/small_freq" /></a>
                </td>
        
            <td><%=h dial_result.cid %></td>        
 (DIR) diff --git a/web/app/views/dial_results/index.html.erb b/web/app/views/dial_results/index.html.erb
       @@ -5,9 +5,8 @@
          <tr>
            <th>ID</th>
            <th>Range</th>
       -    <th>CallerID</th>
       -    <th>Seconds</th>
       -    <th>Lines</th>
       +    <th>CID</th>
       +    <th>Time</th>
            <th>Started</th>
          </tr>
        
       @@ -17,7 +16,6 @@
            <td><%=h dial_job.range %></td>
            <td><%=h dial_job.cid_mask %></td>        
            <td><%=h dial_job.seconds %></td>
       -    <td><%=h dial_job.lines %></td>
            <td><%=h dial_job.started_at.localtime.strftime("%Y-%m-%d %H:%M:%S %Z") %></td>
            <td><%= link_to 'View', view_dial_result_path(dial_job) %></td>
                <% if(dial_job.processed) %>
       @@ -25,7 +23,7 @@
                <% else %>
                        <td><%= link_to 'Analyze Calls', analyze_dial_result_path(dial_job) %></td>
                <% end %>
       -        <td><%= link_to 'Purge Data', purge_dial_result_path(dial_job), :confirm => "Delete all data for this job?" %></td>
       +        <td><%= link_to 'Purge', purge_dial_result_path(dial_job), :confirm => "Delete all data for this job?" %></td>
          </tr>
        <% end %>
        </table>
 (DIR) diff --git a/web/app/views/home/about.html.erb b/web/app/views/home/about.html.erb
       @@ -0,0 +1,133 @@
       +<table width='100%' align='center' border='0' cellpadding='9' cellspacing='0'>
       +<tr><td valign='top'>
       +
       +<h1 class='title'>About WarVOX</h1>
       +
       +<b>WarVOX</b> is a product of <a href="http://metasploit.com">Metasploit LLC</a> and is provided as 
       +free software under a 
       +<a href="http://creativecommons.org/licenses/by-nc/3.0/">non-commercial</a> license. WarVOX is 
       +intended for legal security assessment, asset inventory, and research purposes only. The latest version
       +of WarVOX can be found at <a href="http://warvox.org/">http://warvox.org/</a>. The WarVOX development
       +team can be reached by email at warvox[at]metasploit.com.
       +
       +</td><td valign='top' align='center'>
       +
       +
       +<h1 class='title'>Statistics</h1>
       +
       +<table id="warvox_stats" cellspacing="0" width=200>
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item">
       +                WarVOX Version:
       +        </td>
       +        <td><%= WarVOX::VERSION %></td>
       +</tr>
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item">
       +                Providers:
       +        </td>
       +        <td><%= Provider.find(:all).length %></td>
       +</tr>
       +
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item">
       +                Active Jobs:
       +        </td>
       +        <td><%= DialJob.find_all_by_status('active').length %></td>
       +</tr>
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item">
       +                Total Jobs:
       +        </td>
       +        <td><%= DialJob.find(:all).length %></td>
       +</tr>
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item">
       +                Results:
       +        </td>
       +        <td><%= DialResult.find(:all).length %></td>
       +</tr>
       +</table>
       +
       +
       +</td></tr>
       +<tr><td valign='top' colspan='2'>
       +
       +<h1 class='title'>Configuration</h1>
       +
       +
       +<table id="warvox_conf" cellspacing="0" width='100%'>
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item" width='200'>
       +                Base Directory:
       +        </td>
       +        <td><%= WarVOX::Base %></td>
       +</tr>
       +
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item" width='200'>
       +                Configuration File:
       +        </td>
       +        <td><%= WarVOX::Conf %></td>
       +</tr>
       +
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item" width='200'>
       +                Data Storage:
       +        </td>
       +        <td><%= WarVOX::Config.data_path %></td>
       +</tr>
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item" width='200'>
       +                Admin User:
       +        </td>
       +        <td><%= WarVOX::Config.authentication_creds[0] %></td>
       +</tr>
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item" width='200'>
       +                GNUPlot
       +        </td>
       +        <td><%= WarVOX::Config.tool_path('gnuplot') || "MISSING" %></td>
       +</tr>
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item" width='200'>
       +                SOX
       +        </td>
       +        <td><%= WarVOX::Config.tool_path('sox') || "MISSING" %></td>
       +</tr>
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item" width='200'>
       +                LAME
       +        </td>
       +        <td><%= WarVOX::Config.tool_path('lame') || "MISSING" %></td>
       +</tr>
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item" width='200'>
       +                IAXRECORD
       +        </td>
       +        <td><%= WarVOX::Config.tool_path('iaxrecord') || "MISSING" %></td>
       +</tr>
       +
       +<tr>
       +        <td valign="top" align="right" class="header_item" width='200'>
       +                KissFFT
       +        </td>
       +        <td><%= @kissfft_loaded ? ($LOADED_FEATURES.grep(/kissfft/)[0] ) : "MISSING" %></td>
       +</tr>
       +</table>
       +
       +
       +</td></tr></table>
 (DIR) diff --git a/web/app/views/home/index.html.erb b/web/app/views/home/index.html.erb
       @@ -1,136 +1,45 @@
       -<table width='100%' align='center' border='0' cellpadding='9' cellspacing='0'>
       -<tr><td valign='top'>
       -
        <h1 class='title'>Introduction</h1>
        
       -<b>WarVOX</b> is a suite of tools for exploring, classifying, and auditing the
       -telephone system. Unlike normal wardialing tools, WarVOX works with the actual
       -audio from each call and does not use a modem directly. This model allows
       -WarVOX to find and classify a wide range of devices, including modems, through
       -direct data analysis. To get started, configure an IAX-capable VoIP provider
       -in the <b>Providers</b> section, then submit a new <b>Job</b>. Keep in mind
       -that the laws regulating automated dialing can vary by location, it is your
       -responsibility to ensure that your local laws and the laws governing the
       -target telephone range are respected.
       -
       -</td><td valign='top' align='center'>
       -
       -
       -<h1 class='title'>Statistics</h1>
       -
       -<table id="warvox_stats" cellspacing="0" width=200>
       -
       -<tr>
       -        <td valign="top" align="right" class="header_item">
       -                WarVOX Version:
       -        </td>
       -        <td><%= WarVOX::VERSION %></td>
       -</tr>
       -
       -<tr>
       -        <td valign="top" align="right" class="header_item">
       -                Providers:
       -        </td>
       -        <td><%= Provider.find(:all).length %></td>
       -</tr>
       -
       -
       -<tr>
       -        <td valign="top" align="right" class="header_item">
       -                Active Jobs:
       -        </td>
       -        <td><%= DialJob.find_all_by_status('active').length %></td>
       -</tr>
       -
       -<tr>
       -        <td valign="top" align="right" class="header_item">
       -                Total Jobs:
       -        </td>
       -        <td><%= DialJob.find(:all).length %></td>
       -</tr>
       -
       -<tr>
       -        <td valign="top" align="right" class="header_item">
       -                Results:
       -        </td>
       -        <td><%= DialResult.find(:all).length %></td>
       -</tr>
       -</table>
       -
       -
       -</td></tr>
       -<tr><td valign='top' colspan='2'>
       -
       -<h1 class='title'>Configuration</h1>
       -
       -
       -<table id="warvox_conf" cellspacing="0" width='100%'>
       -
       -<tr>
       -        <td valign="top" align="right" class="header_item" width='200'>
       -                Base Directory:
       -        </td>
       -        <td><%= WarVOX::Base %></td>
       -</tr>
       -
       -
       -<tr>
       -        <td valign="top" align="right" class="header_item" width='200'>
       -                Configuration File:
       -        </td>
       -        <td><%= WarVOX::Conf %></td>
       -</tr>
       +<p>
       +WarVOX is a suite of tools for exploring, classifying, and auditing telephone systems. Unlike normal wardialing tools, 
       +WarVOX works with the actual audio from each call and does not use a modem directly. This model allows WarVOX to find 
       +and classify a wide range of interesting lines, including modems, faxes, voice mail boxes, PBXs, loops, dial tones, IVRs,
       +and forwarders. WarVOX provides the unique ability to classify all telephone lines in a given range, not just those 
       +connected to modems, allowing for a comprehensive audit of a telephone system.
       +</p>
        
       +<h1 class='title'>Getting Started</h1>
       +<p>
       +In order to make phone calls, WarVOX needs to be configured with one or more service providers. For a list of compatible VoIP ISPs, please see the <a href="http://warvox.org/#Providers">Service Providers</a> section of the WarVOX web site. To add a new provider to WarVOX, access the web interface, click the <a href="/providers">Providers</a> link, and fill in the <b>New Provider</b> form. This form allows you to specify a nickname for the provider and indicate how many concurrent outbound calls can be made using this account. WarVOX can make use of multiple service providers and multiple outbuond calls per provider when processing jobs.
       +</p>
        
       -<tr>
       -        <td valign="top" align="right" class="header_item" width='200'>
       -                Data Storage:
       -        </td>
       -        <td><%= WarVOX::Config.data_path %></td>
       -</tr>
       +<p>Once one or more service providers have been configured, click the <a href="/dial_jobs/">Jobs</a> link. This will present a form that asks for the phone number range to dial, the number of seconds of audio to capture, and the maximum number of outgoing lines to use for this job.
       +</p>
        
       -<tr>
       -        <td valign="top" align="right" class="header_item" width='200'>
       -                Admin User:
       -        </td>
       -        <td><%= WarVOX::Config.authentication_creds[0] %></td>
       -</tr>
       +<p>The phone number range is specified by entering the full 10-digit phone number, with numbers replaced by X's where an entire range should be dialed. For example, the value 512-555-XXXX will make 10,000 calls, one to each number within the 512-555 exchange. In contrast, the value 512-555-555X will only make 10 calls, covering 5550 to 5559. Only 5 digits of the phone number range can be masked.
       +</p>
        
       -<tr>
       -        <td valign="top" align="right" class="header_item" width='200'>
       -                GNUPlot
       -        </td>
       -        <td><%= WarVOX::Config.tool_path('gnuplot') || "MISSING" %></td>
       -</tr>
       +<p>
       +The seconds field indicates the number of seconds to spend on each call, including the ring time. The larger the value, the more audio that can be captured, but you run the risk of leaving silent voice mail messages if this value is too large. Keep in mind that many per-minute service providers include ring time in the billing and round up to the nearest minute. This rounding is why the default value is set to 53 seconds. Most service providers do not charge for calls which were not answered.
       +</p>
        
       -<tr>
       -        <td valign="top" align="right" class="header_item" width='200'>
       -                SOX
       -        </td>
       -        <td><%= WarVOX::Config.tool_path('sox') || "MISSING" %></td>
       -</tr>
       +<p>
       +The outgoing line count is limited by the number of providers available and the number of lines available at each provider. If you are dialing a range with a limited number of inbound lines, the outgoing line count should be set to a small value, otherwise leave this value at the maximum number of available lines to complete jobs as quickly as possible. Each concurrent outbound call requires approximately 80kbits/s of downstream bandwidth.
       +</p>
        
       -<tr>
       -        <td valign="top" align="right" class="header_item" width='200'>
       -                LAME
       -        </td>
       -        <td><%= WarVOX::Config.tool_path('lame') || "MISSING" %></td>
       -</tr>
       +<p>The Caller ID is specified by entering the full 10-digit phone number, with numbers replaced by X's where parts of the number should be chosen randomly. This field also accepts the special value of "SELF", which will cause all calls to be made with the Caller ID set to the destination number (useful for testing poorly implemented voice mail security).
       +</p>
        
       -<tr>
       -        <td valign="top" align="right" class="header_item" width='200'>
       -                IAXRECORD
       -        </td>
       -        <td><%= WarVOX::Config.tool_path('iaxrecord') || "MISSING" %></td>
       -</tr>
       +<p>
       +Once the job parameters have been specified, click the <b>Create</b> button to start dialing. If you return the main <a href="/dial_jobs/">Jobs</a> screen you can track the progress of the job via the percentage value in the active jobs table. The amount of time a given job takes depends on the number of phone numbers within the range, the number of seconds of audio to record, and the number of concurrent outbound lines. A 1,000 number range with 53 seconds of audio and 10 outbound lines would take approximately 100 minutes to complete.
       +</p>
        
       -<tr>
       -        <td valign="top" align="right" class="header_item" width='200'>
       -                KissFFT
       -        </td>
       -        <td><%= @kissfft_loaded ? ($LOADED_FEATURES.grep(/kissfft/)[0] ) : "MISSING" %></td>
       -</tr>
       -</table>
       +<p>
       +After the job completes, access the <a href="/dial_results/">Results</a> link to view a listing of finished jobs. Click the <b>View</b> link to look at the raw call breakdown. To analyze the call data, click on the Results link, and then click the <b>Analyze Calls</b> link. Depending on the speed of your server, this can take up to 60 seconds per connected call to process all of the data. Once the data has been processed, the results will now be listed under the <a href="/analyze/">Analysis</a> link. Viewing the results will provide the signal graph, spectrum graph, and an audio player to hear the actual call.
       +</p>
        
        
       -</td></tr></table>
       +<h1 class='title'>Troubleshooting</h1>
       +<p>
       +If for some reason WarVOX is not working correctly, or if you have any questions, please contact the WarVOX development team at warvox[at]metasploit.com. To determine whether software dependencies have been satisfied, you can use the <b>bin/verify_install.rb</b> Ruby script included with the WarVOX distribution. The <a href="/home/about/">About</a> page also includes detailed information that may help resolve installation issues. If your calls fail to produce any results, double check the Provider configuration. To obtain the latest version of this software, please check the <a href="http://warvox.org/">WarVOX Web Site</a>.
       +</p>
 (DIR) diff --git a/web/app/views/layouts/dial_jobs.html.erb b/web/app/views/layouts/dial_jobs.html.erb
       @@ -1,17 +0,0 @@
       -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       -       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
       -
       -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
       -<head>
       -  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
       -  <title>DialJobs: <%= controller.action_name %></title>
       -  <%= stylesheet_link_tag 'scaffold' %>
       -</head>
       -<body>
       -
       -<p style="color: green"><%= flash[:notice] %></p>
       -
       -<%= yield  %>
       -
       -</body>
       -</html>
 (DIR) diff --git a/web/app/views/layouts/dial_results.html.erb b/web/app/views/layouts/dial_results.html.erb
       @@ -1,17 +0,0 @@
       -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       -       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
       -
       -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
       -<head>
       -  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
       -  <title>DialResults: <%= controller.action_name %></title>
       -  <%= stylesheet_link_tag 'scaffold' %>
       -</head>
       -<body>
       -
       -<p style="color: green"><%= flash[:notice] %></p>
       -
       -<%= yield  %>
       -
       -</body>
       -</html>
 (DIR) diff --git a/web/app/views/layouts/providers.html.erb b/web/app/views/layouts/providers.html.erb
       @@ -1,17 +0,0 @@
       -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       -       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
       -
       -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
       -<head>
       -  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
       -  <title>Providers: <%= controller.action_name %></title>
       -  <%= stylesheet_link_tag 'scaffold' %>
       -</head>
       -<body>
       -
       -<p style="color: green"><%= flash[:notice] %></p>
       -
       -<%= yield  %>
       -
       -</body>
       -</html>
 (DIR) diff --git a/web/config/routes.rb b/web/config/routes.rb
       @@ -4,6 +4,9 @@ ActionController::Routing::Routes.draw do |map|
          map.resources :dial_jobs, :has_many => [ :dial_results ], :member => { :run => :get, :stop => :get }
        
          map.resources :analyze, :member => { :view => :get, :resource => :get }
       +  map.connect   'analyze/:id/resource/:result_id/:type', :controller => 'analyze', :action => 'resource'
       +
       +
          map.resources :providers
        
          # The priority is based upon order of creation: first created -> highest priority.
 (DIR) diff --git a/web/public/images/musicplayer.swf b/web/public/images/musicplayer.swf
       Binary files differ.
 (DIR) diff --git a/web/public/javascripts/FusionCharts.js b/web/public/javascripts/FusionCharts.js
       @@ -30,7 +30,10 @@ infosoftglobal.FusionCharts = function(swf, id, w, h, debugMode, registerWithJS,
                
                //Set Quality        
                this.addParam('quality', 'high');
       -        
       +
       +        //Set WMODE
       +        this.addParam('wmode', 'transparent');
       +                
                //Add scripting access parameter
                this.addParam('allowScriptAccess', 'always');
                
       @@ -307,4 +310,4 @@ infosoftglobal.FusionChartsUtil.updateChartXML = function(chartId, strXML){
        /* Aliases for easy usage */
        var getChartFromId = infosoftglobal.FusionChartsUtil.getChartObject;
        var updateChartXML = infosoftglobal.FusionChartsUtil.updateChartXML;
       -var FusionCharts = infosoftglobal.FusionCharts;
       -\ No newline at end of file
       +var FusionCharts = infosoftglobal.FusionCharts;