请高手破解百度指数中的一个算法
百度指数查询:http://index.baidu.com/main/word.php?word=qq&submit=%B0%D9%B6%C8%D2%BB%CF%C2
显示曲线的那个FLASH (http://index.baidu.com/fla/TrendAnalyser.swf)已经通过闪客精灵破解了。
但是关键一个算法,估计用了混淆,导致破解出来的代码,不容易看懂。因本人不大懂AS的混淆机制,希望有高人指点下。破解出来的StringTool.as代码如下:
如有高手做过,可以加我QQ:1469886 不甚感激。愿意出500分求答案。
package
{
import baidu.lib.utils.*;
public class StringTool extends Object
{
//下面这段定义应该是错的
private static var format:String;
private static var format:String;
private static var format:String;
private static var format:String;
private static var format:String;
private static var format:String;
private static var format:String;
private static var genCode:String;
private static var genCode:String;
private static var genCode:String;
private static var genCode:String;
private static var genCode:String;
private static var genCode:String;
private static var genCode:String;
private static var genCode:String;
private static var genCode:String;
private static var genCode:String;
public function StringTool()
{
return;
}// end function
private static function format(param1:String, param2:String) : String
{
return String.fromCharCode(Math.floor(param1.charCodeAt(0) * param2.charCodeAt(0) / 110));
}// end function
public static function genCode(param1:String) : String
{
return StringTool.genCode.apply(StringTool, arguments);
}// end function
private static function genCode() : String
{
return NumberFormatter.format(Math.random(), "IDDDD");
}// end function
private static function genCode() : void
{
//关键是以下这段代码
genCode = "Z";
genCode = "g";
genCode = "X";
genCode = "e";
genCode = "S";
genCode = "c";
genCode = "J";
genCode = "a";
//上面定义的变量名称一样,应该是错误的。包括下面的代码。
genCode = format(genCode, genCode); //此处的format函数不是上面提到的format函数。在另外一个as文件中。
format = format(genCode, genCode);
format = format(genCode, genCode);
format = format(genCode, genCode);
format = format(genCode, genCode);
format = format(genCode, genCode);
format = format(genCode, genCode);
format = format(genCode, genCode);
genCode = genCode + format + genCode + format + genCode + format + genCode + format + genCode + format + genCode + format + genCode + format + genCode + genCode;
return;
}// end function
private static function genCode(param1:String) : String
/*param1是服务器生成的一个临时数值和查询的关键词相加的字符
然后通过这个function 加上上面的function 生成的秘钥然后md5一下。再在两边加上5个随机数字 提交到服务器上验证
md5函数我测试过应该没被修改过.现在不知道怎么分析他的秘钥(就是上面一个function)
*/
{
var _loc_2:String = null;
if (!genCode)
{
genCode();
}
_loc_2 = genCode() + MD5.encrypt(param1 + genCode) + genCode();
return _loc_2;
}// end function
}
}