1 SWFObject v1.5的对象结构
deconcept
??? util
??????? getRequestParameter(_2b) // 取得url参数value。_2b是URL的key。
??? SWFObjectUtil
??????? getPlayerVersion() // 取得版本号对象。major.minor.rev。
??????? cleanupSWFs() // 清除页面上所有<OBJECT>元素。
??? SWFObject(_1, id, w, h, _5, c, _7, _8, _9, _a)
?????????????????????????????????? // _1: swf,指定SWF文件路径。
?????????????????????????????????? // _id: id,<embed>或者<object>标签的id。
?????????????????????????????????? // w: width,属性width。
?????????????????????????????????? // h: height,属性height。
?????????????????????????????????? // _5: version,flash版本,默认自动会去读取本地的flash插件版本的。
?????????????????????????????????? // c: bgcolor,背景色。
?????????????????????????????????? // _7: quality,品质(low, high, autolow, autohigh, best ) 。
?????????????????????????????????? // _8: xiRedirectUrl
?????????????????????????????????? // _9: redirectUrl
?????????????????????????????????? // _a: url参数key
??????? useExpressInstall(_d) // 设置xiSWFPath, useExpressInstall属性
??????? setAttribute(_e, _f) // 设置属性attributes。_e是key,_f是value。
??????? getAttribute(_10) // 取得属性attributes中的值。_10是key。
??????? addParam(_l1, _l2) // 设置参数params。_l1是key,_l2是value。
??????? getParams() // 取得params。
??????? addVariable(_l3, _l4) // 设置变量variables。_13是key,_14是value。
??????? getVariable(_l5) // 取得变量variables中的值。
??????? getVariables() // 取得变量variables。
??????? getVariablePairs() // 取得变量variables的key=value对数组。
??????? getSWFHTML() // 返回flash嵌入的HTML
???????????????????? // 例如:
???????????????????? // <embed type="application/x-shockwave-flash"
???????????????????? // src="/amchart/amchart/amcolumn/amcolumn.swf"
???????????????????? // width="520" height="380"
???????????????????? // style="undefined"
???????????????????? // id="amcolumn" name="amcolumn"
???????????????????? // bgcolor="#FFFFFF"
???????????????????? // quality="high"
???????????????????? // flashvars="path=/amchar/amchar/amcolumn/&settings_file=amcolumn_settings.xml&data_file=amcolumn_data.txt&preloader_color=#000000"/>
??????? write(_20) // 写入flash插入的位置。_20可以是id的名称或者是一个dom结点。
??? PlayerVersion(_29) // 创建版本号对象。
??????? versionIsValid(fv) // 验证flash插件的当前版本号是否兼容fv的版本号(大于等于)。
getQueryParamValue = deconcept.util.getRequestParameter;
FlashObject = deconcept.SWFObject;
SWFObject = deconcept.SWFObject;
2 数据文件
支持csv、xml格式。
csv实际上是一个文本文件,而非excel文件,所以,可以直接使用文本文件来命名。
每一列的数据采用“;”或“,”分隔都可以。
例如:
// amcolumn_data.txt
2003;2.5
2004;4.6
2005;5.8
2006;3.8
2007;4.8
2008;6.8
2009;7.8
3 配置文件
例如:
// amcolumn_settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings>
?? <!-- chart config -->
?? <data_type>csv</data_type>???????????????????????????????????????????????????? <!-- [xml] (xml / csv) -->
?? <digits_after_decimal>2</digits_after_decimal>
?? <legend>
????? <enabled>false</enabled>
?? </legend>
?? <!-- plugin config -->??
?? <plugins>
??? <!-- value indicator plugin is suitable for line chart, column chart & xy chart -->
??? <plugin file="/amchart/amchart/amcolumn/plugins/value_indicator.swf" position="above">????? <!-- file should be located in "path" folder. position can be "behind" or "above". "behind" means that the plugin will be loaded behind graphs -->
????? <chart_type>column</chart_type>???????????????????????????????????????????? <!-- [line] (line / column / xy) this plugin can be used with line or with column chart -->
????? <axis></axis>?????????????????????????????????????????????????????????????? <!-- [left] (left / right / x / y) if used with line chat use left or right, if used with xy chart, use x or y -->
????? <line_color>#000000</line_color>??????????????????????????????????????????? <!-- [#BBBB00] (hex color code) -->
????? <line_alpha></line_alpha>?????????????????????????????????????????????????? <!-- [100] (0 - 100) -->
????? <text_color>#000000</text_color>??????????????????????????????????????????? <!-- [settings.text_color] -->
????? <text_size>13</text_size>?????????????????????????????????????????????????? <!-- [settings.tex_size] -->
????? <precision>2</precision>??????????????????????????????????????????????????? <!-- [0] (Number) how many numbers after comma should be shown -->
??? </plugin>
? </plugins>
</settings>
4 在HTML上显示
<body>
<!-- saved from url=(0013)about:internet -->
<!-- amcolumn script-->
?<div id="flashcontent">
? <strong>You need to upgrade your Flash Player</strong>
?</div>
?<script type="text/javascript">
? // <![CDATA[?
? var so = new SWFObject("/amchart/amchart/amcolumn/amcolumn.swf", "amcolumn", "520", "380", "8", "#FFFFFF"); // 创建SWFObject对象
? so.addVariable("path", "/amchart/amchart/amcolumn/"); // 暂时不是很清楚,破解时用到了这个属性。既然,例子写了,我们也写好了。
? so.addVariable("settings_file", encodeURIComponent("amcolumn_settings.xml")); // 配置文件
? so.addVariable("data_file", encodeURIComponent("amcolumn_data.txt")); // 数据文件
? so.addVariable("preloader_color", "#000000"); // 加载时显示的颜色
? so.write("flashcontent"); // 在flashcontent位置写入flash插入的HTML
? // ]]>
?</script>
<!-- end of amcolumn script -->
</body>
5 破解amchart
没有破解的amchart显示的时候在左上角会出现“chart by amCharts.com”链接,表示是未注册版本,非常讨厌。
原理:网上看到的。
用SWF Decompiler软件加载swf文件,在Resources下找Action中的MainMoive,代码中有一段如下:
function checkKey(serial)
{
?? var _l1 = com.amcharts.Utils.stripSymbols(serial, " ");
?? _l1 = com.amcharts.Utils.stripSymbols(_l1, "/n");
?? _l1 = com.amcharts.Utils.stripSymbols(_l1, "/r");
?? _l1 = com.amcharts.Utils.stripSymbols(_l1, "/r/n");
?? arr = _l1.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
这就是序列号的代码,再往下看
key_loader.loadVars(path + "amcharts_key.txt", this, "checkKey", false, "checkKey");
破解:
在swf目录下,新建文件amcharts_key.txt。
输入序列号内容如下:0000-0000-1422-7223。
保存后测试通过!真没想到他们会采用这么简单的加密方式!
注意:测试的时候发现一个问题,即使amcharts_key.txt正确放入SWF文件目录下,也有破解不成功的情况。
1)amcolumn, amline, ampie破解时跟so.addVariable("path", "");有关系。该属性设置错误破解不成功。
2)amstock似乎无法破解!