来源:http://blog.csdn.net/tianshikuqi8/archive/2010/06/30/5705683.aspx

最近公司开发项目使用到了amchart控件,所以自己研究了下,发现在这个控件生成的图片以及曲线还是比较漂亮的,而且样式也比较多。废话不多说了http://www.amcharts.com/(立陶宛的公司)这是amchart的官方网站,登陆上去很清楚的就能发现支持flash charts flex charts  WPF/Sliverlight charts 这几种不同的应用,每种不同版本中又分为不同的曲线比如stock类型的、column&bar类型的。。。。可以自己看下,在Asp.net程序中,官方还提供了Asp.net控件版本的控件,在项目中引用控件后就可以直接使用,下面是一段实例代码
 
:  public void BindData()
        {
 
        //手动生成一个DataTable
            DataSet ds = new DataSet("column");
            DataTable dt = new DataTable("columnTable");
            DataColumn dc_y = new DataColumn("year");
            DataColumn dc_v = new DataColumn("val");
            DataColumn dc_v1 = new DataColumn("val1");
            dt.Columns.Add(dc_y);
            dt.Columns.Add(dc_v);
            dt.Columns.Add(dc_v1);
            Random rd = new Random();
             for (int i = 2000; i < 2010; i++)
            {
                DataRow dr = dt.NewRow();
                dr[dc_y] = i.ToString();
                dr[dc_v] = (rd.NextDouble() * i).ToString();
                dr[dc_v1] = (rd.NextDouble() * (i + i / 3)).ToString();
                dt.Rows.Add(dr);
            }
            ds.Tables.Add(dt);     
 //立体感觉深度
            ColumnChart1.Depth = 10;
 //动态升长时间
            ColumnChart1.ColumnGrowTime = 5;
            ColumnChart1.Width = new Unit(600);
            ColumnChart1.Height = new Unit(500);
            ColumnChart1.PlotAreaBackgroundColor = System.Drawing.Color.Yellow;
            ColumnChart1.ChartDirectory = "~/amcharts/amcolumn/";//柱型1 使用不同类型的图表可以在这里引用不同的曲线
            ColumnChartGraph ccg = new ColumnChartGraph();
            ccg.DataSource = ds;
            ccg.DataSeriesItemIDField = "year";
            ccg.Title = "测试";
            ccg.DataValueField = "val";
 //形状,可以是柱型,也可以是线型
            ccg.GraphType = ColumnChartGraphTypes.Column;
            ColumnChart1.Graphs.Add(ccg);
 
            ColumnChartGraph ccg1 = new ColumnChartGraph();
            ccg1.DataSource = ds;
            ccg1.DataSeriesItemIDField = "year";
            ccg1.Title = "测试1";
            ccg1.DataValueField = "val1";
            ccg1.GraphType = ColumnChartGraphTypes.Column;
            ColumnChart1.Graphs.Add(ccg1);
 
 //设置上面显示的文字格式
            ColumnChart1.ColumnDataLabelFormatString = "{value}";
            ColumnChart1.LineBalloonTextFormatString = "{value}";
 
            ColumnChart1.DataSource = ds;
            ColumnChart1.DataSeriesIDField = "year";
            ColumnChart1.DataBind();
 

        }
 
这样在后台设置,如果数据量比较大的话比较繁琐
 
不过在Asp.net项目中也可以使用flash charts跟使用一般的flash方法类似
 
其实amcharts的文档说明的已经很清楚了
 
在页面上需要使用图表的地方添加
 
 
 <!-- saved from url=(0013)about:internet -->
<!-- amstock script-->
  <script type="text/javascript" src="amstock/swfobject.js"></script>
 <div id="flashcontent" style="z-index: -1">
  <strong>You need to upgrade your Flash Player</strong>
 </div>
 
 <script type="text/javascript">
  // <![CDATA[ 
  var so = new SWFObject("amstock/amstock.swf", "amstock", "长度", "宽度", "8", 颜色");  //amstock为引用的曲线类型
  so.addVariable("path", "");
  //so.addVariable("data_file", encodeURIComponent("../aa.csv"));//csv为数据文件即要显示的
  so.addVariable("settings_file", encodeURIComponent(""));
 
  so.write("flashcontent");
  // ]]>
 </script>
<!-- end of amstock script -->
 
flash chart 使用的是csv格式的数据,将要展示的数据写入到csv文件中,之后根据配置文件.xml生成曲线
 
至于配置配置文件可以使用http://extra.amcharts.com/editor/stock/官方提供的,可以很容易生成配置文件,其中配置文件中
 
<data_sets>
    <data_set did="0">
      <title></title>
      <short>1C</short>
      <description></description>        
      <color></color>
      <file_name>***.csv</file_name>
      <events_file_name>events.xml</events_file_name>
      <csv>
        <reverse>true</reverse>
        <separator>,</separator>
        <date_format></date_format>
        <decimal_separator>.</decimal_separator>
        <columns>
          <column>date</column>
              
        </columns>
      </csv>
      <events>
 
      </events>
    </data_set>
  
  </data_sets>
 
data_sets是用来配置曲线对应的数据文件的 <file_name>***.csv</file_name>指示的对应的数据文件的名称<columns>指示了csv中要展示的那些数据   <events_file_name>events.xml</events_file_name>指的是触发事件的.xml文件的名称,使用的时候可以将要展示的数据写入csv文件(重新创建),之后将配置文件中的<file_name>***.csv</file_name>动态替换掉,之后在页面的so.addVariable("settings_file", encodeURIComponent(""));中引用配置文件就可以。上面介绍的是amstock曲线的使用方法,别的曲线大同小异!

 amchart的破解
 
amChart的Chart破解到比较好找,自己也看了一下
用Sothink SWF Decompiler破解swf文件,能看到加载注册信息的算法
function checkKey(serial)
{
    serial = com.amcharts.column.Utils.stripSymbols(serial, " ");
    serial = com.amcharts.column.Utils.stripSymbols(serial, "\n");
    serial = com.amcharts.column.Utils.stripSymbols(serial, "\r");
    serial = com.amcharts.column.Utils.stripSymbols(serial, "\r\n");
    arr = serial.split("-");
    if (Number(arr[2]) + Number(arr[3]) != 8645 || Number(arr[2].substr(1, 1)) - Number(arr[3].substr(2, 1)) != 2)
    {
        attachMovie("copyright_mc", "copyright_mc", 1001);
    } // end if
} // End of the function
结果很简单,在注册文件里面填一个满足条件的注册号即可
例如:-cracked-1422-7223-cracked-
把文件保存成amcharts_key.txt即可
=======================================================
amChart .net Control的破解就没找到了
于是用Lutz Reader's .net reflector,反编译了控件,找到加密算法
private bool CheckKey(string keyString)
{
    try
    {
        string[] parts = keyString.Split(new char[] { '-' });
        if (parts.Length != 6)
        {
            return false;
        }
        if (parts[0].ToUpper() != "AMCHART")
        {
            return false;
        }
        if (parts[1].ToUpper() != "NETL")
        {
            return false;
        }
        int n1 = int.Parse(parts[3]);
        int n2 = int.Parse(parts[4]);
        int n3 = int.Parse(parts[5]);
        return (Math.Abs((int) ((((n1 * 8) - (n2 * 7)) + 0x4d2) % 0x2710)) == n3);
    }
    catch
    {
        return false;
    }
}
然后找一个满足条件的注册号也不难了,
例如:AMCHART-NETL-Cracked-10-10-1244
最后写入在web.config里面即可====================================================
以上是在网上找到的破解方法。
但是,我按照第二种方法破解,发现还是会显示未破解的链接,
于是,自己也去用reflector,反编译了一下控件。
发现如下代码:
        if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["amcharts_net_key"]))
        {
            this.CheckKey(ConfigurationManager.AppSettings["amcharts_net_key"]);
        }
        if (File.Exists(Path.Combine(HttpContext.Current.Server.MapPath("~/Bin"), "amcharts_net_key.txt")))
        {
            this.CheckKeyFile(Path.Combine(HttpContext.Current.Server.MapPath("~/Bin"), "amcharts_net_key.txt"));
        }
        if (File.Exists(Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data"), "amcharts_net_key.txt")))
        {
            this.CheckKeyFile(Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data"), "amcharts_net_key.txt"));
        }
 
    private bool CheckKey(string keyString)
    {
        try
        {
            string[] parts = keyString.Split(new char[] { '-' });
            if (parts.Length != 6)
            {
                return false;
            }
            if (parts[0].ToUpper() != "AMCHART")
            {
                return false;
            }
            if (parts[1].ToUpper() != "NETL")
            {
                return false;
            }
            int n1 = int.Parse(parts[3]);
            int n2 = int.Parse(parts[4]);
            int n3 = int.Parse(parts[5]);
            return (Math.Abs((int)((((n1 * 8) - (n2 * 7)) + 0x4d2) % 0x2710)) == n3);
        }
        catch
        {
            return false;
        }
    }
 

    private bool CheckKeyFile(string keyPath)
    {
        try
        {
            return this.CheckKey(File.ReadAllText(keyPath).Trim());
        }
        catch
        {
            return false;
        }
    }

原来控件不可以校验web.config中的注册号
还可以校验bin和App_Data目录下的amcharts_net_key.txt文件。
 
另外,swf所在目录下还要执行第一种破解才算完美破解
 
amstock破解可以在这里下载到http://tianshikuqi8.download.csdn.net/

創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()