FusionChart 水印破解方法(代码版)

来源:互联网 发布:古典音乐 知乎 编辑:程序博客网 时间:2024/04/30 10:55

  网上一直找不到有关去除水印的方法!

  正好做项目要用到这个鬼东西,折腾了一天,总算破解成功,把方法告诉大家。

先看下破解前的效果。

这是个很烦人的东西,而且有一个更加让人烦人的地方, 就是根本无法买!为什么,因为FusionChart官方已经停止下载了!就是说

你想买都买不到了,这可怎么办呢?没关系,我叫你手把手破解哦 = =。

为了成为一个好心人,今天我免费把我的FusionChart的完整版共享给大家,希望有用的人以后可以用到哦。

->下载地址 提取码:8tb9

我分享给大家的FusionChart不仅仅只有js和swf文件,更有asp.net工程等,PHP等,我网上看到过很多包,不过都没我这个齐全哦。

好吧,废话不多,开始破解,我们破解的话需要一些工具哦。

我们先要明白,是swf文件的问题,所以我们需要下载SWF反编译工具,

我推荐一个免费的,网上的大部分工具都很黑,要钱。

我这个不仅是免费的,还是汉化版的。

推荐使用Flash Decompiler Trillix ,

-->下载地址 提取码:sfmm

好了,我们下载完成以后,打开那个有水印的FLASH文件。

 

我这里因为是曲线图,所以是Spline.swf

然后大家可以在右边窗口看到脚本这一项。

因为我已经找到这一句加水印的话了,所以就直接打开6。

如果是其他的文件这句话的地方可能不同,大家如果想用Ctrf+F去查找的话,这里不能进行多文件查找,所以比较麻烦,

查找的话,推荐使用闪客精灵,记住别买哦,这东西超贵的,给大家的只是演示,说明闪客精灵可以准确定位那一句话的具体文件的位置。

好吧,不废话。

下一步我们找到了这句话。

恩,找到了,不过我们才成功一半,我们需要把文件导出成fla格式的。

打开转换菜单,然后在右边的窗口选择SWF全部,至于要导出的FLASH版本,最好是越高越好,

我用的ADOBE Flash cs5,如果你安装了对应版本的Flash ,那么导出成功以后会自动打开FLASH。

这里我们先点击转换当前。

打开了FLASH。先暂时不管他。

我们先打开转换后的目录,里面有FLA文件盒as文件。

我们这里在FLASH里面把所有的as文件都打开,然后再把所有的文件的任意地方打一个空格,保存,记得所有文件都要保存哦,这一步是最重要的

如果做得不完整的话,就会造成图表缺失或者是打不开,因为后面的导出影片会编译这些文件。

 

如上图,打开所有文件。

然后我们找到底下的Chart.as文件

依然是Ctrl+F查找Evaluation可以直接定位到那句话,去掉那句话和超链接OK。

 

然后返回FLA文件,导出影片。

替换到以前的就OK了,大功告成!

 

晚上了再个大家发一个福利。大家知道FusionChart是以键值对的形式添加的就是

<set lable='xxxx' value='xxx'>

大家有没有注意到,我上面的Label也是数字呢?哈哈,这个数字是不是间距应该不同呢?但是为什么一样呢?

因为FusionChart不提供2种数字的比例图,这就要我们自己去修改API,其实也不是很高深哦,我先放一张效果图。

看到了没,间距不一样哦~~

这个怎么实现的呢?

首先我们需要找到他添加X轴坐标的地方,这个地方其实很难找,但是我已经找到了,直接告诉大家把。

大家反编译出来的FLA文件附带了很多AS文件,在com\fusioncharts\core\chartsSpline2DChart.as里面,打开这个文件

定位到850行左右,如下图,可以看到X轴和Y轴的设置方法。

我们把X轴注释掉(防止以后要用),然后自己写一个X轴,这里我们为了方便,就用Y轴的方法。

嘿嘿,其实FC留了一个后门的,其实直接用这个GetAxisPositon方法就OK。

我们来 看一下这个方法的样子。

这个方法在SingleYAxisChart.as里面。

    function getAxisPosition(value, upperLimit, lowerLimit, startAxisPos, endAxisPos, isYAxis, xPadding)    {        var __reg3 = undefined;        var __reg2 = undefined;        var __reg1 = undefined;        var __reg4 = undefined;        __reg3 = upperLimit - lowerLimit;        if (isYAxis)         {            __reg2 = endAxisPos - startAxisPos;            __reg1 = __reg2 / __reg3 * (value - lowerLimit);            __reg4 = endAxisPos - __reg1;        }        else         {            __reg2 = endAxisPos - startAxisPos - 2 * xPadding;            __reg1 = __reg2 / __reg3 * (value - lowerLimit);            __reg4 = startAxisPos + xPadding + __reg1;        }        return __reg4;    }
SingleYAxisChart.as

注意里面有一个if (isYAxis) 哈哈,这个就是说,如果是Y轴,那么我们肯定不是Y轴。所以这个参数要写FALSE。

下面我们回到正题,把这个方法写出来

        while (__reg2 <= this.num)         {           // this.data[__reg2].x = this.num == 1 ? this.elements.canvas.x + this.elements.canvas.w / 2 : this.elements.canvas.x + this.params.canvasPadding + __reg20 * (__reg2 - 1);            this.data[__reg2].x = this.getAxisPosition(this.data[__reg2].label, this.getMaxDataValueX(), this.getMinDataValueX(), this.elements.canvas.x, this.elements.canvas.toX, false, 0);            this.data[__reg2].y = this.getAxisPosition(this.data[__reg2].value, this.config.yMax, this.config.yMin, this.elements.canvas.y, this.elements.canvas.toY, true, 0);            this.data[__reg2].valTBY = this.data[__reg2].y;            ++__reg2;        }
需要改动的地方

getAxisPosition里面的参数功能是这些

function getAxisPosition(value, upperLimit, lowerLimit, startAxisPos, endAxisPos, isYAxis, xPadding)

value:判断是label或者value

upperLimit:上限,放到X轴即最右边的极限

lowerLimit:最小值

startAxisPos:开始的坐标位置,这里直接把对应的Y改成X。

endAxisPos:结束的坐标位置,同上

isYAxis:是否是Y轴

xPadding:X轴PADDING,顾名思义啦。

这里我还创建了2个方法。一个是得到X轴最大值,一个是得到Y轴最大值,这里也可以写死,不过推荐大家写活的。

方法如下:可以参考Y轴的方法,把value替换成label就OK了

    //获得X轴的最大值        function getMaxDataValueX()    {        var __reg3 = undefined;        var __reg4 = false;        var __reg2 = undefined;        __reg2 = 1;        while (__reg2 <= this.num)         {            if (__reg4 == false)             {                if (this.data[__reg2].isDefined == true)                 {                    __reg4 = true;                    __reg3 = this.data[__reg2].label;                }            }            else if (this.data[__reg2].isDefined)             {                __reg3 = this.data[__reg2].label > __reg3 ? this.data[__reg2].label : __reg3;            }            ++__reg2;        }        return __reg3;    }        //获得X轴的最小值        function getMinDataValueX()    {        var __reg3 = undefined;        var __reg4 = false;        var __reg2 = undefined;        __reg2 = 1;        while (__reg2 <= this.num)         {            if (__reg4 == false)             {                if (this.data[__reg2].isDefined == true)                 {                    __reg4 = true;                    __reg3 = this.data[__reg2].label;                }            }            else if (this.data[__reg2].isDefined)             {                __reg3 = this.data[__reg2].label < __reg3 ? this.data[__reg2].label : __reg3;            }            ++__reg2;        }        return __reg3;    }
得到最大值最小值(X轴)

最后,晚安各位。

 

0 0